mysql主鍵設定成auto_increment時,進行並發效能測試出現主鍵重複Duplicate entry 'xxx' for key 'PRIMARY',duplicateentry

來源:互聯網
上載者:User

mysql主鍵設定成auto_increment時,進行並發效能測試出現主鍵重複Duplicate entry 'xxx' for key 'PRIMARY',duplicateentry

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

innodb_autoinc_lock_mode屬性的含義如下:

1、innodb_autoinc_lock_mode = 0 (“traditional” lock mode)
這種方式就和mysql5.1.22以前一樣,這種方式的特點就是“表級鎖定”,並發性較差


2、innodb_autoinc_lock_mode = 1 (“consecutive” lock mode)
這種方式是新版本中的預設,推薦使用,並發性相對較高,特點是“consecutive”,即保證同一條insert語句中新插入的auto_increment id都是連續的。
這種模式下:
“Simple inserts”:直接通過分析語句,獲得要插入的數量,然後一次性分配足夠的auto_increment id,只會將整個分配的過程鎖住。
“Bulk inserts”:因為不能確定插入的數量,因此使用和以前的模式相同的表級鎖定。
“Mixed-mode inserts”:直接分析語句,獲得最壞情況下需要插入的數量,然後一次性分配足夠的auto_increment id,只會將整個分配的過程鎖住。需要注意的是,這種方式下,會分配過多的id,而導致”浪費“。比如INSERT INTO t1 (c1,c2) VALUES (1,’a'), (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


在現有MYSQL資料庫中設定主鍵與auto_increment時一直出錯

只能有一個自增的列,而且一般來說該列都是主鍵,你要不就是沒將auto_increment的欄位設為主鍵,要不就是設了不止一個auto_increment欄位

每個表裡只能有這樣的一個欄位,不能有多個
 
mysql資料庫出現:Duplicate entry '0-119' for key 1是什錯誤(0-119)是兩個主鍵來著

資料重複
提示是資料庫出錯,
你說資料已清空,
我想唯一的答案就是,資料庫欄位你設定有問題,導致你在執行程式,寫入資料庫時,如果是重複資料,就跟資料庫衝突,導致報錯
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.