|
Плохой запрос вешает 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
|
+(2)
|
|
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) - нормальное поведение сервера, он РАБОТАЕТ. Что касается "классическая ошибка - куча мелких запросов в цикле", это тоже спорный вопрос - ошибка ли это, или просто задача была поставлена "сделать к вчерашнему вечеру", и программист решил её максимально быстрым способом, не изобретая сложные запросы.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший