Published on

August 20, 2015

Улучшение производительности в SQL Server

При работе с большими таблицами в SQL Server важно учитывать оптимизацию производительности, чтобы обеспечить эффективную манипуляцию данными. В этой статье мы рассмотрим различные техники для улучшения производительности при внесении изменений в таблицу с триггером проверки согласованности.

Давайте начнем с создания сценария. У нас есть таблица с названием “product” с примерно 5 миллионами записей. У нас также есть таблица “order”, которая ссылается на таблицу “product”. Правило состоит в том, что запись в таблице “product” не может быть изменена, если есть незакрытые заказы, связанные с ее продуктами.

Изначально, когда мы пытаемся обновить названия продуктов с ID меньше или равным 1 миллиону, это занимает около 45 секунд для завершения. Это происходит потому, что триггер срабатывает для каждого отдельного обновления, вызывая дополнительные проверки и, возможно, замедляя процесс.

Для улучшения производительности мы можем разделить обновление на более мелкие партии. Обновляя записи пакетами по 100 000, мы значительно сокращаем общее время выполнения. В нашем тесте выполнение обновления в цикле для 10 партий заняло всего 15 секунд, что привело к улучшению в 3 раза.

Однако, если мы уверены, что наши изменения не требуют проверки триггера, мы можем временно отключить триггер только для текущей сессии. Это можно сделать, установив специальный флаг, называемый “context_info”, в нашей сессии. Добавив условие в триггер, которое проверяет этот флаг, мы можем обойти ограничения триггера для нашей сессии, сохраняя их для других пользователей.

С отключенным триггером для нашей сессии то же самое обновление, которое ранее занимало 45 секунд, теперь завершается всего за 12 секунд. Такой подход позволяет выполнять запросы массовой манипуляции данными без препятствий со стороны ограничений триггера.

Реализуя эти оптимизации производительности, мы значительно улучшаем эффективность операций манипуляции данными в больших таблицах в SQL Server. Важно тщательно рассмотреть конкретные требования и ограничения вашей базы данных при применении этих техник.

Спасибо за прочтение этой статьи. Мы надеемся, что вам пригодятся эти советы для оптимизации производительности SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.