Определить, какая база грузит сервер.

--__Александр__--

Есть 2005 сеервер, на нем 5 баз различной архитектуры.Задача - Смотрим системный монитор и видим, что процесс sqlservr использовал в момент времени N ЦПУ на 80%. Надо эти 80% как-то распределить между базами.Решение. Запускаем профайлер + системный монитор. Определяем, какие запросы выполнялись в момент времени N.Ищем эти запросы в sys.dm_exec_query_stats и по last_worker_time(или по avg_worker_time) находим долю от 80%.Можно ли решать задачу таким путем? Есть ли решение попроще и/или поточнее?-----------------open your mind
24 ответа

--__Александр__--

Решение. Запускаем профайлер + системный монитор.
можно заменить на запуск sqldiag (в msdn есть информация)


--__Александр__--

--__Александр__--,А стандартные отчеты не подойдут для данных целей?


--__Александр__--

Kirillich Какие и как их применить?-----------------open your mind


--__Александр__--

--__Александр__--,Можно попробовать вытянуть значение CPU time из SQL Server Profiler. Там есть такая колонка CPU. Т.е. вы сразу видите запрос, время когда он выполнялся и его CPU time. Если trace файл будет сохранен в БД в виде таблицы, то может с этим работать будет еще удобнее


--__Александр__--

Смотрите тут и тут.А вообще-то поиск на форуме работает, 100 раз уже обсуждалось.


--__Александр__--

Павел-П Да, видимо удобнее, попробую, спасибо.DeColo®es,Вы вопрос мой читали? Еще раз опишу задачу.Вот смотрю я в системный монитор и вижу что очередь к диску возросла с 8(нормальное значение), до 20 и висит на этом значении 5 минут.Я знаю, что в этот момент выполняется 7 запросов.Как я могу определить, что запрос с 1-6 дают 10% от очереди в 20, а седьмой запрос дает 90% от очереди к диску в 20?В привиденных ваших примерах рассматривается совсем другая ситуация.


--__Александр__--

Павел-П Да, видимо удобнее, попробую, спасибо.DeColo®es,Вы вопрос мой читали? Еще раз опишу задачу.Вот смотрю я в системный монитор и вижу что очередь к диску возросла с 8(нормальное значение), до 20 и висит на этом значении 5 минут.Я знаю, что в этот момент выполняется 7 запросов.Как я могу определить, что запрос с 1-6 дают 10% от очереди в 20, а седьмой запрос дает 90% от очереди к диску в 20?В привиденных ваших примерах рассматривается совсем другая ситуация.
Профайлер запустить?


--__Александр__--

DeColo®es,Вы вопрос мой читали? Еще раз опишу задачу.
Ищите запросы с наибольшим количеством чтений - они и грузят диск. CPU растет как раз в те моменты, когда диск простаивает.


--__Александр__--

Гавриленко Сергей Алексеевич Профайлер запущен уже в первом посте ))Вопрос в том, можно ли на основании данных из профайлера пропорционально распределять показания системного монитора и как корректно это сделать?Вот было показание ЦПУ 80%. В это время по профайлеру выполнялось 5 запросов.Они выполняться закончили, записал показания ЦПУ для этих запросов из профайлера, все хорошо.Как теперь вычеслить, какой вклад в показания ЦПУ 80% был каждого из запросов.То есть мне нужно получить, что например запрос №1 - №4 взяли по 10% ЦПУ, а №5 - 40% ЦПУ.DeColo®es Задача не найти запросы. Задача доказать третьему лицу, что "базу грузит" запрос №1,№2 и №3, а не №4,№5.-----------------open your mind


--__Александр__--

Гавриленко Сергей Алексеевич Профайлер запущен уже в первом посте ))Вопрос в том, можно ли на основании данных из профайлера пропорционально распределять показания системного монитора и как корректно это сделать?Вот было показание ЦПУ 80%. В это время по профайлеру выполнялось 5 запросов.Они выполняться закончили, записал показания ЦПУ для этих запросов из профайлера, все хорошо.Как теперь вычеслить, какой вклад в показания ЦПУ 80% был каждого из запросов.То есть мне нужно получить, что например запрос №1 - №4 взяли по 10% ЦПУ, а №5 - 40% ЦПУ.DeColo®es Задача не найти запросы. Задача доказать третьему лицу, что "базу грузит" запрос №1,№2 и №3, а не №4,№5.-----------------open your mind
В профайлере есть такие колнки как cpu, reads, writes. Распределяйте на их основе что угодно.


--__Александр__--

--__Александр__--,дались вам эти 80%! У вас есть цифры загрузки по запросам - использование процессора, ввода вывода и т.п. - вот на них и смотрите.


--__Александр__--

