Llo*_*nks 26 sql-server-2008 sql-server
我在使用数据库时遇到问题。
我可以运行基本查询,尽管比正常情况慢得多。
当我尝试在 SSMS 对象资源管理器中查看表、视图或过程的层次结构树时,我得到lock request time out period exceeded.
我在此数据库中的对象上运行的 SSRS 报告不再完成。
与存储在此数据库中的过程相关的作业也不会运行。
我尝试使用sp_who2查找并终止数据库上的所有连接,但这并没有解决问题。
这里发生了什么?我该如何解决这个问题?
正如许多人已经指出的那样,通常会有一个持久的事务,主要是由未使用造成的SET IMPLICIT TRANSACTIONS ON,根本不应该使用它。要了解原因,请查看Brent Ozar 的富有洞察力的文章
无论如何,您可以使用以下查询获取长期待处理事务的列表。
SELECT
[s_tst].[session_id],
[s_es].[login_name] AS [Login Name],
DB_NAME (s_tdt.database_id) AS [Database],
[s_tdt].[database_transaction_begin_time] AS [Begin Time],
[s_tdt].[database_transaction_log_bytes_used] AS [Log Bytes],
[s_tdt].[database_transaction_log_bytes_reserved] AS [Log Rsvd],
[s_est].text AS [Last T-SQL Text],
[s_eqp].[query_plan] AS [Last Plan]
FROM
sys.dm_tran_database_transactions [s_tdt]
JOIN
sys.dm_tran_session_transactions [s_tst]
ON
[s_tst].[transaction_id] = [s_tdt].[transaction_id]
JOIN
sys.[dm_exec_sessions] [s_es]
ON
[s_es].[session_id] = [s_tst].[session_id]
JOIN
sys.dm_exec_connections [s_ec]
ON
[s_ec].[session_id] = [s_tst].[session_id]
LEFT OUTER JOIN
sys.dm_exec_requests [s_er]
ON
[s_er].[session_id] = [s_tst].[session_id]
CROSS APPLY
sys.dm_exec_sql_text ([s_ec].[most_recent_sql_handle]) AS [s_est]
OUTER APPLY
sys.dm_exec_query_plan ([s_er].[plan_handle]) AS [s_eqp]
where [s_tdt].[database_transaction_begin_time] is not null
ORDER BY
[Begin Time] ASC;
Run Code Online (Sandbox Code Playgroud)
https://www.brentosar.com/archive/2018/02/set-implicit_transactions-one-hell-bad-idea/
小智 6
排除硬件考虑,也许您需要运行脚本来检查哪些活动扣留了 SQL 会话,其中一种常见的情况是Implicit transactions Option在 SQL Server Management Studio 中不使用。
| 归档时间: |
|
| 查看次数: |
154724 次 |
| 最近记录: |