zoukankan      html  css  js  c++  java
  • 04. pt-deadlock-logger

    死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象;
    当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成。
    上面是死锁的概念,而在MySQL中innodb会出现死锁的情况,但是查看死锁却很不“智能”。
    只能通过 show engine innodb status 查看,但只保留最后一个死锁的信息,之前产生的死锁都被刷掉了。
    下面介绍的工具却很容易做到记录。

    pt-deadlock-logger [OPTIONS] DSN
    pt-deadlock-logger:显示指定的DSN的死锁日志信息,他能够标准输出到屏幕也可以把信息写日志文件中(--log参数)甚至可以保留到指定的表中(--dest参数),
    该工具默认是永久执行,除非指定--run-time 或 --iterations 。

    用法:

    pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306|pt-align

    pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306 --create-dest-table --dest D=db01,t=pt_deadlocks

    参数:


    --create-dest-table :创建指定的表。
    --dest :创建存储死锁信息的表。
    --database :-D,指定链接的数据库。
    --table :-t,指定存储的表名。
    --log :指定死锁日志信息写入到文件。
    --run-time :运行时长,默认永久
    --interval :运行间隔时间,默认30s。
    u,p,h,P :链接数据库的信息。


    测试:
    session 1:
    start transaction;
    update t01 set name='lulu' where code>3;


    session 2:
    start transaction;
    update t01 set name='kaka' where code>2;


    session 1:
    update t01 set name='jojo' where code>2;

    死锁出现了!
    看pt-deadlock-logger的运行情况:

    -------------------------------


    pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306|pt-align
    192.168.100.101 2018-11-19T18:14:44 9 0 34 admin localhost db01 t01 PRIMARY RECORD X w 1 update t01 set name='jojo' where code>2
    192.168.100.101 2018-11-19T18:14:44 10 0 26 admin localhost db01 t01 PRIMARY RECORD X w 0 update t01 set name='kaka' where code>2


    -------------------------

    pt-deadlock-logger --run-time=10 --interval=3 u=admin,p=admin,h=192.168.100.101,P=3306 --create-dest-table --dest D=db01,t=pt_deadlocks


    select * from pt_deadlocksG
    *************************** 1. row ***************************
    server: 192.168.100.101
    ts: 2018-11-19 18:14:44
    thread: 9
    txn_id: 0
    txn_time: 34
    user: admin
    hostname: localhost
    ip:
    db: db01
    tbl: t01
    idx: PRIMARY
    lock_type: RECORD
    lock_mode: X
    wait_hold: w
    victim: 1
    query: update t01 set name='jojo' where code>2
    *************************** 2. row ***************************
    server: 192.168.100.101
    ts: 2018-11-19 18:14:44
    thread: 10
    txn_id: 0
    txn_time: 26
    user: admin
    hostname: localhost
    ip:
    db: db01
    tbl: t01
    idx: PRIMARY
    lock_type: RECORD
    lock_mode: X
    wait_hold: w
    victim: 0
    query: update t01 set name='kaka' where code>2
    2 rows in set (0.00 sec)


    ---------------------------------------------------------------------------


    vim pt-deadlocks-logger.cnf

    host=192.168.100.101
    port=3306
    user=admin
    password=admin

    tab
    log=/root/test/pt-deadlocks.log
    daemonize
    interval=3

    pt-deadlock-logger --config pt-deadlocks-logger.cnf

    在后台长久运行,检测死锁,记录到文件里,以配置文件运行。


    ---------------------------------------------------------------------------

    总结:

    在检查数据库是死锁信息的时候,又多了一个选择。
    该工具也是通过show engine innodb status的信息来计算的。
    在mysql 5.6.2中,innodb_print_all_deadlocks这个设置可以看到死锁的情况。

    victim就是回滚的事务为 1

    wechat: nick753159 qq: 417966852 email: nzq42@qq.com base: shanghai
  • 相关阅读:
    spring之aop概念和配置
    netty概念
    maven使用实例记录
    maven概念
    Runtime.getRuntime().addShutdownHook
    aop前传之代理
    实例化bean的三种方式
    easyui datagrid treegrid 取消行选中、取消高亮
    sqlserver 保存 立方米(m³)
    sqlserver 备份集中的数据库备份与现有的 'XXX' 数据库不同。
  • 原文地址:https://www.cnblogs.com/cyberbit/p/pt-deadlock-logger.html
Copyright © 2011-2022 走看看