powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Performance troubleshooting
25 сообщений из 29, страница 1 из 2
Performance troubleshooting
    #40074627
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две базы, продовская и тестовая.
Продовская крутится на железе намного мощнее чем тестовая (больше памяти в 10 раз, быстрые серверные SSD, намного мощнее проц, гигабитная сеть и т.п) Тестовая база содержит состояние продовской базы недельной давности
При этом тестовая база работает на порядок быстрее чем продуктив (в основном дольше выполняются запросы на модификацию даных). При этом эта разница наблюдается даже в моменты наката изменений, когда пользователи отключены от продуктива, т.е нельзя объяснить разницу лишь бОльшей нагрузкой на прод. Например сегодня один и тот же скрипт нагонялся 30 секунд на тесте и 3 часа на продуктиве без внешних пользователей.
Проверяли актуальность статистики на проде, отсуствие блокировок - ничего подозрительного
Посоветуйте, куда еще можно копать. Возможно, собрать какие то счетчики производительности?

Версия Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) Enterprise Edition
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40074636
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Например сегодня один и тот же скрипт нагонялся 30 секунд на тесте и 3 часа на продуктиве без внешних пользователей.
Для начала открыть по новой сессии на каждом сервере, выполнить в них скрипт и сравнить результаты из sys.dm_exec_session_wait_stats.
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40074640
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не обратил внимания, что 2012-й...

Тогда смотрите статистику ожиданий скриптом отсюда - https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40074662
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Посоветуйте, куда еще можно копать.
На всякий случай- боевой сервер не на виртуальной машине работает?
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080297
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апну старую тему, да прод на виртуалке
Сейчас скрипт который апдейтит 60к строк в таблице на 40млн запросом вида
Код: sql
1.
UPDATE TBL SET BLOBField = NULL WHERE SomeField=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 нету индекса, но блин, за это время я бы и сам его успел просканировать сто раз...
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080298
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это нормально вообще такие средние цифры в ASYNC_IO_COMPLETION и PREEMPTIVE_OS_PIPEOPS?
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080311
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала сравните планы запросов на проде и тесте
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080314
Marat2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик,

И одинаковость настроек. Например CXPACKET смущает немножко.
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080317
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Планы одинаковые, а какие именно настройки сравнивать, их то немерянно)
Кстати на обеих базах стоит MAXDOP = 0, наверное не оч. хорошо? Дока говорит не делать так..
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080320
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Планы одинаковые, а какие именно настройки сравнивать, их то немерянно)
Кстати на обеих базах стоит MAXDOP = 0, наверное не оч. хорошо? Дока говорит не делать так..
CXPACKET огромный, может, установка какого то нормального MAXDOP поможет.


Быдло__кодер
Сейчас скрипт который апдейтит 60к строк в таблице на 40млн запросом вида
Код: sql
1.
UPDATE TBL SET BLOBField = NULL WHERE SomeField=1



проапдейтил на 22 часа 10к строк. На тестовой базе с бекапом поднятым с продуктива на вчера эта операция заняла 10 минут
В смысле, 22 часа - время апдэйта 10 к строк???
Виртуалки зло, переходите на железо, проблем не будет.
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080321
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сам в шоке
Запрос все еще идет, за полдня он проапдетил еще около 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 минут
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080323
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер,

у вас случаем не линуксовая версия сервера? наблюдал когда-то немеренные pageiolatch, lachex именно на виртуалке линухов.
вообще виртуалки для сиквела - зло. (при достаточной нагрузке конечно)
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080326
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Из логов за 10 минут 7.2 секунды ожидание PAGEIOLATCH_EX, 0.6 сек ожидание SOS_SCHEDULER_YIELD, что ж блин он делал остальные то 10 минут
А CXPACKET исчезло? LATCH_EX? Остались PAGEIOLATCH_EX и SOS_SCHEDULER_YIELD?
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080327
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>у вас случаем не линуксовая версия сервера?
Нет, виндовая, виртуалка Windows Hyper-V Server 2016

Смотрите, у меня есть конкретная сессия и конкретный простой запрос который апдейтит ну очень долго данные, просто в сотни раз дольше чем на тестовом сервере с той же базой
При этом сейчас прикладываются вообще детские запросы, как типа запрос "вставить в темповую таблицу из файла пару десятков тысяч записей", который на обычном тестовом сервере выполняется за 3 секунды. Доходит до того что в студии даже раскрыть список таблиц занимает минуту. Я понимаю что всякие виртуалки могут замедлить производительность но не до такой же блин степени

Что я смотрел:
- блокировки. Их нет, запрос вообще показывает пусто
- Кумулятивную статистику ожиданий, привел тут ее
- план выполнения, он довольно простой и там основное время - сканирование кластерного индекса, фильтрация строк, обновление кластерного индекса. Все просто как двери. Да, можно добавить индекс и это будет быстрее, но речь идет об обновлении нескольких десятков тысяч записей в таблице на 40 млн, за 30+ часов то эту таблицу уже можно было сто раз пересканировать и обновить
- Очереди ожидания записи на диск, там ничего
- Попробовал снять статистику событий ожидания проблемной сессии за 10 минут работы и там ожидания защелок 7 секунд, ну это нормально как по мне, я не могу понять что он делает все остальное время и как это определить

Т.е есть какой то фактор, значительно влияющий на производительность и проявляющийся вот в таких массовых апдейтах, и я не могу понять как его найти
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080328
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А CXPACKET исчезло? LATCH_EX? Остались PAGEIOLATCH_EX и SOS_SCHEDULER_YIELD?

CXPACKET было в кумулятивной статистике, в статистике по конкретно этой сессии только PAGEIOLATCH_EX и SOS_SCHEDULER_YIELD и это время, оно как по мне адекватное (секунды за 10 минут)

Я так понимаю CXPACKET это ожидание когда при параллельном выполнении веток плана запрос ждет пока все параллельные ветки закончатся, в реальной работе я полагаю это и должно быть доминирующим ожжиданием, не возможно ведь равнозначно разделить выполнение, какие то ветки будут дольше выполнятся остальных, что и приведет к CXPACKET..
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080329
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Я сам в шоке
Запрос все еще идет, за полдня он проапдетил еще около 7к строк
Может, там виртуалке дали мало реальной памяти, может ,он каждый скан делает чтением с реального диска, а не в памяти.
С виртуалкой сложнее разбираться, требуется специалист, а специалистов обычно не нанимают, да и имеющийся калека-гуглопрогаммист разбираться не будет, ему зарплату не за это платят.
Нужно всеми силами отбиваться от виртуалок, других вариантов нет.
Быдло__кодер
на железе намного мощнее чем тестовая (больше памяти в 10 раз, быстрые серверные SSD, намного мощнее проц, гигабитная сеть и т.п)
Вот даже это оценить можно довольно приблизительно.
"быстрые серверные SSD" - а они напрямую подключены, или это лун на схд? а как они выделены виртуалке?
"намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой?
"больше памяти в 10 раз" - а виртуалке сколько отдали?
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080331
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
Я так понимаю CXPACKET это ожидание когда при параллельном выполнении веток плана запрос ждет пока все параллельные ветки закончатся, в реальной работе я полагаю это и должно быть доминирующим ожжиданием, не возможно ведь равнозначно разделить выполнение, какие то ветки будут дольше выполнятся остальных, что и приведет к CXPACKET..
В реальной работе нужно соблюдать баланс между необходимостью распараллелить запрос для более быстрого выполнения, и уменьшить остановки процессора для ожидания веток запроса.
"Ожидания веток" - это тоже не примитивные "ожидания синхронизации параллельных веток в конце запроса", а ожидание блокировок ресурсов, которых, вообще говоря, по хорошему не должно быть.
Они возникают при использовании куч, при борьбе за SGAM и т.д.

Вообще тут непростые вещи, нужно быть очень хорошо теоретически подкованным, и неплохо бы просто как то проверить ,что даст MAXDOP на тестовом скрипте при отключенных пользователях, вместо получения докторской диссертации по механизмам распараллеливания :-)
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080332
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
"намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой?
Ещё накладные расходы на параллельное выполнение могут сильно, нелинейно ,расти при увеличении числа ядер.
Я вообще всегда ограничивал MAXDOP числом 8 даже на аналитических серверах (больше можно поставить хинтом для конкретного запроса после вдумчивого исследования), а уж на OLTP вообще надо подумать про "1"
А у вас там поди 48 ядерный 96 поточный 2-х сокетный прод, да?
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080338
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Быдло__кодер,
Реальность очень сильно и больно бьет по мордасам, когда с DEV-сервера, малоядерного 5Ггц Core I7 + несерверный PCI-E SSD с прокачкой под 6Гб/сек переезжаешь на виртуальный "мегасервер" с 48 ядер по 2Ггц и двумя гигабитными интерфейсами для подключения "мегахранилища" на HDD. А если еще одмины на время тестирования забывают выключить виртуалки с майнерами крипты, то хочется забиться в угол и начать плакать
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080340
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще можно обратить внимания на ожидания BACKUP*
Их выползание в топ явно указывает, что с резервным копированием что-то не то
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080349
Быдло__кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Еще можно обратить внимания на ожидания BACKUP*
Да, с бекапом не все так просто, DBA использует рекомендуемую вендором утилиту HPE StoreOnce Plugin for MS SQL Server для резервного копирования + какой-то самописный скрипт для бекапа транзакционных логов. Но деактивация этих всех вещей не помогла, хотя я не до конца уверен что эта бекапная утилита не делает что-то втихоря

Поставили MAXDOP = 1, ну вроде как это помогло, скрипты все равно гонятся медленнее чем на тесте но не в сотни раз а хотя бы в несколько раз, посмотрим как это отразится на работе в целом.

>"намного мощнее проц" - а не много ли у него ядер? с намного меньшей частотой?
"больше памяти в 10 раз" - а виртуалке сколько отдали?

Памяти у виртуалки 256 Гб, на сервере исключительно MSSQL и больше ничего. Если я не ошибаюсь, CPU на 128 ядер


Вобщем, пока предположение что MAXDOP корень зла, он на обоих серваках был в 0, просто на тестовом сервере меньше ядер и соответственно меньше степень параллелизма
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080350
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер,

у вас на тесте профайлер работает, может тормозить из-за него.
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080351
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер,

если maxdop больше 10 при NUMA, то будет тормозить из-за переключений между узлами, как пишут. Но UPDATE - однопоточная операция, здесь MAXDOP не имеет значения.
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080354
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быдло__кодер
>Еще можно обратить внимания на ожидания BACKUP*
Да, с бекапом не все так просто, DBA использует рекомендуемую вендором утилиту
...
Вобщем, пока предположение что MAXDOP корень зла, он на обоих серваках был в 0, просто на тестовом сервере меньше ядер и соответственно меньше степень параллелизма
Возможно, там плюсуются/перемножаются несколько факторов сразу.
Параллелизм вкупе с кучами рушит сервер на параллельных запросах, но, возможно, на проде и система хранения в разы/десятки раз хуже (с учётом настроек виртуалки)

Нужно смотреть латентность, очереди, потоковую скорость при работе с диском для разных видов нагрузки (например, те же бакапы, + ОЛТП нагрузка), сравнивать с тестом.
Подключением диска к виртуалке по умолчанию можно легко понизить скорость в несколько раз, так что пусть админы трудятся.
Ваш тестовый сервер - какая-никакая база для сравнения и для обоснования возмущённых воплей типа: "смотрите, компания заплатила кучу бабла, а работает хуже тестового сервера, который работает на самосборном офисном ПК!".
Тогда админы будут хоть как то шевелиться.
Выполнение кода вашего приложения аргументом быть не могут, вам же скажут: "а вот статистика планы неоптимальный код писать надо лучше", в общем, заболтают.
Вам нужно что то простое, что бы понял даже менеджер, скажем, "бакап должен делаться на проде в Н раз быстрее", или даже топ-менеджер (но тогда совсем простое, уровня "квадратное в круглую дырку")
...
Рейтинг: 0 / 0
Performance troubleshooting
    #40080360
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
исходя из того, что тут пишет вопросы разработчик, а не dba, можно предположить, что разработчики и администраторы, как это не редко встречается, гребут в разные стороны хоть и сидят в одной лодке. Разработчикам надо чтобы бд шевелилась быстрее, админам надо на одном железе запустить как можно больше виртуальных задач. И как такового dba там нету, иначе бы прочитали рекомендации от MS по поводу виртуализации бд, в которых между строк сквозит - "этого делать не надо, но если вы вконец упороты, то и чёрт с вами".
Быдло__кодер,
во время простоя грузите все ядра на 100% тестами, унижайте дисковую подсистему - считайте прокачку и iopsы. это ж чисто ваш сервер и во время таких тестов другие системы не пострадают вообще :). Сравнивайте попугаев с сервера с попугаями тестов аналогичных процессоров/памяти и с тем, что выдаёт тестовый сервер. Цель - определить соответствие заявленной производительности железа реальной. Если соответствует (частоты процессоров в 2-2.5 раза ниже, дисковая подсистема неспешная) то приводите тестовый сервер к боевому и начинайте думать, что делать с кодом. Если не соответствует - идём к админам и пытаемся с них получить обоснование за каждое отличие в числах. А там или всё починят (сразу после того, как сборная РФ выиграет Евро-202Х), или скажут, что сорян братан, что есть то и грызи, ну или просто отправят куда подальше.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Performance troubleshooting
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]