DeColo®es Задача не найти запросы. Задача доказать третьему лицу, что "базу грузит" запрос №1,№2 и №3, а не №4,№5.
И как Вы собираетесь это делать без поиска запросов.Я "доказываю" именно по результатам поиска наиболее тяжелых запросов.Не нужно даже ловить момент пиковой загрузки - все берется из кэша.Да и в процессах есть столбец, показывающие количество чтений. Если он растет - он диск и грузит. А вообще - не с того конца подходите к вопросу. Будь я на месте разработчика, я бы на раз-два отослал с таким подходом. То, что мой запрос использует диск - не моя проблема. Я вообще запросы не по собственной инициативе пишу - бизнес просит. Раз запрос использует диск - значит это нужно запросу (бизнесу).У админа есть 4 варианта:1. договориться, чтобы запрос выполнялся в другое время с бизнесом.2. Уговорить бизнес, что этот запрос ему не нужен3. Настроить сервер так, чтобы проблем не возникало/выбить новое оборудование4. Доказать разработчику, что запрос написан неправильно или есть какие-то другие изъяны в решении.Если готовы работать по 4 варианту - идите к разработчику.Если не готовы обосновать, почему именно этот запрос не должен так грузить диск, а должен как-то по-другому - результат будет нулевой.Иначе он скажет "А что вы хотите от супер-пупер годового отчета?!"


--__Александр__--

DeColo®es,По-моему человек все понятно спросил. У него есть какие-то показатели на заданный момент времени, он хочет знать приблизительно из чего они складываются.Ну а про взаимотношение с бизнесом - в вопросе ничего не было. Да и это сугубо личная материя.


--__Александр__--

DeColo®es,По-моему человек все понятно спросил. У него есть какие-то показатели на заданный момент времени, он хочет знать приблизительно из чего они складываются.
Вот именно, что какие-то. Практика показывает, что только поиск запроса, который "загрузил" диск дает что-то далеко не всегда. Ну загрузил диск какой-то "сложный отчет" - это чья проблема? Именно этого запроса, который зачем-то читает данные в 5 раз больше, чем есть в базе или других, которые заняли память и вытеснили "его" данные из кэша?А сколько еще "веселых" случаев, когда диск грузят сотни запросов в секунду...Каждый отдельный меняет одну запись, находя ее по индексу и пишет не больше 10Кб на диск, претензий к разработчику этого запроса нет - что делать будем?


--__Александр__--

Вот именно, что какие-то. Практика показывает, что только поиск запроса, который "загрузил" диск дает что-то далеко не всегда. Ну загрузил диск какой-то "сложный отчет" - это чья проблема? Именно этого запроса, который зачем-то читает данные в 5 раз больше, чем есть в базе или других, которые заняли память и вытеснили "его" данные из кэша?А сколько еще "веселых" случаев, когда диск грузят сотни запросов в секунду...Каждый отдельный меняет одну запись, находя ее по индексу и пишет не больше 10Кб на диск, претензий к разработчику этого запроса нет - что делать будем?
Утрируешь, аднака, брателло... Хотя суть верна. ... но до этого надо ещё "дойти" ...


--__Александр__--

DeColo®es Еще раз - я знаю, какие запросы тяжелые и грузят сервер. Мне нужно было например сказать, что один заппрос тяжелее по ЦПУ другого на 60%, а второй по использоыванию диска тяжелее первого на 150%.-----------------open your mind


--__Александр__--

в теории задача прктически нерешаема. ибо могут быть к примеру запросы, которые вяжут таблицы с разных баз. и тому подобные изыски. на практике я бы действительно начал с анализа траса. а дальше смотрел от запросов - что это такое, какой апликухой делаются и т.д.


--__Александр__--

DeColo®es Еще раз - я знаю, какие запросы тяжелые и грузят сервер. Мне нужно было например сказать, что один заппрос тяжелее по ЦПУ другого на 60%, а второй по использоыванию диска тяжелее первого на 150%.-----------------open your mind
И проблема-то в чем?? У вас для запросов есть цифры CPU_Time, так сравните их и скажите, что по процессору запрос1 тяжелее запроса2 в 2 (3,4,1.5, 0.13452) раза.


--__Александр__--

iljy Вопрос был о корректности такого подхода. Если с ЦПУ еще более менее интуитивно ясно, то вот со Средней очередью к диску вопрос. А с пейджингом - еще больше вопросов.-----------------open your mind


--__Александр__--

--__Александр__--,очередь говорит вам о наличии проблемы. А для выявления ее причин смотрите статистику ио по запросам, и сравнивается она так же, как и цпу.


--__Александр__--

iljy Не всегда запрос с большим Reads создает большую очередь к диску.Один запрос читает 64 страниц, которые расположены последовательно, а другой те же 64,но беспорядочно. Очевидно, что второй запрос бдует создавать большую очередь к диску, чем первый.Еще раз - задача не найти проблемные запросы. Это уже сделано.Задача - хотя бы примерно разложить показания системного монитора по этим запросам.Пока это удалось сделать только для %Processor_Time.-----------------open your mind


--__Александр__--

Задача - хотя бы примерно разложить показания системного монитора по этим запросам.
Разве это трудно?


--__Александр__--

Критик Ок. В системном мониторе вижу пик-пейджинга. Как определить какой из 5-ти запросов это вызвал?-----------------open your mind


--__Александр__--

у вас же есть трасса, снятая с помощью профайлера?