Я хотел бы получить некоторые дополнительные сведения / обоснование поведения удаления SQL Server. У нас довольно большая база данных более 1800 ГБ.
Есть несколько очень мелких таблиц (всего несколько целочисленных столбцов) с миллионами строк. Когда мы удаляем 10000 строк из этих мелких таблиц, запросы на удаление, как правило, выполняются довольно быстро (не более нескольких секунд).
У нас также есть таблица с полем image
хранения типов изображений в среднем 100 КБ. Когда мы удаляем только несколько тысяч строк из этой таблицы, это занимает больше минуты.
Хотя разница очевидна (гораздо больше данных удаляется по размеру), мне не терпится узнать больше о том, что происходит внутри SQL Server. Так что я могу лучше понять, что последние удаляются намного медленнее.
Кто-нибудь может пролить свет?
источник
Ответы:
Удаление блоба размером 100
image
КБ на самом деле не является операцией с размером данных. BLOB-объект освобождается, а не удаляется, и запись полного изображения отсутствует. Вы можете легко проверить это:Записи журнала, которые вы увидите, будут выглядеть примерно так:
Как видите, для строки, содержащей
image
столбец, нет записи «DELETE» с данными +102400 байт . Есть множество освобождений (операция PFS / IAM / GAM) и простое удаление строк (в моем случае куча выглядела бы очень похоже на B-Tree, если бы я помнил, чтобы объявить ID как PK ...). Дополнительные сведения см. В разделе « Как читать и интерпретировать журнал SQL Server» .Что оставляет открытым исходный вопрос: почему одно удаление медленнее другого? Я рекомендую вам прочитать Как анализировать производительность SQL Server . Следуйте методике, описанной, чтобы зафиксировать ожидания конкретного утверждения и посмотреть, в чем причина. См. Анализ выполнения отдельного запроса , особенно часть об Анализе времени ожидания выполнения отдельного запроса. Только после того, как вы измерили, мы сможем ответить на загадку. Причин может быть много: больше блокировок из-за одновременного чтения таблицы BLOB-объектов, отсутствующих индексов для поиска строк-кандидатов DELETE в одной таблице, запуска триггеров и т. д. и т. д. Связанная методология поможет вам точно определить причину.
источник