网站地图    收藏   

主页 > 后端 > mysql数据库 >

mysql主键设置成auto_increment时,进行并发性能测试

来源:自学PHP网    时间:2015-04-16 10:51 作者: 阅读:

[导读] mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry xxx for key PRIMARY 解决方法:在my cnf的[mysqld]片段中添加设置innodb_autoinc_lock_mode=0同时注意调大jdbc...

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

解决方法:

在my.cnf的[mysqld]片段中添加设置innodb_autoinc_lock_mode=0

同时注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,因为设置innodb_autoinc_lock_mode=0可能导致链接过多。

注意,这种方式只需要在并发性能测试时设置,因为这种方式在插入记录时需进行全表锁定,性能较差,平时生产环境中只需使用默认的设置innodb_autoinc_lock_mode=1即可,mysql的官方文档有说明:

\\

http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-configurable.html<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz5pbm5vZGJfYXV0b2luY19sb2NrX21vZGXK9NDUtcS6rNLlyOfPwqO6PC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPjGhomlubm9kYl9hdXRvaW5jX2xvY2tfbW9kZSA9IDAgKKGwdHJhZGl0aW9uYWyhsSBsb2NrIG1vZGUpPC9zdHJvbmc+PGJyPgrV4tbWt73Kvb7Nus1teXNxbDUuMS4yMtLUx7DSu9H5o6zV4tbWt73KvbXEzNi1477NysehsLHtvLbL+LaoobGjrLKit6LQ1L3Psu48L3A+CjxwPjxicj4KPHN0cm9uZz4yoaJpbm5vZGJfYXV0b2luY19sb2NrX21vZGUgPSAxICihsGNvbnNlY3V0aXZlobEgbG9jayBtb2RlKTwvc3Ryb25nPjxicj4K1eLW1re9yr3Kx9DCsOaxvtbQtcTErMjPt73KvaOszca89sq508OjrLKit6LQ1M/gttS9z7jfo6zM2LXjysehsGNvbnNlY3V0aXZlobGjrLy0saPWpM2s0rvM9Wluc2VydNPvvuTW0NDCsuXI67XEYXV0b19pbmNyZW1lbnQgaWS2vMrHwazQ+LXEoaM8YnI+CtXi1tbEo8q9z8Kjujxicj4KobBTaW1wbGUgaW5zZXJ0c6Gxo7rWsb3Tzai5/bfWzvbT777ko6y78bXD0qqy5cjrtcTK/cG/o6zIu7rz0ru0ztDUt9bF5Nfjubu1xGF1dG9faW5jcmVtZW50IGlko6zWu7vhvavV+7j2t9bF5LXEuf2zzMv416Ghozxicj4KobBCdWxrIGluc2VydHOhsaO60vLOqrK7xNzIt7aosuXI67XEyv3Bv6Os0vK0y8q508O6zdLUx7C1xMSjyr3P4M2stcSx7by2y/i2qKGjPGJyPgqhsE1peGVkLW1vZGUgaW5zZXJ0c6Gxo7rWsb3Tt9bO9tPvvuSjrLvxtcPX7ru1x+m/9s/C0OjSqrLlyOu1xMr9wb+jrMi7uvPSu7TO0NS31sXk1+O5u7XEYXV0b19pbmNyZW1lbnQgaWSjrNa7u+G9q9X7uPa31sXktcS5/bPMy/jXoaGj0OjSqtei0uK1xMrHo6zV4tbWt73Kvc/Co6y74bfWxeS5/bbgtcRpZKOstvi1vNbCobHAy7fRobCho7HIyOdJTlNFUlQgSU5UTyB0MSAoYzEsYzIpIFZBTFVFUyAoMSyhr2E="), (NULL,’b'), (5,’c'), (NULL,’d');会一次性的分配5个id,而不管用户是否指定了部分id;INSERT … ON DUPLICATE KEY UPDATE一次性分配,而不管将来插入过程中是否会因为duplicate key而仅仅执行update操作。
注意:当master mysql版本<5.1.22,slave mysql版本>=5.1.22时,slave需要将innodb_autoinc_lock_mode设置为0,因为默认的 innodb_autoinc_lock_mode为1,对于INSERT … ON DUPLICATE KEY UPDATE和INSERT INTO t1 (c1,c2) VALUES (1,’a'), (NULL,’b'), (5,’c'), (NULL,’d');的执行结果不同,现实环境一般会使用INSERT … ON DUPLICATE KEY UPDATE。


3、innodb_autoinc_lock_mode = 2 (“interleaved” lock mode)
这种模式是来一个分配一个,而不会锁表,只会锁住分配id的过程,和innodb_autoinc_lock_mode = 1的区别在于,不会预分配多个,这种方式并发性最高。但是在replication中当binlog_format为statement-based时 (简称SBR statement-based replication)存在问题,因为是来一个分配一个,这样当并发执行时,“Bulk inserts”在分配的时会同时向其他的INSERT分配,会出现主从不一致(从库执行结果和主库执行结果不一样),因为binlog只会记录开始的 insert id。

参考文档:

http://biancheng.dnbcw.info/mysql/356243.html

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论