По материалам статьи Slava Oks: Tracking VAS in Yukon, cont...
Некоторые из Вас, возможно, скучали, читая мою предыдущую статью "Обзор Virtual Address Space - VAS". Я понимаю, что тема VAS до этого была многократно освещена множеством авторов и ей было уделено много времени, и Вы наверняка знаете об этом больше, чем даже хотелось бы знать. Однако, наберитесь, пожалуйста, терпения. Я хочу дать достаточный предварительный обзор темы, что бы читатель смог легко ориентироваться в предлагаемом ему материале. Мне хотелось бы показать ту часть внутренней организации операционной системы, без которой будет сложно охватить тему, о которой Вы хотите узнать побольше: "Управление памятью в SQL Server". Поэтому я продолжу эту тему в следующий раз.
Ранее мы обсудили VAS и то, как можно оценить его использование с помощью специального представления vasummary, которое обсуждалось в предыдущей статье: "Контроль VAS в SQL Server 2005". Теперь, учитывая возможности этого представления и других dmv - представлений, фактически мы можем получить больше информации о VAS в SQL Server. Давайте же сделаем это!
Как многим из Вас известно, размер стека потока SQL Server равен 512 КБ (0x80000). Это означает, что каждый поток для своего стека резервирует в VAS 512 КБ. Есть ещё и дополнительные 4 КБ в VAS, которые используется для Thread Environment Block (TEB) - блока окружения потока, но в данном случае это не очень важно. Вопрос заключается в следующем: имея представление vasummary, возможно ли оценить число потоков, выполняющихся в данный момент на сервере. Ответ - ДА! И вот нужный запрос:
|
|
Вот это да, как всё оказалось просто ! Но это только оценка. Таким же образом можно получить реальное число потоков, если использовать системное представление: dm_os_threads.
|
|
Как можно видеть, количества потоков в этих двух запросах различны. Почему? Причина может быть в том, что другой компонент резервировал в SQL Server область VAS точно такого же размера. Обычно находится немного таких компонент. Это означает, что первый из запросов более достоверно отражает число потоков в SQL Server. Только, пожалуйста, имейте в виду, что первый запрос более дорог в плане исполнения, чем второй. В реальной жизни, для получения имеющихся в процессе SQL Server потоков, предпочтительнее использовать показывающее потоки dmv.
Мы должны помнить, что значение параметра максимального числа потоков сервера в sp_configure фактический не является верхним пределом для реального числа потоков в SQL Server. Потоки могут быть созданы разным библиотеками dll, включая netlibs, rpc, xps и т.д.. Во многих случаях мы никак не можем управлять такими потоками, но, исполняя представленный выше запрос, мы получим реальную информацию обо всех потоках в VAS SQL Server, а не только о потоках, созданных нами.
Можно получить и больше информации об использование потоков в VAS. Информирующее о потоках dmv-представление включает информацию о стеке потока и о его TEB:
|
|
Используя это dmv и системное dm_os_virtual_address_dump, фактически можно показать поток в VAS. Я не буду приводить здесь такой запрос, оставляя его реализацию читателю, в качестве тренировки...
Прежде, чем мы перейдём к загруженным модулям, я хотел бы предложить Вам задуматься над следующим, ну хотя бы немного : Как VAS и получаемый из dmv-представлений результат отличались бы, если бы SQL Server был запущен в режиме "Fiber mode"? Пока же, а отткладываю ответ на этот вопрос до того момента, пока мы не поговорим о планировании.
Из всего вышесказанного Вы узнали способ оценки числа потоков, запущенных в SQL Server. К сожалению, невозможно использовать представление vasummary для того, что бы узнать об использовании VAS библиотеками dll. Причина в том, что разные dll имеют разные размеры. Однако мы можем использовать системные представления: dm_os_loaded_modules и dm_os_virtual_address_dump, которые позволяют получить информацию о загруженных dll.
|
|
Как и в случае с представлением для потоков, соединяя это представление с системным представлением dm_os_virtual_address_dump, Вы сможете получить информацию о расположении dll внутри SQL Server VAS. Теперь Вы понимаете, что это представление очень важно для понимания того, как используется VAS SQL Server, и оно даёт Вам хорошую индикацию этого.
В следующий раз я расскажу о ресурсах памяти другого типа.
Комментариев нет:
Отправить комментарий