如何解决高页和行锁定HashTable自旋锁争用

2020-09-28 10:51发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们在Linix主机上运行AS%15.7 SP135 RUnning-线程模型-32核主机上有20个线程。 我们会经历很高的CPU使用率。 在此期间,sysmon在页面和行锁哈希表中显示出较高的争用率-超过20%。 基于文档审查/与SAP支持一起工作-我们一直在调整锁自旋锁比率,锁哈希表大小和锁地址自旋锁比率。 以下是当前相关的配置设置:

锁数= 1000000锁自旋锁比率= 20锁地址自旋锁比率= 5锁哈希表大小= 65536

我看到一些文档说锁哈希表的大小应为8192:

锁哈希表大小> = @锁数@/1000000 * 8192 [REC]

任何建议将不胜感激

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们在Linix主机上运行AS%15.7 SP135 RUnning-线程模型-32核主机上有20个线程。 我们会经历很高的CPU使用率。 在此期间,sysmon在页面和行锁哈希表中显示出较高的争用率-超过20%。 基于文档审查/与SAP支持一起工作-我们一直在调整锁自旋锁比率,锁哈希表大小和锁地址自旋锁比率。 以下是当前相关的配置设置:

锁数= 1000000锁自旋锁比率= 20锁地址自旋锁比率= 5锁哈希表大小= 65536

我看到一些文档说锁哈希表的大小应为8192:

锁哈希表大小> = @锁数@/1000000 * 8192 [REC]

任何建议将不胜感激

付费偷看设置
发送
7条回答
槿木_熙
1楼-- · 2020-09-28 11:35

好,因此启用异步io后,您可以消除页面/行锁哈希表上的自旋锁,并且可以将IO请求的数量增加一倍(从55,429到110,847),但是 因此瓶颈已转移到默认数据缓存。

-------------

看看哪些自旋锁有问题(即针对 monSpinlockActivity 运行该增量查询)可能会很有趣。

使用22个引擎,我不会期望将缓存分区从32增加到64。

-------------

由于大约有3%的磁盘IO请求针对(看起来是)tempdb设备进行写操作,所以我可能想从为您的tempdbs建立命名缓存开始。

您可能需要使用池大小(4k,8k-假定tempdb log io size = 8k,32k)来找到正确的大小/混合; 这应该有助于减少默认数据缓存中的自旋锁争用。

假设大多数tempdb缓存活动都支持短期操作(例如,短期的#temp表),我可能还想在新的tempdb缓存中禁用HK。 这样可以消除(香港)对tempdb设备的大量不必要的写入操作; 虽然这可能有助于减少tempdb缓存中发生某些自旋锁争用的可能性,但更大的效果将以释放带宽的形式用于更重要的磁盘IO活动(例如,如果您处于/接近最大吞吐量) 磁盘子系统); 一个缺点是,对于长时间运行的tempdb活动,您可能会看到进入清洗区的页面数量有所增加……因此,如果看到tempdb缓存,您可能会发现自己不得不加大清洗区的大小 等待将脏页刷新到磁盘时停滞。

要在新的tempdb缓存中禁用HK,您需要关闭ASE并更新tempdb缓存的ASE配置文件条目,如下所示:

 [命名缓存:]
         缓存大小= xxx
         缓存状态= xxx
         缓存状态= HK忽略缓存<====添加此行
         缓存替换策略= xxx
         本地缓存分区号= xxx 

注意:是的,您将有2个tempdb缓存的"缓存状态"条目。

重新启动ASE后,您会发现 sp_cacheconfig 显示HK正在忽略(即禁用了)tempdb缓存。

一些参考文献:

ASE SAG(手册 )条目re:在缓存中禁用HK (重复我在上面的内容re:更新ASE配置文件)

演示文稿 作者:Jeff Tallman,关于:调整数据缓存(包括在tempdb缓存中禁用HK的小提示;通常用于调整数据缓存的良好刷新器)

一周热门 更多>