mysqlの高および下でのプライマリ・キーの競合

3343 ワード

/usr/sysbench/bin/sysbench/usr/sysbench/share/sysbench/oltp_write_only.lua–mysql-user=root–mysql-password=xxx–mysql-port=3334–mysql-host=xxx–mysql-db=test–table-size=5000–tables=1–threads=100 run上記のコマンドを使用して1つのテーブルに100を同時に挿入すると、プライマリ・キーの競合が提示され、テーブルの開始の自己増加は1であり、テーブルのデータは実際に1 w以上挿入されているが、id割り当ては390 w割り当てられている
FATAL: mysql_stmt_execute() returned error 1062 (Duplicate entry ‘2491570’ for key ‘PRIMARY’) for query ‘INSERT INTO sbtest1 (id, k, c, pad) VALUES (?, ?, ?, ?)’ FATAL: `thread_run’ function failed: ./oltp_common.lua:484: SQL error, errno = 1062, state = ‘23000’: Duplicate entry ‘2491570’ for key ‘PRIMARY’ Error in my_thread_global_end(): 1 threads didn’t exit
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|    14189 |
+----------+
1 row in set (0.01 sec)

mysql> show create table sbtest1;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                        |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest1 | CREATE TABLE `sbtest1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `k` int(11) NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=3923838 DEFAULT CHARSET=utf8 |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like 'innodb_auto%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64    |
| innodb_autoinc_lock_mode    | 1     |
+-----------------------------+-------+
2 rows in set (0.02 sec)

本当に高い同時書き込みの場合、今回のテストの同時書き込みは削除、挿入などの操作があるので、やはり別の実現を考えましょう.アプリケーション生成は、挿入の操作だけで、この同時書き込みは問題ありません.