小编Max*_*oke的帖子

在繁重的并发 INSERT 工作负载下,有什么方法可以减少 sysallocunits 争用?

我有一个被大量独立会话插入的数据库。每个会话写入不同的表,因此您会天真地期望它们都将并行进行。但是,通过检查sys.dm_os_wait_statssys.dm_os_latch_stats,我发现我实际上在DBCC PAGE报告为类型 11 的页面(即 PFS 页面)上遇到了大量的 PAGELATCH_* 等待。

所以基本上整个过程都变慢了,因为每个线程都在与其他线程竞争以分配新页面。

这种情况下的标准建议是:

我做了这两件事,它确实减少了 PFS 页面上的争用,但我现在看到PAGELATCH_EX页面上的一些争用DBCC PAGE告诉我是属于对象 ID 7 的数据页,即sysallocunits.

关于sysallocunits系统表用途的在线信息不多,我也找不到任何关于它的争用的信息。在改变这个表时,我似乎刚刚设法用瓶颈替换了我的分配瓶颈!

我想我可以通过将每个表放在自己的数据库中(然后不共享sysallocunits表)来减少争用,但这将是我宁愿避免的相当重要的架构更改。

有什么方法可以在sysallocunits不创建额外数据库的情况下减少争用?

编辑:根据要求,这是DBCC PAGE显示争用的页面之一的输出:

PAGE: (1:476)


BUFFER:


BUF @0x0000006143763A80

bpage = 0x0000004064D20000          bhash = 0x0000006301FCBAC0          bpageno = (1:476)
bdbid = 15                          breferences = 2047                  bcputicks = 48351
bsampleCount = 90                   bUse1 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

6
推荐指数
1
解决办法
1082
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1