У нас есть база данных (назовем ее базой данных A), которая становится непригодной для использования через несколько дней, и мы должны ее перезапустить. Когда я говорю непригодным, все приложения, использующие его, просто блокируются там, ожидая ответа базы данных, но это никогда не происходит.SQL Server 2005 блокируется без блокировки или блокировки
К счастью было замечено, что выполнение инструкции SELECT в отношении конкретной таблицы с использованием SQL Server Management Studio, похоже, приносит некоторые записи, но в какой-то момент блокирует.
Самое смешное, что в конкретной базе данных отсутствуют процессы LOCKED или LOCKING. Я узнал, что приложение использует следующую изоляцию транзакций:
ALLOW_SNAPSHOT_ISOLATION ON
, который объясняет, почему мы не можем видеть блокированные или блокировки процессов правильно?
У нас есть другая база данных (назовем ее базой данных B), которая фактически имеет ту же схему, и у нас никогда не было этой проблемы. Единственная разница между этими базами данных - это изоляция, о которой я упоминал ранее. В этом случае используется изоляция транзакций по умолчанию, и у нас никогда не было этой необычной блокировки базы данных. Но и в базе данных A есть намного больше операций открытия в день; гораздо больше. Так что я могу думать о том, что SNAPSHOT ISOLATION следует избегать для большого количества параллельных транзакций в этом случае.
Может кто-нибудь подтвердить, что, скорее всего, это проблема SNAPSHOT ISOLATION, вызывающая проблемы? Я имею в виду, что у нас нет блокировок, и у нас просто есть блокировка базы данных без каких-либо фактических исключений или что-то, что поможет нам обнаружить основную причину проблемы.
Являются ли мои предположения правильными? Надеюсь, что так.
Можете ли вы дать мне несколько советов о том, что мне следует отслеживать на tempdb? – DaTroop
только что обновил мой ответ ... – Brann
Как это могло бы помочь? Вот документ для этого sp: Отображает количество строк, зарезервированное место на диске и пространство на диске, используемое таблицей, индексированным представлением или очередью Service Broker в текущей базе данных, или отображает зарезервированное и используемое дисковое пространство по всей базе данных Я имею в виду, что это покажет мне пространство, выделенное tempdb. Я имею в виду, что еще я могу сделать, чтобы контролировать, что делает базу данных A очень медленной? – DaTroop