我有一个链接许多表的查询。因此,当执行存储过程时,它会给出...
Timeout expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
我能为此做些什么..我可能需要增加SQL服务器的时间。我正在使用SQl 2008.你能帮我解决这个问题吗?
答案 0 :(得分:2)
当一个事务持有对数据资源的锁定而另一个事务请求对同一资源的不兼容锁定时,该请求被阻止并且请求者进入等待状态。默认情况下,阻止的请求会一直等待,直到阻止程序释放干扰锁。 要获取锁信息(包括当前授予会话的锁和会话等待的锁),请将动态管理视图(DMV)sys.dm_tran_locks查询为:
SELECT -- use * to explore other available attributes
request_session_id AS spid,
resource_type AS restype,
resource_database_id AS dbid,
DB_NAME(resource_database_id) AS dbname,
resource_description AS res,
resource_associated_entity_id AS resid,
request_mode AS mode,
request_status AS status
FROM sys.dm_tran_locks;
在查询的输出中,您将获得等待共享/独占锁的spid
。您可以通过观察具有相同spid's
和{的行来获取所涉及的res
{1}}值。
为了获得更多信息,您可以执行以下代码以获取有关阻塞链中涉及的进程的连接,会话和阻止信息。
resid
一旦你参与了spid,你可以使用-- Connection info:
SELECT -- use * to explore
session_id AS spid,
connect_time,
last_read,
last_write,
most_recent_sql_handle
FROM sys.dm_exec_connections
WHERE session_id IN(--spid found in above query);
-- Session info
SELECT -- use * to explore
session_id AS spid,
login_time,
host_name,
program_name,
login_name,
nt_user_name,
last_request_start_time,
last_request_end_time
FROM sys.dm_exec_sessions
WHERE session_id IN(--spid found in above query);
-- Blocking
SELECT -- use * to explore
session_id AS spid,
blocking_session_id,
command,
sql_handle,
database_id,
wait_type,
wait_time,
wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id > 0;
--SQL text of the connections involved in the blocking chain:
SELECT session_id, text
FROM sys.dm_exec_connections
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS ST
WHERE session_id IN(--spid found in above query);
命令杀死spid,或者使用命令在你的存储过程中设置lock_timeout:KILL <spid>
答案 1 :(得分:1)
超时永远不会在SQL Server中,但总是在客户端调用它们。因此,如果您无法调整查询(可能是这种情况),请更改用于发出查询的应用程序中的超时。
答案 2 :(得分:1)
使用SQL Server Management Studio
配置远程查询超时选项