SQL Server / ADO.NET: проблемы с блокировкой - PullRequest
0 голосов
/ 09 мая 2009

Я понимаю, что это ОЧЕНЬ расплывчатый вопрос, так что прости меня.

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

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

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

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

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

Как мне даже НАЧАТЬ устранение неполадок?

Ответы [ 3 ]

1 голос
/ 09 мая 2009

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

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

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

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

0 голосов
/ 09 мая 2009

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

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

0 голосов
/ 09 мая 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...