Непредсказуемый update (MS SQL 2000)
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
Непредсказуемый update (MS SQL 2000)
Помогите, господа! Может кто-нибудь на такие грабли натыкался...
Есть 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. Размеры всех баз и транзакшн логов более чем достаточные...
Буду благодарен за любые идеи...
Есть 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...
-
- Уже с Приветом
- Posts: 569
- Joined: 14 Dec 2003 04:06
- Location: Львов->Киев->Торонто
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
Вы ничего не написали про индексы, ничего - про статистику, вернее ее актуальность.
Я бы все-таки советовал дождаться завершения выполнения апдейта на медленной машине и посмотренть планы - хотя если запрос "висит часами" первое про что бы я подумал - блокировки, где-то висит незакрытая транзакция.
Я бы все-таки советовал дождаться завершения выполнения апдейта на медленной машине и посмотренть планы - хотя если запрос "висит часами" первое про что бы я подумал - блокировки, где-то висит незакрытая транзакция.
Удачи@С.Смирнов
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
YellowMan wrote:Вы ничего не написали про индексы, ничего - про статистику, вернее ее актуальность.
Я бы все-таки советовал дождаться завершения выполнения апдейта на медленной машине и посмотренть планы - хотя если запрос "висит часами" первое про что бы я подумал - блокировки, где-то висит незакрытая транзакция.
Да, я забыл написать, что индексы на всех табицах на разных машинах одинаковые.
К таблицам кроме этого update вообще никто не обращается - блокировок там быть не может. Да и вообще, машина которая не может выполнить этот update практически не используется - активность на ней минимальная...
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
Dmitry67 wrote:Мое предположение
На мощной машине используется парралелизм
Может используется на всех, Но на одной это происходит неудачно
Hintами отключите парралелизм для этого запроса
Из-за того что в Процессах на одном процессе стоит часами CXPACKET - я тоже подозреваю, что может быть дело в параллелизме...
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
Dmitry67 wrote:Мое предположение
На мощной машине используется парралелизм
Может используется на всех, Но на одной это происходит неудачно
Hintами отключите парралелизм для этого запроса
Из-за того что в Процессах на одном процессе стоит часами CXPACKET - я тоже подозреваю, что может быть дело в параллелизме...
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
YellowMan wrote:MAXDOP 1 совершенно верно...
Но блокировками все-же не пренебрегайте - я тоже много раз видел как на базах с выставленными auto growth для лога или данных попытка откусить еще места для базы и одновременный insert/update вгоняли базу в кому на неопределенное время...
Да... Но 100% на всех CPU без особой дисковой активности?
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 7723
- Joined: 29 Mar 2000 10:01
- Location: Kirkland,WA
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
Dmitry67 wrote:Не томите
Проверить без парралелизма это одна минута
Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
alex_127 wrote:Nosferatu wrote:Да... Но 100% на всех CPU без особой дисковой активности?
нехорошо это как-то... а можно схему табличек, план и так далее? Можно PM - попробуем разобраться... На тестовом сервере у вас это тоже случается?
Нет, на тестовом сервере такого не было, как и на других серверах. Но подобные этому случаи были пару раз на разных серверах.
Схемку нарисую скоро. А вот что такое PM, извините, не знаю...
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...
Надо было на бутылку спорить
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 936
- Joined: 04 Jul 2000 09:01
- Location: KZN, RU - ATL, GA
Dmitry67 wrote:Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал. Занял около 15 секунд. Попробовали отключить параллелизм - 3 секуды. Повторили несколько раз и то и другое. Параллелизм - 15 секунд, разбитый Update - 7 сек, без параллелизма - 3 сек. Вот такие дела...
Надо было на бутылку спорить
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу
Да как-то страшно выключать... Довольно большие объемы данных загружаются, да и читаются тоже. Неужели он настолько плох, что только мешает, а не помогает совсем?
Тогда ведь получится, что мы не до конца будем использовать возможности всех процессоров... Поживем - увидим. Опыт, однако, полезный получился.
И кстати, всем большое спасибо!
All bubble-blowing babies will be beaten senseless...
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Это зависит от workload
При OLTP, много маленьких запросов, особенно WEB, лучше отключать
При OLAP, при построении сложных запросов лучше бывает с паралелизмом
Но не всегда
Пусть у Вас есть RAID, который поделен на буковки D: и E:
У вас данные разбиры между байлами лежащими на D и E
Ура ! думает SQL server. Два устройства, с ними может работать одновременно и строит план с парралелизмом с одновременным чтением из разных мест
Но так как физически это одно устройство с одним каналом то получает только хуже, вместо одного длинного table scan получится например смесь двух с хаотическим дерганием головки дисков
При OLTP, много маленьких запросов, особенно WEB, лучше отключать
При OLAP, при построении сложных запросов лучше бывает с паралелизмом
Но не всегда
Пусть у Вас есть RAID, который поделен на буковки D: и E:
У вас данные разбиры между байлами лежащими на D и E
Ура ! думает SQL server. Два устройства, с ними может работать одновременно и строит план с парралелизмом с одновременным чтением из разных мест
Но так как физически это одно устройство с одним каналом то получает только хуже, вместо одного длинного table scan получится например смесь двух с хаотическим дерганием головки дисков
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
Dmitry67 wrote:Надо было на бутылку спорить
Тут недавно был у нас консультант из M$
Так вот он понизив голос сказал что знаете, там много ошибок при паралелизме... если какие проблемы будут отключите... я ему сказал что я уже отключил... он скащал, ну и слава Богу
Надо было Мне из французских коньяков ближе всего Камю, ибо как было сказано:
Nosferatu wrote:Вчера, на неработавшей машине, UPDATE неодиданно заработал.
АКА блокирующий ресурс транзакция отвалилась
А консультантов Вы слушайте - они вам всякого наговорят, по секрету и строго конфидинциально ...
Удачи@С.Смирнов
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Заработала потому что ошибка с паралелизмом плавающая, возникает при некотором неудачном стечении обстоятельств, race conditions итд.
А чтобы транзакция чтото блокировала часами и днями... надо очень стараться чтобы это не увидеть... потом опять таки никак не объясняет CPU 100%
P.S.
Я предпочитаю белые вина, особо дорогое, так уж и быть, не покупайте
А чтобы транзакция чтото блокировала часами и днями... надо очень стараться чтобы это не увидеть... потом опять таки никак не объясняет CPU 100%
P.S.
Я предпочитаю белые вина, особо дорогое, так уж и быть, не покупайте
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
Заработало потому что на выходных обновилась статистика, или по базе прошелся какой-нибудь maintenance job и вправил индексам мозги, слетела блокирующая транзакзия (клерк пришел в понедельник на работу и закрыл окошко на клиенте, транзакция и отвалилась) или еще из-за 123 различных причин.
Индекс скан и деадлок - вот вам и 100% процессора(ов).
Заметить конечно действительно несложно - но непонятно было ли вообще телодвижение в эту сторону.
Так что Дмитрий, взялись за гуж, не говорите что ингуш - высылайте коньяковского. Мне Камю в форме книжки - чтобы на таком двухсмысленном предмете объяснять знакомым философам как бытие определяет сознание
Могу даже подсказать лично проверенное и одобренное место в Париже где затовариваться
Индекс скан и деадлок - вот вам и 100% процессора(ов).
Заметить конечно действительно несложно - но непонятно было ли вообще телодвижение в эту сторону.
Так что Дмитрий, взялись за гуж, не говорите что ингуш - высылайте коньяковского. Мне Камю в форме книжки - чтобы на таком двухсмысленном предмете объяснять знакомым философам как бытие определяет сознание
Могу даже подсказать лично проверенное и одобренное место в Париже где затовариваться
Удачи@С.Смирнов
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
Неа, не с меня - совсем наоборот
Пока что никаких убедительных доказательств что виновата паралельность а не к примеру, лок или старая статистика не прозвучало. Мы же не принимаем всерьез замечание некого непонятного консультанта, владеющего ИСТИНОЙ (!) и вскользь выдавшего Вам страшный секрет о жутких багах в коде сервера, правда ?
Так что с винишком мы пока повременим - а хороший коньяк может и закончиться...возле собора Парижской Богоматери, прямо через улицу от метро был отличный магазин с коньяком - хозяина толи Жан толи Жак звали
Пока что никаких убедительных доказательств что виновата паралельность а не к примеру, лок или старая статистика не прозвучало. Мы же не принимаем всерьез замечание некого непонятного консультанта, владеющего ИСТИНОЙ (!) и вскользь выдавшего Вам страшный секрет о жутких багах в коде сервера, правда ?
Так что с винишком мы пока повременим - а хороший коньяк может и закончиться...возле собора Парижской Богоматери, прямо через улицу от метро был отличный магазин с коньяком - хозяина толи Жан толи Жак звали
Удачи@С.Смирнов