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

2020-09-28 10:51发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们在Linix主机上运行AS%...

         点击此处--->   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条回答
葫芦娃快救爷爷
2020-09-28 11:28

感谢附加数据( monSpinlockActivity 和 sp_sysmon )...

-----------

monSpinlockActivity 数据似乎排除了我对与过程缓存相关的自旋锁争用的担忧,其中 fglockspins 是主要问题:

 SpinlockName抓住旋转等待争用
 --------------------------------------------------  -------------
 fglockspins 40818673 2310551156 13616664 33.35
 

根据我引用的那个Wiki页面, fglockspins 与您在最初的帖子/问题中提到的配置参数有关。

注意:虽然 lock哈希表大小= 65536 似乎有点过分(例如, sp_sysmon 显示的是很小的平均avg链长= 0.00015),但我看不到 这是一个问题。

由于更改配置后您仍然遇到自旋锁争用问题(并导致较高的cpu),所以我想知道系统中是否还有其他问题...

-----------

在其余的 sp_sysmon 输出中,我确实在"磁盘I/O管理"部分下找到了一个令人关注的项目,即所有IO(其中大多数都在写) 正在同步执行... *喜欢*:

完成的磁盘I/O
     异步I/O
       已完成的I/O总数0.0 0.0 0不适用
     同步I/O
       已完成的I/O总数307.9 1.6 55429 100.0%
   ------------------------- ------------ -------------  ---------
   已完成的I/O总数307.9 1.6 55429 

理想情况下,ASE应该与100%异步IO一起运行,因为这允许线程在等待磁盘IO完成时继续工作。

在这一点上,我想知道您是否会看到大量的页/行自旋锁争用,因为在等待同步IO完成时正在保持所述自旋锁? [SAP技术支持应该能够确认/驳斥这个想法]

我想找出为什么ASE在同步IO上运行(例如,Linux主机未配置为支持异步IO; ASE的 allow sql server异步i/o = 0 [off ]),然后查看如何启用异步IO。

-在ASE启动时,错误日志应包含每个设备的单独消息,以包括该设备是同步启动还是异步启动

-请参阅"配置指南(Unix/Linux)"的"在Linux上启用异步磁盘I/O"部分,以进行系统管理员检查。

-如果可以启用异步IO,请确保查看每个引擎/服务器的最大异步i/os config参数,以确保它们的设置不要太低[默认设置通常是 对于当今的磁盘子系统来说太低了,结果是太低的设置会导致ASE磁盘IO活动的人为瓶颈]

一周热门 更多>