sysbench花式采坑之二:自增值导致的主键冲突

本文介绍了在sysbench对MySQL单实例进行压测时遇到的主键冲突问题,分析了自增值不为1如何引发这个问题。在READ-COMMITTED(RC)隔离级别下,自增值不为1会导致主键冲突;而在REPEATABLE-READ(RR)隔离级别下,可能导致死锁。解决方案是将sysbench的自增值设为1,以避免不准确的测试结果和潜在的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上期《sysbench花式采坑之一:自增值导致的TPS不可靠》介绍到,在sysbench压测过程中,如果自增值不为1会导致性能测试值偏高的现象,其实在发现这个现象之前,在单实例性能测试时我还遇到了一个主键冲突的问题。

| MySQL单实例sysbench压测时出现主键冲突

《sysbench花式采坑之一:自增值导致的TPS不可靠》这篇文章里解释了sysbench关于插入的操作是先随机生一个id,然后通过这个id先删掉一行,再通过这个id插入一行。

# 在1和压测语句中指定的 oltp_table_size 中生成一个随机数i
i = sb_rand(1, oltp_table_size)
# 删除 id 为 i 的列
rs = db_query("DELETE FROM " .. table_name .. " WHERE id=" .. i)
c_val = sb_rand_str([[
###########-###########-###########-###########-###########-###########-###########-###########-###########-###########]])
pad_val = sb_rand_str([[
###########-###########-###########-###########-###########]])
# 插入 id 为 i 的列
rs = db_query("INSERT INTO " .. table_name .. " (id, k, c, pad) VALUES " .. string.format("(%d, %d, '%s', '%s')",i, sb_rand(1, oltp_table_size) , c_val, pad_val))

看一下sysbench oltp压测中SQL具体的内容。

# 打开general_log
mysql> set global general_log=1;
# 压测语句,指定num-threads为1
shell> sysbench --test=oltp --db-driver=mysql --mysql-table-engine=innodb --mysql-host=localhost --my
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值