评论

收藏

[MySQL] 大量locked进程中,找出哪条SQL语句locked致使其他语句waiting

数据库 数据库 发布于:2021-07-04 13:24 | 阅读数:240 | 评论:0

  
  大量locked进程中,找出哪条SQL语句locked致使其他语句waiting
  
  1.创建一个测试表
  mysql> use test
  mysql> create table admin (
      -> username varchar(35) not null unique,
      -> password varchar(64) not null);
  
  2.创建长执行进程
  mysql> select sleep(10000) from admin;
  
  3.查看进程
  mysql> show full processlist\G
  *************************** 2. row ***************************
       Id: 43803
     User: root
     Host: localhost
       db: NULL
  Command: Query
     Time: 0
    State: NULL
     Info: show full processlist
  *************************** 3. row ***************************
       Id: 43806
     User: root
     Host: localhost
       db: test
  Command: Query
     Time: 61
    State: User sleep
     Info: select sleep(10000) from admin
  
  4.插入测试数据
  mysql> insert into admin values ('e','555');
  Query OK, 1 row affected (0.00 sec)
  
  5.删除测试数据
  mysql> delete from test.admin where username='e';
  
  6.再次插入测试数据
  mysql> insert into test.admin values ('f','666');
  
  7.查询测试数据
  mysql> select * from test.admin;
  
  8.查看进程
  mysql> show full processlist\G
  *************************** 2. row ***************************
       Id: 43803
     User: root
     Host: localhost
       db: test
  Command: Query
     Time: 1000
    State: Locked
     Info: delete from test.admin where username='e'
  *************************** 3. row ***************************
       Id: 43806
     User: root
     Host: localhost
       db: test
  Command: Query
     Time: 1187
    State: User sleep
     Info: select sleep(10000) from admin
  *************************** 4. row ***************************
       Id: 43824
     User: root
     Host: localhost
       db: test
  Command: Query
     Time: 448
    State: Locked
     Info: insert into test.admin values ('f','666')
  *************************** 5. row ***************************
       Id: 43830
     User: root
     Host: localhost
       db: NULL
  Command: Query
     Time: 212
   State: Locked
     Info: select * from test.admin
  *************************** 6. row ***************************
       Id: 43837
     User: root
     Host: localhost
       db: NULL
  Command: Query
     Time: 0
    State: NULL
     Info: show full processlist
  
  9.开启mysql服务器写入调试信息
  # /usr/local/mysql/bin/mysqladmin debug
  
  10.查看mysql错误日志
  # tail 132file.err
  Thread  database.table_name        Locked/Waiting      Lock_type
  
  43803   test.admin                Waiting - write       High priority write lock
  43806   test.admin                Locked - read        Low priority read lock
  43830   test.admin                Waiting - read        Low priority read lock
  
  进程ID43806锁定了表test.admin,阻塞了进程ID4380343830的执行,是select sleep(10000) from admin这个SQL语句。
  


  
关注下面的标签,发现更多相似文章