Является ли база данных SQL Server пишет медленнее с изоляцией моментальных снимков?

8

У меня в системе много тупиков.

Я бы хотел использовать Snapshot Isolation для их исправления, но у моего администратора есть резервы.

Одна из его проблем заключается в том, что изоляция моментальных снимков замедляет запись. Это потому, что он должен записать в кеш, а затем в TempDb (версия строки), а затем он может вернуться к вызывающей стороне.

«Нормальная» запись может быть просто записана в кеш, а затем выполнена.

Так работает версионность строк? Или это сложнее, чем это? Это как-то делает это параллельно?

Или запись идет медленнее с изоляцией снимка?

Vaccano
источник
2
Одна проблема, на которую следует обратить внимание при включении изоляции моментальных снимков: размер строки увеличится на 14 байт. Убедитесь, что вы запланировали это увеличение емкости и любые последующие разбиения страницы.
StanleyJohns

Ответы:

14

это потому, что он должен записать в кеш, а затем в TempDb (версия строки), а затем он может вернуться к вызывающей стороне.

Нет, это неверно Это как-то подразумевает, что записи при наличии версий имеют большую задержку, так как каждая запись должна касаться диска (для tempdb), что не соответствует действительности. Запись в базу данных tempdb также является записью в «кэш». Единственное «ожидание» происходит во время COMMIT, когда необходимо укрепить журнал. Верно, что при управлении версиями необходимо укреплять как журнал БД, так и журнал tempdb, но это не обязательно подразумевает более высокую задержку (IO должен быть параллельным на разных путях хранения, база данных tempdb хранится на отдельном диске от вашего интенсивно используемого LDF, правильно?). Полное объяснение см. В разделе « Как это работает: презентация ввода-вывода SQL Server» Боба Дорра. Я действительно надеюсь, что ваш администратор БД понимает это лучше, чем вы здесь это передаете.

Как я уже упоминал в вашем другом посте: снимок не имеет затрат на ВСТАВКИ, а стоимость обновлений и удалений может быть легко уменьшена. Использование ресурсов управления версиями строк объясняет компромиссы. В этот момент вы, вероятно, должны проводить тестирование с реалистичной рабочей нагрузкой, которая является единственным способом правильно оценить воздействие, которое вы испытаете.

Ремус Русану
источник
4
Кстати, подумайте: вы или ваш администратор БД когда-либо использовали триггеры за последние 7 лет? Начиная с SQL 2005 триггеры реализованы с использованием мгновенных снимков. То же самое происходит, если вы когда-либо использовали перестроение индекса онлайн или MARS . Как насчет того, чтобы проверить прямо сейчас sys.dm_db_file_space_usageна рабочем сервере. Если version_store_reserved_page_countне ноль, вы уже используете магазин версий .
Ремус Русану
Я не думаю, что журнал tempdb когда-либо нужно укреплять, потому что redo никогда не запускается на базе данных tempdb. Таким образом, накладные расходы еще ниже.
USR
0

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

Ваш администратор БД имеет право беспокоиться об изменении уровня изоляции на снимок, поскольку это увеличивает нагрузку на базу данных tempDB. В общем, я рекомендую использовать изоляцию моментальных снимков, но я думаю, что это только один из способов устранения ваших тупиков. Вы можете получить грязную запись, где одна транзакция обновляет строку A, затем B, а другая транзакция обновляет строку B, а затем A.

Роберт-Райан.
источник