问题现象
正常远程连接上数据库后,发现某个视图一直无法打开,且弹出“Lock Request time out period exceeded.(SQL Server : error 1222)
”的错误提示信息。
问题分析
通过上面的错误提示信息可以看出,该视图被锁死了,所以无法打开。那么如何造成该问题现象呢?
经过分析发现,天猫运营人员在后台管理系统中正使用该视图来筛选商品库存信息NQTY,包括NQTY=0的情况,与此同时,后台开发人员正在优化数据库,将该视图的筛选条件由NQTY>=0改成NQTY>0,进而产生了系统资源的竞争,造成了该问题中视图锁死现象。
解决方法
- 第一步:执行以下sql语句查找数据库中该锁死视图对应的进程号,即spid。
select * from master..sysprocesses where DB_NAME(dbid)='数据库名称' and spid<>@@SPID and dbid<>0
其中,master..sysprocesses
是用来查找阻塞或锁死的视图,spid
为进程ID,dbid
为当前会话ID。
- 第二步:执行以下语句kill掉该进程ID。
kill spid(kill掉当前进程ID)
补充说明:也可以采用重启SQL Server服务器来暴力解决该问题现象,但会影响到数据库中其他表或视图的使用,请根据实际业务情况做出权衡选择。