2016-9-26 16:13:45 @hury
SQLServer 事务超时测试
1.当前查询超时设置
exec sp_configure 'query wait (s)'
2.超时测试
打开第1个窗口
-- 建立临时表
CREATE TABLE t(id int);
-- 开启事务
BEGIN TRANSACTION
-- 写入测试数据
INSERT INTO t values(1);
打开第2个窗口
-- 设定死锁超时(3秒)
SET lock_timeout 3000;
SELECT @@lock_timeout;
-- 执行查询
SELECT * FROM t;
打开第3个窗口:
-- 查看锁等待情况
SELECT * FROM sys.dm_os_waiting_tasks;
-- 手工杀死会话 session_id
-- 如果手工杀死会话,则第1个窗口将失去连接
KILL 258
-- 如果将第1个窗口事务提交,则第2窗口事务可以执行完成
-- 或者等待锁超时时间
-- 返回第1个窗口,提交事务
COMMIT;
小结:
1、通过 sp_configure 设置的查询超时 query wait (s)’,是指当没有足够的内存运行查询时,大量占用内存的查询将排队等待。
与 db2 中的 死锁超时概念不同。
2、使用 set lock_timeout 指定语句等待锁释放的毫秒数。
此设置仅对当前会话有效,非全局设置
后续有时间,将oracle和db2的锁超时测试补充进来。