Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите найди "узкое" место  [new]
Alfa
Member

Откуда:
Сообщений: 22
Доброго всем времени суток!

Имеется сервер с такой конфигурацией:
1) 2*Quad Core Xeon (итого 8 ядер). Загрузка примерно на 50%
2) ОЗУ – 16Гб. Под SQL отдано 14Гб.
3) Диски: под MDF – RAID10 из 4 SAS, под LDF – RAID1 из 2 SAS, включен кэш на контроллере (Write Back)
4) Сеть между серверами гигибатная
5) SQL Server 2005 EE + SP2
6) Windows 2003 EE + SP2
На сервере крутится база 50Гб с достаточно интенсивной круглосуточной нагрузкой (выгрузка/загрузка через BCP, выборка/запись через сайт (PHP5+FreeTDS), обработка данных в офисе; в пике до 300 одновременных подключений, в среднем около 100). Ежедневно дефрагментируются индексы, обновляются статистика. Модель восстановления – Full. Логи постоянно бэкапятся. В принципе производительность устраивает, НО: иногда бывают какие-то непонятные затыки – те выборки, которые обычно выполняются за 0.01с, вдруг занимают 1-2 секунды – в 100 раз дольше! С бэкапами это никак не связано – может не тормозить несколько десятков минут, иногда даже часов, потом в течение нескольких секунд – подряд от 1 до 5-7 подвисаний, потом опять нормальная работа (кстати, бэкапы для пробы отключал). Смотрел по PerfMon – вроде все параметры в норме (хотя заметил какую-то странность – обычно дисковая очередь 0, потом изредка дикий всплеск до 10-20, и опять тишина, но с тормозами эти всплески не пересекаются).
Бешенных локов (а уж тем более дедлоков) нет, версионность для пробы включали – тоже самое.
Есть ли какая-то возможность в Profiler’е или еще как-то посмотреть не только время выполнения запроса, но и то – сколько и каких ресурсов этот запрос отожрал, чтобы не сидеть и не смотреть сразу в Profiler и PerfMon и так ловить место затыка.
И вообще – чем могут быть вызваны такие проблемы? Имеет ли смысл разделить базу на два файла, если они оба будут находиться на одном RAID10 (железо перегруппировать в два RAID 1 сильно проблематично, да и сами выводы в статье https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=657016&pg=2 слишком неожиданные :))
18 июн 09, 15:47    [7316162]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Ну для начала, Вы поймали запрос, который начинает тормозить ?
18 июн 09, 16:39    [7316558]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Alfa
Member

Откуда:
Сообщений: 22
если бы он был один - было бы понятно легче, я бы тогда попробовал оттюнить запрос.
Но тормоза произвольные, на разных запросах. Есть конечно несколько наиболее часто повторяющихся, но они работают с разными данными.
18 июн 09, 16:55    [7316710]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Alfa
если бы он был один - было бы понятно легче, я бы тогда попробовал оттюнить запрос.
Но тормоза произвольные, на разных запросах. Есть конечно несколько наиболее часто повторяющихся, но они работают с разными данными.

А на чем тормоза, тоже не сходства ? cpu, i\o ?
18 июн 09, 16:58    [7316727]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Alfa
Member

Откуда:
Сообщений: 22
а вот на чем тормоза - непонятно. Проц отпадает - он не загружен, ОЗУ я думаю тоже.
Дисковая система? Суда по PerfMon она тоже не перегружена (редкие - может раз в 2 часа короткие всплески дисковой очереди непонятного происхождения не совпадают по времени с тормозами запросов). Поэтому я и спрашиваю - как поймать долгий запрос в SQL Profiler понятно, а как выяснить, сколько и каких физических ресурсов он потребовал и чего ему не хватало? Причем в конкретный момент времени - в другое время он выполняется отлично.
18 июн 09, 17:09    [7316840]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Хм, то ли я чего то не понимаю, то ли Вы, что то не так говорите :) Вот как раз в профилере идут данные по процессорному времени и i\o. Вот надо и отследить те запросы. которые будут превышать по этим показателем обычные показатели. Далее уже смотреть. Хорошо бы поймать зависимость. Что бы только cpu или только i\o возрастали. Кстати, надеюсь, что не вся память выделена сиквилу ?
18 июн 09, 17:13    [7316883]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31161
Alfa
а вот на чем тормоза - непонятно. Проц отпадает - он не загружен, ОЗУ я думаю тоже.
Дисковая система? Суда по PerfMon она тоже не перегружена (редкие - может раз в 2 часа короткие всплески дисковой очереди непонятного происхождения не совпадают по времени с тормозами запросов). Поэтому я и спрашиваю - как поймать долгий запрос в SQL Profiler понятно, а как выяснить, сколько и каких физических ресурсов он потребовал и чего ему не хватало? Причем в конкретный момент времени - в другое время он выполняется отлично.
Вам нужно записать результаты профайлера в таблицу - будет легче анализировать.

Далее посмотреть выловить тормозящие запросы (по времени выполнения), и посмотреть у них CPU, Read, Write.

Если значения маленькие - значит, запросы чего-то ожидают, если большие - разбираться с самими запросами.

При маленьких значениях смотреть соседние запросы и вообще то, что происходит - может, у вас в это время сетевой коммутатор перезагружается...
18 июн 09, 17:24    [7316975]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найди "узкое" место  [new]
Alfa
Member

Откуда:
Сообщений: 22
Хм, то ли я чего то не понимаю, то ли Вы, что то не так говорите :) Вот как раз в профилере идут данные по процессорному времени и i\o. Вот надо и отследить те запросы. которые будут превышать по этим показателем обычные показатели. Далее уже смотреть. Хорошо бы поймать зависимость. Что бы только cpu или только i\o возрастали. Кстати, надеюсь, что не вся память выделена сиквилу ?

позор на мою голову, мне очень стыдно :(
я привык к Profiler 2000 - там в любом шаблоне можно выбрать, какие параметры отслеживать.
а вот в Profiler 2005 нельзя посмотреть I\O если выбрать шаблон TSQL_Duration. Зато в шаблоне Standart все доступно как и раньше. Не знал, потому решил что теперь такой возможности нет.
Спасибо!

Кстати, надеюсь, что не вся память выделена сиквилу ?

конечно нет,
2) ОЗУ – 16Гб. Под SQL отдано 14Гб. Кроме SQLя на сервере ничего не крутится
19 июн 09, 10:21    [7319099]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить