У меня есть 45 active
транзакция параллельной вставки, которую каждая транзакция пытается вставить (только вставить без какого-либо выбора или обновления) около 250 строк в некоторые таблицы.Запретить блокировку блокировки параллелизма SQL Server
Проблема заключается в том, когда транзакция хочет вставить данные в таблицы, существует около 1000 замков X и IX() на нескольких строках индекса и страницах индекса.
Я переместил индексы на SSD, но это не имеет никакого смысла, и у меня много ожидающих транзакций, и каждая транзакция занимает от 200 мс до 4000 мс, которая должна быть завершена в соответствии с Adult logout
на профилировщике SQL.
Буферный ввод-вывод, защелка буфера, блокировка, защелка, регистрация. Время ожидания 0 или очень мало в мониторе активности.
Я попытался увеличить количество транзакций, но я не имеет никакого смысла и количество исполнений в Activity monitor
было таким же.
Моя система информации:
- 2x E5,
- SSD Raid 0 для лог-файлов,
- HDD Raid 10 для данных,
- SSD Raid 0 для индексов,
- + 64GB DDR3,
- SQL Server 2014 SP2
1. Я уже отключил/удалил множество индексов. 2. Я изменил все Первичные как неидентичные, bigint и инициализировал его на уровне бизнеса. 3. Коэффициенты заполнения более 90. 4. Я сделаю это и, но он внесет какие-либо изменения, если я использую отдельный раздел для каждой таблицы? потому что ввод-вывод будет таким же. 5. В-памяти невозможно, я думаю, в соответствии с ограничениями на 2014 год и размером db (4TB) – Milad
Для № 3 вам нужно посмотреть фрагментацию и количество разбиений страниц во время вставки. Если это так, вы можете снизить Fillfactor до 50% и даже ниже. Данные не должны быть последовательными по кластерному индексу, после чего вы можете вставлять сразу несколько страниц. Для # 4 вы можете разделить одну таблицу на несколько файлов. –
Большое спасибо за советы, я уменьшил коэффициент заполнения для некоторых индексов до 20%, а страницы заполнили до 70% с минимальной фрагментацией.Также я добавил два файла для больших таблиц (одна группа файлов) и переместил их на другой жесткий диск. В этом случае вставки и выделения будут иметь лучшую производительность, поскольку на двух жестких дисках выполняются операции (один для небольших таблиц и другой для больших, которые используют RAID10). Кроме того, я создал последовательный идентификатор диапазона, а не последовательный, который позволяет создавать несколько индексных страниц с минимальной блокировкой. Наконец, я делаю объемные вставки с «Вставить объем», что увеличивает производительность до 400%. – Milad