--mysql中默认锁超时为50s
select * from information_schema.SESSION_VARIABLES sv where sv.VARIABLE_NAME like '%timeout%';
mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| deadlock_timeout_long | 50000000 |
| deadlock_timeout_short | 10000 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| thread_pool_idle_timeout | 60 |
| wait_timeout | 28800 |
+-----------------------------+----------+
--设置锁超时
mysql> set innodb_lock_wait_timeout=10000000;
--在session 1 中开启一个事务
mysql> begin;
mysql> update t set user_name='rudy test' where id=1;
--在session 2 中开启一个事务
mysql> begin;
mysql> update t set user_name='rudy test' where id=1;
--在session 3 中开启一个事务
mysql> begin;
mysql> update t set user_name='rudy test' where id=1;
--trx_state为RUNNING代表其已经执行完成,等待用户操作,lock wait代表其等待获得共享锁,故running的为源始引起lock的sql
select trx_id, trx_state, trx_started, trx_requested_lock_id, trx_wait_started, trx_weight, trx_mysql_thread_id, trx_query, trx_operation_state, trx_tables_in_use, trx_tables_locked, trx_lock_structs, trx_rows_locked, trx_rows_modified from information_schema.innodb_trx;
*************************** 1. row ***************************
trx_id: 4136
trx_state: LOCK WAIT
trx_started: 2015-10-19 02:00:11
trx_requested_lock_id: 4136:217:4:410
trx_wait_started: 2015-10-19 02:03:41
trx_weight: 2
trx_mysql_thread_id: 24
trx_query: update t set user_name='rudy test' where id=1
trx_operation_state: starting index read
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_rows_locked: 1
trx_rows_modified: 0
*************************** 2. row ***************************
trx_id: 4135
trx_state: LOCK WAIT
trx_started: 2015-10-19 01:59:53
trx_requested_lock_id: 4135:217:4:410
trx_wait_started: 2015-10-19 02:03:32
trx_weight: 2
trx_mysql_thread_id: 23
trx_query: update t set user_name='rudy test' where id=1
trx_operation_state: starting index read
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_rows_locked: 1
trx_rows_modified: 0
*************************** 3. row ***************************
trx_id: 4134
trx_state: RUNNING
trx_started: 2015-10-19 01:59:43
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 262
trx_mysql_thread_id: 17
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 261
trx_rows_locked: 100260
trx_rows_modified: 1
3 rows in set (0.00 sec)
--下面的两个也可以进行锁的查看
--requesting_trx_id,请求锁的事务ID,blocking_trx_id当前拥有锁的锁ID
mysql> select * from information_schema.innodb_lock_waits;
+-------------------+-------------------+-----------------+------------------+
| requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id |
+-------------------+-------------------+-----------------+------------------+
| 4136 | 4136:217:4:410 | 4135 | 4135:217:4:410 |
| 4136 | 4136:217:4:410 | 4134 | 4134:217:4:410 |
| 4135 | 4135:217:4:410 | 4134 | 4134:217:4:410 |
+-------------------+-------------------+-----------------+------------------+
3 rows in set (0.00 sec)
mysql> select * from information_schema.innodb_locks;
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
| lock_id | lock_trx_id | lock_mode | lock_type | lock_table | lock_index | lock_space | lock_page | lock_rec | lock_data |
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
| 4136:217:4:410 | 4136 | X | RECORD | `test`.`t` | GEN_CLUST_INDEX | 217 | 4 | 410 | 0x000000000300 |
| 4135:217:4:410 | 4135 | X | RECORD | `test`.`t` | GEN_CLUST_INDEX | 217 | 4 | 410 | 0x000000000300 |
| 4134:217:4:410 | 4134 | X | RECORD | `test`.`t` | GEN_CLUST_INDEX | 217 | 4 | 410 | 0x000000000300 |
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
--当然可以kill掉某一个线程
kill 17;
--kill掉所有lock的线程
cat kill_thread.sh
#!/bin/bash
mysql -u root -e "show processlist" | grep -i "Locked" >> locked_log.txt
for line in `cat locked_log.txt | awk '{print $1}'`
do
echo "kill $line;" >> kill_thread_id.sql
done
mysql 锁查看
最新推荐文章于 2024-07-14 03:42:55 发布