SQL Server/ADO.NET: проблемы с блокировкой

Я понимаю, что это очень смутный вопрос, так что прости меня.

Компания, в которой я работал, связалась со мной, сказав, что с тех пор, как они обновились до SQL Server 2008, у них возникло множество проблем с блокировкой.

Я действительно не знаю, что это значит. Я даже не знаю, как увидеть эти "блокирующие" ошибки в SQL Server. Это была не моя область знаний.

Администратор базы данных, который там больше не работает, обрабатывал SQL Server, и моя программа, вероятно, записывала около 100000 записей в день в свою базу данных.

Непосредственно перед отъездом я изменил весь наш код уровня данных с хранимых процедур ADO.NET SqlCommand на LINQ to SQL.

У кого-нибудь есть идеи, где я начинаю пытаться помочь им? Мне не платят, я просто пытаюсь помочь начинающему.

Как я могу даже начать устранение неполадок?

3 ответа

Вы можете начать с получения более точного описания проблемы, с которой они сталкиваются, и того, является ли "блокировка", о которой они сообщают, тем, о чем им сообщается, или тем, что, по их мнению, является проблемой, которую они имеют.

Пока не ясно, на каком уровне системы возникает проблема, невозможно даже начать пытаться увидеть ответ.

С точки зрения "видения" проблем с блокировкой, диспетчер активности в SQL Server Management Studio (или какой-либо другой из тех, что стали в 2k8) покажет блокировку в определенной степени, но на самом деле это на шаг впереди того, где вы находитесь в данный момент.,

Прямо сейчас ключевой вопрос - что это за ошибка, которую они видят, и где она происходит.

Всегда есть ситуация, когда мы должны использовать оператор SELECT с WITH (NO LOCK), но это не рекомендуется в чувствительной среде, поскольку он допускает грязное чтение (незафиксированные зависимости). Но большинство проблем взаимоблокировок возникало во время операций обновления, поэтому вам лучше сосредоточиться на операторах обновления в вашей системе. Я предлагаю вам использовать UPDATE с командой ROWLOCK, чтобы SQL Server блокировал только одну строку таблицы вместо всей таблицы или Pagelock.

Тот факт, что у вас есть проблемы с производительностью и взаимные блокировки, может быть признаком более серьезной проблемы. Например, если SQL-сервер не найдет правильный индекс для запроса, он выполнит полное сканирование таблицы или индекса вместо сканирования диапазона; заставляя его использовать Таблок вместо Паглока (ов).

Как отследить взаимные блокировки с помощью SQL Server 2005 Profiler, должен работать с SQL 2008

Я знаю, что у Stackru Author были некоторые похожие проблемы, http://www.codinghorror.com/blog/archives/001166.html

Я бы просто сказал им установить MS SQL 2008 SP1 и большинство исправлений.

Другие вопросы по тегам