子嘉的博客 子嘉的博客
首页
bic-bic
技术
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

高子嘉

没有比脚更长的路,没有比人更高的山
首页
bic-bic
技术
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • 博客搭建

  • 服务端

  • distributed

  • golang

  • db

    • mysql

      • mysql
      • password
      • dead_lock
        • 原因分析
      • mariadb password
      • script
      • dump
    • mongodb

    • redis
  • docker

  • linux

  • 技术
  • db
  • mysql
子嘉
2023-02-15
目录

dead_lock

背景:某日线上服务出现了死锁,紧急修复之后,对问题处理流程做如下总结

# 原因分析

代码是不会骗人的,出现死锁 99.9% 是代码写出了 bug

问题处理流程:

  1. 通过运维连接 mysql,查看锁信息
  2. 通过锁信息,分析强制删除锁会不会造成数据错乱或数据丢失
  3. 查找死锁代码可能出现的位置
  4. 找到死锁进程,在确认安全的情况下结束进程kill 3872544
MySQL [(none)]> select * from information_schema.metadata_lock_info;
+-----------+-------------+-------------------------+------------------------+-----------------+--------------------+-------------------+
| THREAD_ID | LOCK_STATUS | LOCK_MODE               | LOCK_TYPE              | LOCK_DURATION   | TABLE_SCHEMA       | TABLE_NAME        |
+-----------+-------------+-------------------------+------------------------+-----------------+--------------------+-------------------+
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Table metadata lock    | MDL_STATEMENT   | tradedesk          | projects          |
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Table metadata lock    | MDL_STATEMENT   | tradedesk          | accounts          |
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Table metadata lock    | MDL_STATEMENT   | tradedesk          | account_tokens    |
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Table metadata lock    | MDL_STATEMENT   | tradedesk          | #sql-970_3b1720   |
|   3872544 | GRANTED     | MDL_SHARED_UPGRADABLE   | Table metadata lock    | MDL_STATEMENT   | tradedesk          | users             |
|   3872544 | GRANTED     | MDL_SHARED_UPGRADABLE   | Table metadata lock    | MDL_STATEMENT   | tradedesk          | projects          |
|   3872544 | GRANTED     | MDL_SHARED_UPGRADABLE   | Table metadata lock    | MDL_STATEMENT   | tradedesk          | accounts          |
|   3872544 | GRANTED     | MDL_SHARED_UPGRADABLE   | Table metadata lock    | MDL_STATEMENT   | tradedesk          | account_tokens    |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Schema metadata lock   | MDL_STATEMENT   | tradedesk          |                   |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Backup tables lock     | MDL_STATEMENT   |                    |                   |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Global read lock       | MDL_STATEMENT   |                    |                   |
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Column statistics lock | MDL_TRANSACTION | tradedesk          | studios           |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Tablespace lock        | MDL_TRANSACTION |                    | tradedesk/studios |
|   3872544 | GRANTED     | MDL_EXCLUSIVE           | Table metadata lock    | MDL_TRANSACTION | tradedesk          | studios           |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Schema metadata lock   | MDL_TRANSACTION | tradedesk          |                   |
|   3872544 | GRANTED     | MDL_INTENTION_EXCLUSIVE | Backup lock            | MDL_TRANSACTION |                    |                   |
|   3872544 | PENDING     | MDL_EXCLUSIVE           | Table metadata lock    |                 | tradedesk          | users             |
...
|   3875615 | GRANTED     | MDL_SHARED_READ         | Table metadata lock    | MDL_TRANSACTION | mysql              | tables            |
|   3875615 | GRANTED     | MDL_SHARED_READ         | Table metadata lock    | MDL_TRANSACTION | information_schema | TABLES            |
|   3875615 | PENDING     | MDL_SHARED_HIGH_PRIO    | Table metadata lock    |                 | tradedesk          | account_tokens    |
|   3873911 | PENDING     | MDL_INTENTION_EXCLUSIVE | Schema metadata lock   |                 | tradedesk          |                   |
|   3875711 | PENDING     | MDL_INTENTION_EXCLUSIVE | Schema metadata lock   |                 | tradedesk          |                   |
|   3871263 | PENDING     | MDL_SHARED              | Table metadata lock    |                 | tradedesk          | users             |
+-----------+-------------+-------------------------+------------------------+-----------------+--------------------+-------------------+
81 rows in set (0.01 sec)
MySQL [(none)]> show processlist;
+---------+-----------+----------------------+-----------+------------------+---------+---------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
| Id      | User      | Host                 | db        | Command          | Time    | State                              | Info                                                                                                 |
+---------+-----------+----------------------+-----------+------------------+---------+---------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
|      90 | rdsRepl   | 192.168.26.245:60494 | NULL      | Binlog Dump GTID | 2501163 | Master has sent all binlog to slave; waiting for more updates | NULL                                                                                                 |
| 3852622 | tradedesk | 10.116.1.202:41762   | tradedesk | Sleep            |   15006 |                                    | NULL                                                                                                 |
| 3853008 | tradedesk | 10.116.1.202:50804   | tradedesk | Sleep            |   16095 |                                    | NULL                                                                                                 |
| 3871263 | tradedesk | 10.116.1.202:54082   | tradedesk | Prepare          |    2799 | Waiting for table metadata lock    | SELECT * FROM `users` WHERE username = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMI |
| 3871264 | tradedesk | 10.116.1.202:54084   | tradedesk | Prepare          |    2656 | Waiting for table metadata lock    | SELECT * FROM `users` WHERE username = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMI |
| 3872544 | tradedesk | 10.116.1.178:59984   | tradedesk | Query            |    3525 | Waiting for table metadata lock    | ALTER TABLE `studios` MODIFY COLUMN `casbin_key` varchar(32)                                         |
| 3872730 | tradedesk | 10.116.1.178:34070   | NULL      | Query            |    3405 | Waiting for schema metadata lock   | CREATE DATABASE IF NOT EXISTS tradedesk                                                              |
| 3872926 | tradedesk | 10.116.1.178:36374   | NULL      | Connect          |    3285 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3873107 | tradedesk | 10.116.1.178:38702   | NULL      | Connect          |    3165 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3873304 | tradedesk | 10.116.1.178:41066   | NULL      | Connect          |    3045 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3875516 | tradedesk | 10.116.1.182:54220   | NULL      | Connect          |    1601 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3875612 | root      | 100.125.7.128:48140  | NULL      | Query            |    1544 | Waiting for table metadata lock    | /* sql from das */select TABLE_NAME, CREATE_TIME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, TABLE_COLLA |
| 3875615 | root      | 100.125.7.127:55134  | NULL      | Query            |    1472 | Waiting for table metadata lock    | /* sql from das */select TABLE_NAME, CREATE_TIME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, TABLE_COLLA |
| 3875711 | tradedesk | 10.116.1.182:56344   | NULL      | Connect          |    1481 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3875773 | root      | 100.125.7.127:55422  | NULL      | Query            |    1439 | Waiting for table metadata lock    | /* sql from das */select TABLE_NAME, CREATE_TIME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, TABLE_COLLA |
| 3875795 | root      | 100.125.141.68:56998 | NULL      | Query            |    1426 | Waiting for schema metadata lock   | use `tradedesk`                                                                                      |
| 3875892 | tradedesk | 10.116.1.182:58388   | NULL      | Connect          |    1361 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3875977 | root      | 10.103.101.233:56298 | NULL      | Init DB          |    1298 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3876820 | tradedesk | 10.116.1.202:36044   | NULL      | Connect          |     749 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3876908 | tradedesk | 10.116.1.202:37036   | NULL      | Connect          |     690 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3877544 | tradedesk | 10.116.1.202:43948   | NULL      | Connect          |     273 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3877547 | tradedesk | 10.116.1.202:43970   | NULL      | Connect          |     271 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3877554 | tradedesk | 10.116.1.202:44018   | NULL      | Connect          |     267 | Waiting for schema metadata lock   | NULL                                                                                                 |
| 3877857 | root      | 10.103.101.233:56390 | NULL      | Query            |       0 | init                               | show processlist                                                                                     |
| 3877866 | root      | 100.125.141.68:60558 | NULL      | Sleep            |      60 |                                    | NULL                                                                                                 |
+---------+-----------+----------------------+-----------+------------------+---------+---------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
45 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
MySQL [tradedesk]> select \* from information_schema.INNODB_TRX\G
\***\*\*\*\*\*\*\***\*\*\*\***\*\*\*\*\*\*\*** 1. row \***\*\*\*\*\*\*\***\*\*\*\***\*\*\*\*\*\*\***
trx_id: 421450135639512
trx_state: RUNNING
trx_started: 2022-12-28 14:32:23
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 0
trx_mysql_thread_id: 3852622
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 0
trx_lock_memory_bytes: 1136
trx_rows_locked: 0
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
trx_schedule_weight: NULL
trx_waited_time: 0
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
> kill 3872544
1
编辑 (opens new window)
上次更新: 2023/02/24, 10:34:03
password
mariadb password

← password mariadb password→

最近更新
01
mongodb restore
03-06
02
pytesseract
02-28
03
consul
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2025 子嘉 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式