Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values (1),(10),(100);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from information_schema.tokudb_locks\G
*************************** 1. row ***************************
locks_trx_id: 238
locks_mysql_thread_id: 3
locks_dname: ./test/t-main
locks_key_left: 0001000000
locks_key_right: 0001000000
locks_table_schema: test
locks_table_name: t
locks_table_dictionary_name: main
*************************** 2. row ***************************
locks_trx_id: 238
locks_mysql_thread_id: 3
locks_dname: ./test/t-main
locks_key_left: 000a000000
locks_table_schema: test
locks_table_name: t
*************************** 3. row ***************************
locks_trx_id: 238
locks_mysql_thread_id: 3
locks_dname: ./test/t-main
locks_key_left: 0064000000
locks_key_right: 0064000000
locks_table_schema: test
locks_table_name: t
locks_table_dictionary_name: main
3 rows in set (0.00 sec)
从tokudb_locks表可以查询到,生成了3条row-lock(locks_key_left和locks_key_right相等)。
为了存储和显示方便,locks_key_left/locks_key_right取key的hash值。
client1执行如下操作:
mysql1> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)
mysql1> insert into t values (1),(10),(100);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql1> select * from information_schema.tokudb_locks\G
*************************** 1. row ***************************
locks_trx_id: 283
locks_mysql_thread_id: 14
locks_dname: ./test/t-main
locks_key_left: 0001000000
locks_table_name: t
locks_table_dictionary_name: main
*************************** 2. row ***************************
locks_trx_id: 283
locks_mysql_thread_id: 14
locks_dname: ./test/t-main
locks_key_left: 000a000000
locks_key_right: 000a000000
locks_table_schema: test
locks_table_name: t
locks_table_dictionary_name: main
*************************** 3. row ***************************
locks_trx_id: 283
locks_mysql_thread_id: 14
locks_dname: ./test/t-main
locks_key_left: 0064000000
locks_key_right: 0064000000
locks_table_schema: test
locks_table_name: t
locks_table_dictionary_name: main
3 rows in set (0.00 sec)
锁等待超时了,通过参数tokudb_last_lock_timeout得知,hash为0064000000的row-lock已经被txnid为283(client1)抢占。
tokudb_lock_timeout_debug = 0: No lock timeouts or lock deadlocks are reported.
tokudb_lock_timeout_debug = 1: A JSON document that describes the lock conflict is stored in the tokudb_last_lock_timeout session variable
tokudb_lock_timeout_debug = 3: A JSON document that describes the lock conflict is stored in the tokudb_last_lock_timeout session variable and is printed to the MySQL error log.