Простой запрос SQL Server 2005 больше не возвращается - PullRequest
1 голос
/ 30 ноября 2009

У меня есть БД с около 15 таблиц. 14 из них работают нормально. Внезапно сделав "select * from table" на одном из них (который обычно занимает <2 секунды, чтобы вернуться, теперь, кажется, никогда не возвращается. что происходит? Я заметил это, когда мой веб-сайт asp.net начал отсчет времени, но я получил те же проблемы непосредственно из sql server mgmt studio. </p>

Ответы [ 4 ]

3 голосов
/ 30 ноября 2009

Scary DB, вероятно, правильно предположить, что это блокировки, это удобный скрипт, который я использую для проверки блокировок конкретной базы данных, выводит имя заблокированного объекта, тип блокировки, какой логин содержит его и какой оператор SQL используется запустить, чтобы удержать замок:

SELECT  L.request_session_id AS SPID, 
        DB_NAME(L.resource_database_id) AS DatabaseName,
        O.Name AS LockedObjectName, 
        P.object_id AS LockedObjectId, 
        L.resource_type AS LockedResource, 
        L.request_mode AS LockType,
        ST.text AS SqlStatementText,        
        ES.login_name AS LoginName,
        ES.host_name AS HostName,
        TST.is_user_transaction as IsUserTransaction,
        AT.name as TransactionName,
        CN.auth_scheme as AuthenticationMethod
FROM    sys.dm_tran_locks L
        LEFT JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
        LEFT JOIN sys.objects O ON O.object_id = P.object_id
        LEFT JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
        LEFT JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
        LEFT JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
        LEFT JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
        CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
WHERE   resource_database_id = db_id()
ORDER BY L.request_session_id
1 голос
/ 30 ноября 2009

Если вы не можете получить данные из таблицы, это может быть связано с тем, что они заблокированы каким-либо другим процессом. Предполагая, что вы работаете в SQL Server 2005 или 2008, запустите команду выбора для динамического административного представления sys.dm_exec_requests. Вы сможете увидеть, есть ли ожидающие запросы с блокировками на интересующем вас столе.

0 голосов
/ 30 ноября 2009

могут быть как блокировки, блоки, ваша статистика устарела

запустите следующее

exec sp_who2

видите ли вы какие-либо SPID в столбце BlkBy?

0 голосов
/ 30 ноября 2009

Я бы настроил sqlTrace, используя SqlServerProfiler , в базе данных, тогда вы сможете точно увидеть, что происходит с запросом и где он застревает.

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