当性能测试出现下降,使用perf top监控,出现mt_spin_lock_wait超过5%
出现spin_lock的有几种情况。
1、rootdbs大小不合理
在运行过程中使用onstat -d,检查各个空间的使用情况,显示rootdbs剩余空间很少。
修改onconfig文件,rootdbs大小,从3000000修改为30000000。
重新测试,再没出现。
2、锁争抢
如果rootdbs空间还有很多剩余,使用onstat -g ath,如果出现大量的lock wait。
说明锁太少,一个锁占用120字节内存。再内存允许的情况下,加大locks数。
3、索引分片不合理
onstat -g ath
多刷新几次,看到是哪个锁,例如:pt_20004e
将20004e 16进制转换为10进制:2097230
oncheck -pt benchmarksql >a.txt
去a.txt中找2097230对应的索引:138_134
echo "select * from sysindexes"| dbaccess -e
benchmarksql - >b.txt
从b文件中找到 138_134对应的tabid:138
select * from systables where tabid=138;
找到对应的表,然后检查这个表对应的表结果和索引分片是否合理
查看spin_lock哪个占用最多
onstat -g spi|head -n 1000|sort -rnk 1|less
网友评论