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 и большинство исправлений.