По материалам статьи Slava Oks: Tracking VAS in Yukon
Когда разработчики приступили к работе над следующей версией SQL Server - Yukon, они осознавали, что развитые средства поддержки являются одним из ключевых моментов успешности проекта. Своей целью автор ставит охват тем, описывающих "нижние" уровни организации СУБД, которые многим из Вас, как он уверен, действительно интересны, то есть это управление памятью и планирование ресурсов. В этой статье представлен беглый обзор того, как можно контролировать и диагностировать виртуальное адресное пространство - Virtual Address Space (VAS), используемое SQL Server. Автор надеется, что Вы понимаете что такое VAS и как оно организовано в Windows. Надеясь на Ваше терпение, автор постарается побыстрее описать всю исходную информацию, что бы в ближайшем будущем мы могли подробно поговорить о менеджере памяти SQL Server.
Представленный ниже запрос можно выполнять на сервере периодически, чтобы отслеживать возможные отклонения, связанные с VAS. Постоянное отклонение VAS от нормы может указывать на потенциальную проблему. Не смотря на то, что Yukon умет восстанавливаться после вытеснения VAS намного лучше, чем SQL Server 2000, если в реальности существует утечка памяти, спровоцированная внешними компонентами загруженными в наше VAS, поделать с этим будет практически ничего нельзя...
Замечание автора: В зависимости от бета - версии Yukon, возможно, потребуется изменить имена полей. Кроме того, автор не причисляет себя к гуру в T-SQL и представленный ниже пример предназначен только для целей демонстрации, как это работает. Автор уверен, что Вы - парни можете придумать запросы и получше :-))
CREATE VIEW vasummary AS select Size = VaDump.Size, Reserved = sum(case (convert (INT,VaDump.Base) ^ 0) when 0 then 0 else 1 end), Free = sum(case (convert (INT,VaDump.Base) ^ 0x0) when 0 then 1 else 0 end) from ( --- combine all allocation according with allocation base, do not take into --- account allocations with zero allocation_base --- select CONVERT (varbinary,sum(region_size_bytes)) AS Size, allocation_base AS Base from sys.dm_os_virtual_address_dump where allocation_base <> 0x0 group by allocation_base UNION ( --- we shouldn't be grouping allocations with zero allocation base --- just get them as is --- select CONVERT (varbinary,region_size_bytes), allocation_base from sys.dm_os_virtual_address_dump where allocation_base = 0x0) ) as VaDump group by Size --- Get vasummary information: Number of regions of a given size in SQL Server Size --- and their status select * from vasummary --- Retrieve max available block --- select max(size) from vasummary where Free <> 0 --- Get sum of all free regions --- select sum(size*Free) from vasummary where Free <> 0 |
Вот, что может получиться в итоге:
Size Reserved Free -------------------------------------- ----------- ----------- 0x0000000000044000 1 0 0x0000000000048000 1 0 0x000000000004A000 1 0 0x000000000004F000 0 1 0x0000000000050000 0 1 0x0000000000052000 1 0 0x0000000000058000 2 0 0x000000000005A000 2 0 0x0000000000061000 1 0 0x0000000000070000 0 1 0x0000000000078000 1 0 0x0000000000079000 1 0 0x0000000000080000 325 1 0x0000000000082000 1 0 0x0000000000084000 1 1 0x000000000008B000 0 1 0x000000000008C000 1 0 0x0000000000090000 1 1 0x0000000000092000 2 0 0x0000000000093000 1 0 0x0000000000094000 1 0 0x0000000000097000 1 0 0x000000000009B000 1 0 0x000000000009E000 1 0 0x00000000000A0000 0 1 0x00000000000A7000 0 1 0x00000000000A9000 1 0 0x00000000000AC000 2 1 0x00000000000BC000 0 1 0x00000000000C0000 1 0 0x00000000000C4000 1 0 0x00000000000C6000 1 0 0x00000000000C8000 1 0 0x00000000000F0000 0 1 0x0000000000100000 16 0 0x0000000000102000 2 0 0x0000000000103000 1 0 0x000000000010A000 1 0 0x0000000000110000 8 0 0x0000000000134000 1 0 0x000000000015B000 1 0 0x000000000015E000 1 0 0x0000000000160000 4 0 0x00000000001B0000 1 0 0x00000000001DC000 1 0 0x0000000000220000 0 1 0x0000000000250000 0 1 0x0000000000260000 1 0 0x000000000026F000 0 1 0x0000000000270000 0 1 0x0000000000280000 1 0 0x00000000002C5000 1 0 0x00000000002F0000 0 1 0x0000000000340000 0 1 0x0000000000356000 1 0 0x0000000000360000 0 1 0x0000000000400000 338 0 0x0000000000800000 1 0 0x0000000000802000 1 0 0x0000000000900000 0 1 0x0000000001D29000 1 0 0x0000000004F56000 1 0 0x000000000F317000 0 1 (110 row(s) affected) -------------------------------------------------------------- 0x000000000F317000 (1 row(s) affected) ----------- 294117376 (1 row(s) affected) |
Комментариев нет:
Отправить комментарий