|
Плохой запрос вешает SQL | ☑ | ||
---|---|---|---|---|
0
Mihenius
05.09.13
✎
09:30
|
Есть БД на SQL 2005, тип совместимости стоит 2000 (80)
Время от времени запускают какой-то отчет, кот. вешает SQL на 100% С помощью профайлера не видно кто и какой отчет запускает. Или просто мы не можем дождаться окончания задания. Лечим пока просто перезапуском SQL, с предварительным выходом из БД. Стандартные отчеты поиска "узких" мест не работают, т.к. совместимость стоит (80). Без перевода совместимости БД есть способы запустить стандартные отчеты совместимые с 2000? ПС: Программа старинная на Foxpro. Прог по SQL обещал первести тип на (90). Кстати, никто не знает какие могут возникнуть проблемы? Вроде когда-то читал, что часть запросов могут не работать из-за изменения работы индексов. |
|||
1
МихаилМ
05.09.13
✎
09:35
|
в мс скл прфайлер запустите сбор событий на длительный срок . установите фильтр по duration. либо создайте событие загрузки процесора 100% в мониторе производительности.
и пожалуйста не создавате в 1 теме 2 несвязанных вопроса, что бы не было путаницы |
|||
2
Sorm
05.09.13
✎
09:43
|
(0) (1)+
Ставьте профайлер в фон, ловите. |
|||
3
МихаилМ
05.09.13
✎
10:00
|
||||
4
dmpl
05.09.13
✎
10:06
|
(0) Чаще всего это ЛЕВОЕ/ПРАВОЕ/ПОЛНОЕ соединение с неправильным отбором. Например, условие не =, а < или >. В этом случае при каждом соединении происходит увеличение строк в результате, которое пропорционально результату умножения количества строк в первой таблице на количество строк во второй таблице. Если в каждой таблице по 1 000 000 строк (запустили без отбора, например) - то сервер практически гарантированно уйдет в ступор.
|
|||
5
dk
05.09.13
✎
11:08
|
выставить MDoP в половину кол-ва процов и забыть про такую проблему
|
|||
6
dk
05.09.13
✎
11:15
|
либо раз известен запрос, то можно в самом запросе max DoP выставить
|
|||
7
Mihenius
06.09.13
✎
00:37
|
Нашел наконец я плохой запрос.
Классическая ошибка - куча мелких запросов в цикле. И в 1 це часто у молодых встречается ) Сервак старый 1 процевый, 4-х ядерный Какой параметр поставить в запросе? OPTION (MAXDOP 1) или надо OPTION (MAXDOP 2) ? В самой настройке SQL какие параметры настройки Процессора лучше поставить? Пытался нагуглить, пишут ставить 50% от имеющихся ресурсов. Как там считается по ядрам или по процессорам? ПС: А так нужно переписывать запрос почти полностью, беда что там 1.5 строк весь запрос ) |
|||
8
dk
06.09.13
✎
08:26
|
по ядрам, или точнее по потокам, но 1 поток на ядро
|
|||
9
Chai Nic
06.09.13
✎
08:33
|
Блин, бесит формулировка "вешает" в смысле "загружает 100%". Зависание - это отказ в обслуживании. А то, что в (0) - нормальное поведение сервера, он РАБОТАЕТ. Что касается "классическая ошибка - куча мелких запросов в цикле", это тоже спорный вопрос - ошибка ли это, или просто задача была поставлена "сделать к вчерашнему вечеру", и программист решил её максимально быстрым способом, не изобретая сложные запросы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |