Непредсказуемый update (MS SQL 2000)

User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Непредсказуемый update (MS SQL 2000)

Post by Nosferatu »

Помогите, господа! Может кто-нибудь на такие грабли натыкался...

Есть update:

UPDATE i
SET Domain='C'
FROM tblFacilityInventory i
JOIN tblFacilityHierarchy h ON h.FaxId=i.FaxId
JOIN rcvSystemInventory s ON h.Position LIKE s.Position+'.%'
WHERE s.Domain='C'

tblFacilityInventory = ~ 2,200,000 rows
tblFacilityHierarchy= ~ 5,600,000 rows
rcvSystemInventory= ~ 19,000 rows

Ни одна таблица не имеет никаких на нее глядящих foreign keys.

На всех машинах отрабатывает за 5-10 секунд.
На одной машине (гораздо более мощной) не работает вообще - отжирает все 4 CPU под 100% и не дышит.
Данные на всех машинах приблизительно одинаковые. +/- 100,000 rows в первых двух таблицах.

Попробовали разбить так:

SELECT h.FaxId
INTO #tempinv
FROM tmpFacilityHierarchy h
JOIN rcvSystemInventory s ON h.Position LIKE s.Position+'.%'
WHERE s.Domain='C'

UPDATE i
SET Domain='C'
FROM tmpFacilityInventory i
JOIN #tempinv t ON t.FaxId=i.FaxId

Выполняется за 8-10 секунд...

Встречаю подобную аномалию уже третий или четвертый раз.
Это я что-то не так делаю или SQL server?

P.S. Когда выполняется UPDATE или вернее пытался выполниться, врубается параллелизм и в основном процессе CXPACKET может висеть минутами и часами.
P.P.S. Размеры всех баз и транзакшн логов более чем достаточные...

Буду благодарен за любые идеи...
All bubble-blowing babies will be beaten senseless...
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Сравнить план выполнения на аномальной и нормальной машине
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Strannik223 wrote:Сравнить план выполнения на аномальной и нормальной машине


Estimated Execution Plan - одинаковый. А реальный сравнить не могу, потому что не могу его получить от висящего update'a.
All bubble-blowing babies will be beaten senseless...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Мое предположение
На мощной машине используется парралелизм
Может используется на всех, Но на одной это происходит неудачно
Hintами отключите парралелизм для этого запроса
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

Вы ничего не написали про индексы, ничего - про статистику, вернее ее актуальность.

Я бы все-таки советовал дождаться завершения выполнения апдейта на медленной машине и посмотренть планы - хотя если запрос "висит часами" первое про что бы я подумал - блокировки, где-то висит незакрытая транзакция.
Удачи@С.Смирнов
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Блокировакой это быть не может
Написал человек что 4 CPU под 100%
Я такое много раз видел при парралелизме
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

YellowMan wrote:Вы ничего не написали про индексы, ничего - про статистику, вернее ее актуальность.

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


Да, я забыл написать, что индексы на всех табицах на разных машинах одинаковые.
К таблицам кроме этого update вообще никто не обращается - блокировок там быть не может. Да и вообще, машина которая не может выполнить этот update практически не используется - активность на ней минимальная...
All bubble-blowing babies will be beaten senseless...
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Dmitry67 wrote:Мое предположение
На мощной машине используется парралелизм
Может используется на всех, Но на одной это происходит неудачно
Hintами отключите парралелизм для этого запроса


Из-за того что в Процессах на одном процессе стоит часами CXPACKET - я тоже подозреваю, что может быть дело в параллелизме...
All bubble-blowing babies will be beaten senseless...
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Dmitry67 wrote:Мое предположение
На мощной машине используется парралелизм
Может используется на всех, Но на одной это происходит неудачно
Hintами отключите парралелизм для этого запроса


Из-за того что в Процессах на одном процессе стоит часами CXPACKET - я тоже подозреваю, что может быть дело в параллелизме...
All bubble-blowing babies will be beaten senseless...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Не томите
Проверить без парралелизма это одна минута
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Dmitry67 wrote:Не томите
Проверить без парралелизма это одна минута


Обязательно проверю. Сейчас пока не могу, т.к. на машину данные загружаются...
Отключить параллелизм, я так понимаю, надо с помощью (MAXDOP 1) ?
All bubble-blowing babies will be beaten senseless...
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

Вот тут похожая ситуация описана.
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

MAXDOP 1 совершенно верно...
Но блокировками все-же не пренебрегайте - я тоже много раз видел как на базах с выставленными auto growth для лога или данных попытка откусить еще места для базы и одновременный insert/update вгоняли базу в кому на неопределенное время...
Удачи@С.Смирнов
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

YellowMan wrote:MAXDOP 1 совершенно верно...
Но блокировками все-же не пренебрегайте - я тоже много раз видел как на базах с выставленными auto growth для лога или данных попытка откусить еще места для базы и одновременный insert/update вгоняли базу в кому на неопределенное время...


Да... Но 100% на всех CPU без особой дисковой активности?
All bubble-blowing babies will be beaten senseless...
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Post by alex_127 »

Nosferatu wrote:Да... Но 100% на всех CPU без особой дисковой активности?


нехорошо это как-то... а можно схему табличек, план и так далее? Можно PM - попробуем разобраться... На тестовом сервере у вас это тоже случается?
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Dmitry67 wrote:Не томите
Проверить без парралелизма это одна минута


Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...
All bubble-blowing babies will be beaten senseless...
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

alex_127 wrote:
Nosferatu wrote:Да... Но 100% на всех CPU без особой дисковой активности?


нехорошо это как-то... а можно схему табличек, план и так далее? Можно PM - попробуем разобраться... На тестовом сервере у вас это тоже случается?


Нет, на тестовом сервере такого не было, как и на других серверах. Но подобные этому случаи были пару раз на разных серверах.

Схемку нарисую скоро. А вот что такое PM, извините, не знаю...
All bubble-blowing babies will be beaten senseless...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...


Надо было на бутылку спорить :)
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Nosferatu
Уже с Приветом
Posts: 936
Joined: 04 Jul 2000 09:01
Location: KZN, RU - ATL, GA

Post by Nosferatu »

Dmitry67 wrote:
Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...


Надо было на бутылку спорить :)
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу :)


Да как-то страшно выключать... Довольно большие объемы данных загружаются, да и читаются тоже. Неужели он настолько плох, что только мешает, а не помогает совсем? :)
Тогда ведь получится, что мы не до конца будем использовать возможности всех процессоров... Поживем - увидим. Опыт, однако, полезный получился.
И кстати, всем большое спасибо!
All bubble-blowing babies will be beaten senseless...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Это зависит от workload
При OLTP, много маленьких запросов, особенно WEB, лучше отключать
При OLAP, при построении сложных запросов лучше бывает с паралелизмом
Но не всегда

Пусть у Вас есть RAID, который поделен на буковки D: и E:
У вас данные разбиры между байлами лежащими на D и E
Ура ! думает SQL server. Два устройства, с ними может работать одновременно и строит план с парралелизмом с одновременным чтением из разных мест
Но так как физически это одно устройство с одним каналом то получает только хуже, вместо одного длинного table scan получится например смесь двух с хаотическим дерганием головки дисков
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

Dmitry67 wrote:Надо было на бутылку спорить :)
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу :)


Надо было :) Мне из французских коньяков ближе всего Камю, ибо как было сказано:
Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал.


АКА блокирующий ресурс транзакция отвалилась :)
А консультантов Вы слушайте - они вам всякого наговорят, по секрету и строго конфидинциально ...
Удачи@С.Смирнов
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Заработала потому что ошибка с паралелизмом плавающая, возникает при некотором неудачном стечении обстоятельств, race conditions итд.
А чтобы транзакция чтото блокировала часами и днями... надо очень стараться чтобы это не увидеть... потом опять таки никак не объясняет CPU 100%

P.S.
Я предпочитаю белые вина, особо дорогое, так уж и быть, не покупайте
:)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

Заработало потому что на выходных обновилась статистика, или по базе прошелся какой-нибудь maintenance job и вправил индексам мозги, слетела блокирующая транзакзия (клерк пришел в понедельник на работу и закрыл окошко на клиенте, транзакция и отвалилась) или еще из-за 123 различных причин.
Индекс скан и деадлок - вот вам и 100% процессора(ов).
Заметить конечно действительно несложно - но непонятно было ли вообще телодвижение в эту сторону.
Так что Дмитрий, взялись за гуж, не говорите что ингуш - высылайте коньяковского. Мне Камю в форме книжки - чтобы на таком двухсмысленном предмете объяснять знакомым философам как бытие определяет сознание :)
Могу даже подсказать лично проверенное и одобренное место в Париже где затовариваться :)
Удачи@С.Смирнов
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Table scan вызывает IO, а CPU как раз бадает
Зачем процессору думать если он читает ?
deadlock детектируется в течение секунды
ПРосто блокировка вызывает падение CPU
Так что винишко то с Вас... За базар, как говорится :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

Неа, не с меня - совсем наоборот :)
Пока что никаких убедительных доказательств что виновата паралельность а не к примеру, лок или старая статистика не прозвучало. Мы же не принимаем всерьез замечание некого непонятного консультанта, владеющего ИСТИНОЙ (!) и вскользь выдавшего Вам страшный секрет о жутких багах в коде сервера, правда ? :)
Так что с винишком мы пока повременим - а хороший коньяк может и закончиться...возле собора Парижской Богоматери, прямо через улицу от метро был отличный магазин с коньяком - хозяина толи Жан толи Жак звали :)
Удачи@С.Смирнов

Return to “Вопросы и новости IT”