|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Есть две базы, продовская и тестовая. Продовская крутится на железе намного мощнее чем тестовая (больше памяти в 10 раз, быстрые серверные SSD, намного мощнее проц, гигабитная сеть и т.п) Тестовая база содержит состояние продовской базы недельной давности При этом тестовая база работает на порядок быстрее чем продуктив (в основном дольше выполняются запросы на модификацию даных). При этом эта разница наблюдается даже в моменты наката изменений, когда пользователи отключены от продуктива, т.е нельзя объяснить разницу лишь бОльшей нагрузкой на прод. Например сегодня один и тот же скрипт нагонялся 30 секунд на тесте и 3 часа на продуктиве без внешних пользователей. Проверяли актуальность статистики на проде, отсуствие блокировок - ничего подозрительного Посоветуйте, куда еще можно копать. Возможно, собрать какие то счетчики производительности? Версия Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) Enterprise Edition ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 10:42 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Например сегодня один и тот же скрипт нагонялся 30 секунд на тесте и 3 часа на продуктиве без внешних пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 10:58 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Не обратил внимания, что 2012-й... Тогда смотрите статистику ожиданий скриптом отсюда - https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 11:06 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Посоветуйте, куда еще можно копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 11:51 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Апну старую тему, да прод на виртуалке Сейчас скрипт который апдейтит 60к строк в таблице на 40млн запросом вида Код: sql 1.
проапдейтил на 22 часа 10к строк. На тестовой базе с бекапом поднятым с продуктива на вчера эта операция заняла 10 минут События ожидания запросом из рекомендаций На проде: WaitTypeWait_SResource_SSignal_SWaitCountPercentageAvgWait_SAvgRes_SAvgSig_SHelp/Info URLCXPACKET449316211.9446061579.63254632.37639587123379.740.07030.06970.0005https://www.sqlskills.com/help/waits/CXPACKETLATCH_EX42695889.941536672.971159216.9420458562037.580.02090.02030.0006https://www.sqlskills.com/help/waits/LATCH_EXASYNC_IO_COMPLETION12482448.7212482116.37332.35864052.22144.4644144.46060.0038https://www.sqlskills.com/help/waits/ASYNC_IO_COMPLETIONBACKUPBUFFER11875817.5611752871.28122946.2824212190192.110.00490.00490.0001https://www.sqlskills.com/help/waits/BACKUPBUFFERBACKUPIO9162966.949145668.0117298.939625467181.630.00950.00950https://www.sqlskills.com/help/waits/BACKUPIOSOS_SCHEDULER_YIELD5959359.26175.895953183.3163839152951.060.000900.0009https://www.sqlskills.com/help/waits/SOS_SCHEDULER_YIELDPREEMPTIVE_OS_PIPEOPS5921067.515921067.51071471.05828.4689828.46890https://www.sqlskills.com/help/waits/PREEMPTIVE_OS_PIPEOPS На тесте WaitTypeWait_SResource_SSignal_SWaitCountPercentageAvgWait_SAvgRes_SAvgSig_SHelp/Info URLPAGEIOLATCH_SH4782.034778.253.7829809229.880.0160.0160https://www.sqlskills.com/help/waits/PAGEIOLATCH_SHIO_COMPLETION3326.973325.061.987484820.790.00380.00380https://www.sqlskills.com/help/waits/IO_COMPLETIONLCK_M_S1941.71941.630.067612.1325.548625.54780.0008https://www.sqlskills.com/help/waits/LCK_M_SLCK_M_SCH_S1538.141538.14089.61192.2679192.26790https://www.sqlskills.com/help/waits/LCK_M_SCH_SLCK_M_X1215.641215.390.2520817.60.58420.5840.0001https://www.sqlskills.com/help/waits/LCK_M_XPAGEIOLATCH_EX935.61934.131.491170165.850.0080.0080https://www.sqlskills.com/help/waits/PAGEIOLATCH_EXCXPACKET753.09723.1729.92787544.710.00960.00920.0004https://www.sqlskills.com/help/waits/CXPACKETTRACEWRITE483.28483.280.012413.022.00532.00530https://www.sqlskills.com/help/waits/TRACEWRITEWRITELOG217.44202.44152362371.360.00090.00090.0001https://www.sqlskills.com/help/waits/WRITELOGPREEMPTIVE_OS_WRITEFILE129.57129.57060070.810.02160.02160https://www.sqlskills.com/help/waits/PREEMPTIVE_OS_WRITEFILE В мониторе сейчас 0 загрузка проца, очередь на диске нету. Да в плане аптейта фулл скан кластеризированного индекса потому что на SomeField нету индекса, но блин, за это время я бы и сам его успел просканировать сто раз... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 18:26 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Это нормально вообще такие средние цифры в ASYNC_IO_COMPLETION и PREEMPTIVE_OS_PIPEOPS? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 18:27 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Для начала сравните планы запросов на проде и тесте ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 20:39 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Критик, И одинаковость настроек. Например CXPACKET смущает немножко. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 22:20 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Планы одинаковые, а какие именно настройки сравнивать, их то немерянно) Кстати на обеих базах стоит MAXDOP = 0, наверное не оч. хорошо? Дока говорит не делать так.. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 23:19 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Планы одинаковые, а какие именно настройки сравнивать, их то немерянно) Кстати на обеих базах стоит MAXDOP = 0, наверное не оч. хорошо? Дока говорит не делать так.. Быдло__кодер Сейчас скрипт который апдейтит 60к строк в таблице на 40млн запросом вида Код: sql 1.
проапдейтил на 22 часа 10к строк. На тестовой базе с бекапом поднятым с продуктива на вчера эта операция заняла 10 минут Виртуалки зло, переходите на железо, проблем не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 23:29 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Я сам в шоке Запрос все еще идет, за полдня он проапдетил еще около 7к строк Более того, я решил по этой доке https://www.sqlskills.com/blogs/paul/capturing-wait-stats-for-a-single-operation/ узнать чего ждет именно эта сессия, включил мониторинг на 10 минут, и я просто не смог дождаться даже вставки во временную таблицу из файла в скрипте (несмотря на то что там всего то 28к записей в логе). Скопировал файл трассировки себе на локальный тестовый сервер - и этот же запрос обработал файл за 3 секунды. Из логов за 10 минут 7.2 секунды ожидание PAGEIOLATCH_EX, 0.6 сек ожидание SOS_SCHEDULER_YIELD, что ж блин он делал остальные то 10 минут ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2021, 23:35 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер, у вас случаем не линуксовая версия сервера? наблюдал когда-то немеренные pageiolatch, lachex именно на виртуалке линухов. вообще виртуалки для сиквела - зло. (при достаточной нагрузке конечно) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 01:51 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Из логов за 10 минут 7.2 секунды ожидание PAGEIOLATCH_EX, 0.6 сек ожидание SOS_SCHEDULER_YIELD, что ж блин он делал остальные то 10 минут ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 08:55 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
>у вас случаем не линуксовая версия сервера? Нет, виндовая, виртуалка Windows Hyper-V Server 2016 Смотрите, у меня есть конкретная сессия и конкретный простой запрос который апдейтит ну очень долго данные, просто в сотни раз дольше чем на тестовом сервере с той же базой При этом сейчас прикладываются вообще детские запросы, как типа запрос "вставить в темповую таблицу из файла пару десятков тысяч записей", который на обычном тестовом сервере выполняется за 3 секунды. Доходит до того что в студии даже раскрыть список таблиц занимает минуту. Я понимаю что всякие виртуалки могут замедлить производительность но не до такой же блин степени Что я смотрел: - блокировки. Их нет, запрос вообще показывает пусто - Кумулятивную статистику ожиданий, привел тут ее - план выполнения, он довольно простой и там основное время - сканирование кластерного индекса, фильтрация строк, обновление кластерного индекса. Все просто как двери. Да, можно добавить индекс и это будет быстрее, но речь идет об обновлении нескольких десятков тысяч записей в таблице на 40 млн, за 30+ часов то эту таблицу уже можно было сто раз пересканировать и обновить - Очереди ожидания записи на диск, там ничего - Попробовал снять статистику событий ожидания проблемной сессии за 10 минут работы и там ожидания защелок 7 секунд, ну это нормально как по мне, я не могу понять что он делает все остальное время и как это определить Т.е есть какой то фактор, значительно влияющий на производительность и проявляющийся вот в таких массовых апдейтах, и я не могу понять как его найти ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 08:56 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
>А CXPACKET исчезло? LATCH_EX? Остались PAGEIOLATCH_EX и SOS_SCHEDULER_YIELD? CXPACKET было в кумулятивной статистике, в статистике по конкретно этой сессии только PAGEIOLATCH_EX и SOS_SCHEDULER_YIELD и это время, оно как по мне адекватное (секунды за 10 минут) Я так понимаю CXPACKET это ожидание когда при параллельном выполнении веток плана запрос ждет пока все параллельные ветки закончатся, в реальной работе я полагаю это и должно быть доминирующим ожжиданием, не возможно ведь равнозначно разделить выполнение, какие то ветки будут дольше выполнятся остальных, что и приведет к CXPACKET.. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 09:01 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Я сам в шоке Запрос все еще идет, за полдня он проапдетил еще около 7к строк С виртуалкой сложнее разбираться, требуется специалист, а специалистов обычно не нанимают, да и имеющийся калека-гуглопрогаммист разбираться не будет, ему зарплату не за это платят. Нужно всеми силами отбиваться от виртуалок, других вариантов нет. Быдло__кодер на железе намного мощнее чем тестовая (больше памяти в 10 раз, быстрые серверные SSD, намного мощнее проц, гигабитная сеть и т.п) "быстрые серверные SSD" - а они напрямую подключены, или это лун на схд? а как они выделены виртуалке? "намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой? "больше памяти в 10 раз" - а виртуалке сколько отдали? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 09:02 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер Я так понимаю CXPACKET это ожидание когда при параллельном выполнении веток плана запрос ждет пока все параллельные ветки закончатся, в реальной работе я полагаю это и должно быть доминирующим ожжиданием, не возможно ведь равнозначно разделить выполнение, какие то ветки будут дольше выполнятся остальных, что и приведет к CXPACKET.. "Ожидания веток" - это тоже не примитивные "ожидания синхронизации параллельных веток в конце запроса", а ожидание блокировок ресурсов, которых, вообще говоря, по хорошему не должно быть. Они возникают при использовании куч, при борьбе за SGAM и т.д. Вообще тут непростые вещи, нужно быть очень хорошо теоретически подкованным, и неплохо бы просто как то проверить ,что даст MAXDOP на тестовом скрипте при отключенных пользователях, вместо получения докторской диссертации по механизмам распараллеливания :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 09:14 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
alexeyvg "намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой? Я вообще всегда ограничивал MAXDOP числом 8 даже на аналитических серверах (больше можно поставить хинтом для конкретного запроса после вдумчивого исследования), а уж на OLTP вообще надо подумать про "1" А у вас там поди 48 ядерный 96 поточный 2-х сокетный прод, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 09:17 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер, Реальность очень сильно и больно бьет по мордасам, когда с DEV-сервера, малоядерного 5Ггц Core I7 + несерверный PCI-E SSD с прокачкой под 6Гб/сек переезжаешь на виртуальный "мегасервер" с 48 ядер по 2Ггц и двумя гигабитными интерфейсами для подключения "мегахранилища" на HDD. А если еще одмины на время тестирования забывают выключить виртуалки с майнерами крипты, то хочется забиться в угол и начать плакать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 12:12 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Еще можно обратить внимания на ожидания BACKUP* Их выползание в топ явно указывает, что с резервным копированием что-то не то ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 12:36 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
>Еще можно обратить внимания на ожидания BACKUP* Да, с бекапом не все так просто, DBA использует рекомендуемую вендором утилиту HPE StoreOnce Plugin for MS SQL Server для резервного копирования + какой-то самописный скрипт для бекапа транзакционных логов. Но деактивация этих всех вещей не помогла, хотя я не до конца уверен что эта бекапная утилита не делает что-то втихоря Поставили MAXDOP = 1, ну вроде как это помогло, скрипты все равно гонятся медленнее чем на тесте но не в сотни раз а хотя бы в несколько раз, посмотрим как это отразится на работе в целом. >"намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой? "больше памяти в 10 раз" - а виртуалке сколько отдали? Памяти у виртуалки 256 Гб, на сервере исключительно MSSQL и больше ничего. Если я не ошибаюсь, CPU на 128 ядер Вобщем, пока предположение что MAXDOP корень зла, он на обоих серваках был в 0, просто на тестовом сервере меньше ядер и соответственно меньше степень параллелизма ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 14:21 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер, у вас на тесте профайлер работает, может тормозить из-за него. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 14:26 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер, если maxdop больше 10 при NUMA, то будет тормозить из-за переключений между узлами, как пишут. Но UPDATE - однопоточная операция, здесь MAXDOP не имеет значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 14:28 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
Быдло__кодер >Еще можно обратить внимания на ожидания BACKUP* Да, с бекапом не все так просто, DBA использует рекомендуемую вендором утилиту ... Вобщем, пока предположение что MAXDOP корень зла, он на обоих серваках был в 0, просто на тестовом сервере меньше ядер и соответственно меньше степень параллелизма Параллелизм вкупе с кучами рушит сервер на параллельных запросах, но, возможно, на проде и система хранения в разы/десятки раз хуже (с учётом настроек виртуалки) Нужно смотреть латентность, очереди, потоковую скорость при работе с диском для разных видов нагрузки (например, те же бакапы, + ОЛТП нагрузка), сравнивать с тестом. Подключением диска к виртуалке по умолчанию можно легко понизить скорость в несколько раз, так что пусть админы трудятся. Ваш тестовый сервер - какая-никакая база для сравнения и для обоснования возмущённых воплей типа: "смотрите, компания заплатила кучу бабла, а работает хуже тестового сервера, который работает на самосборном офисном ПК!". Тогда админы будут хоть как то шевелиться. Выполнение кода вашего приложения аргументом быть не могут, вам же скажут: "а вот статистика планы неоптимальный код писать надо лучше", в общем, заболтают. Вам нужно что то простое, что бы понял даже менеджер, скажем, "бакап должен делаться на проде в Н раз быстрее", или даже топ-менеджер (но тогда совсем простое, уровня "квадратное в круглую дырку") ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 14:35 |
|
Performance troubleshooting
|
|||
---|---|---|---|
#18+
alexeyvg, исходя из того, что тут пишет вопросы разработчик, а не dba, можно предположить, что разработчики и администраторы, как это не редко встречается, гребут в разные стороны хоть и сидят в одной лодке. Разработчикам надо чтобы бд шевелилась быстрее, админам надо на одном железе запустить как можно больше виртуальных задач. И как такового dba там нету, иначе бы прочитали рекомендации от MS по поводу виртуализации бд, в которых между строк сквозит - "этого делать не надо, но если вы вконец упороты, то и чёрт с вами". Быдло__кодер, во время простоя грузите все ядра на 100% тестами, унижайте дисковую подсистему - считайте прокачку и iopsы. это ж чисто ваш сервер и во время таких тестов другие системы не пострадают вообще :). Сравнивайте попугаев с сервера с попугаями тестов аналогичных процессоров/памяти и с тем, что выдаёт тестовый сервер. Цель - определить соответствие заявленной производительности железа реальной. Если соответствует (частоты процессоров в 2-2.5 раза ниже, дисковая подсистема неспешная) то приводите тестовый сервер к боевому и начинайте думать, что делать с кодом. Если не соответствует - идём к админам и пытаемся с них получить обоснование за каждое отличие в числах. А там или всё починят (сразу после того, как сборная РФ выиграет Евро-202Х), или скажут, что сорян братан, что есть то и грызи, ну или просто отправят куда подальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2021, 17:48 |
|
|
start [/forum/topic.php?fid=46&fpage=21&tid=1684564]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 161ms |
0 / 0 |