SQL Server数据库开启自动收缩引发的严重系统阻塞案例

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

SQL Server数据库开启自动收缩引发的严重系统阻塞案例

问题:

      系统卡顿,使用阻塞语句查询(参考https://vip.kingdee.com/article/88688198309596928),发现大量的阻塞。

分析:

    查看阻塞,发现阻塞的会话在等待一个系统会话24(会话ID<50的为系统会话),请求锁类型为对象上的sch类型的架构锁,这种情况往往表示表结构发生改变,但这个操作是由会话24执行的,为系统会话。

   

   检查会话24,发现执行的命令为AUTOSHRINK,时正在对数据库进行收缩操作。

    并且已经执行超过7806712毫秒,只完成了30.6%

   这种操作,说明数据库开启了数据库的自动收缩属性。此时通过SQL SERVER的SSMS管理工具右键打开数据库属性将可能报错。但可以通过系统表sys.databases查看is_auto_shrink_on是否为1。

   如下图,1表示开启了数据库自动收缩的库,发现数据库的确打开自动收缩的属性。

    到这里,问题已经明确了,这种情况下,只有不再连接SQL Server,并且把被阻塞的会话全部kill,让自动收缩命令尽快完成。

    注意:千万不要去启动SQL Server服务或者关闭操作系统,否则可能导致数据重启后,由于文件不一致问题,数据库出现置疑的情况。  


一点尝试:

    如果文件非常大,磁盘IO能力差,这个操作花费的时间可能会非常长,怎么尽快加快回收任务的结束。可以做下面的相关尝试

    1:主动执行checkpoint

    2:执行dbcc checkdb()一段时间后,杀掉该会话

    可以尝试2-3次,看看是否可以加快收缩会话的完成。


相关知识:

自动收缩触发时机:空闲空间大于25%

关闭自动收缩SQL:

USE [master]
GO
ALTER DATABASE 数据库名 SET AUTO_SHRINK OFF WITH NO_WAIT
GO

正确设置:保留数据库的默认设置。千万不要去修改。  包括自动关闭参数




    

SQL Server数据库开启自动收缩引发的严重系统阻塞案例

问题: 系统卡顿,使用阻塞语句查询(参考https://vip.kingdee.com/article/88688198309596928),发现大量的阻塞。分析: 查看阻...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息