У нас есть база данных (назовем ее базой данных A), которая становится непригодной к использованию каждые несколько дней, и мы должны перезапустить ее. Когда я говорю «непригодный», это означает, что все приложения, использующие его, просто блокируются, ожидая ответа от базы данных, но это никогда не происходит.
К счастью, было замечено, что выполнение оператора SELECT для определенной таблицы с использованием SQL Server Management Studio, похоже, приносит некоторые записи, но в какой-то момент блокируется.
Самое смешное, что в конкретной базе данных нет процессов LOCKED или LOCKING. Я обнаружил, что приложение использует следующую изоляцию транзакции:
ALLOW_SNAPSHOT_ISOLATION ON
что объясняет, почему мы не можем видеть процессы Locked или Locking, верно?
У нас есть другая база данных (назовем ее базой данных B), которая фактически имеет ту же схему, и у нас никогда не было этой проблемы. Единственная разница между этими базами данных - это изоляция, о которой я упоминал ранее. Этот использует изоляцию транзакции по умолчанию, и у нас никогда не было этой странной вещи блокировки базы данных. Но и в базе данных А гораздо больше транзакций, открываемых в день; намного намного больше Так что я могу думать о том, что в этом случае следует избегать ИЗОЛЯЦИИ SNAPSHOT для большого числа одновременных транзакций.
Может ли кто-нибудь подтвердить, что, скорее всего, именно SNAPSHOT ИЗОЛЯЦИЯ вызывает проблемы?
Я имею в виду, что у нас нет блокировок, и у нас просто есть блокировка базы данных без каких-либо реальных исключений или что-то, что поможет нам определить основную причину проблемы.
Верны ли мои предположения? Я очень на это надеюсь.