SQL SERVER 2014下无法创建表的问题原创
金蝶云社区-墨迹
墨迹
2人赞赏了该文章 140次浏览 未经作者许可,禁止转载编辑于2023年09月07日 17:05:26

环境

       SQL Server 2014 +SP2

问题

       执行create table test(fid int)或者select * into test时,无法完成。查看会话执行情况时,获取下面的信息:

image.png

    多个建表的会话同时执行时,信息如下:

image.png

分析

       从上面的信息,可以看到等待的资源都是61:1:311270(61为当前的数据库ID,不同的数据库,该值会不同。注意排除为2的情况,2表示为tempdb)。

       执行dbcc traceon(3604)后,再执行dbcc page(61,1,311270)查看该页所属的对象。

image.png

        可以看到objectid=60,通过select object_name(60)获取对应的表名为sysobjvalues,即这些会话都在等待系统表的PAGELATCH_EX的排他锁。

       查询微软官方,发现类似的描述:

image.png

https://support.microsoft.com/en-au/topic/kb4090320-fix-significantly-increased-pagelatch-ex-contentions-in-sys-sysobjvalues-in-sql-server-2014-4cfb776c-1bd8-6972-d2de-84a31bf5bbbc

       基本明确为SQL SERVER的BUG

解决方式

       安装SQL SERVER 2014的最新补丁

建议

       安装SQL Server后,需要及时更新补丁

       SQL Server 2016也存在类似的问题,同样需要打最新补丁解决。

赞 2