Daily Archives: Пятница, Август 7, 2015

Как включить протоколирование DEADLOCK в MySQL?

В основном, я всем советую использовать Percona вместо MySQL, это более быстрый форк, если выразиться кратко. Далее, как обычно, дело идет за тюнингом БД, но об этом я расскажу в других статьях, сейчас остановимся на протоколировании DEADLOCK, потому как дедлоки могут принести много проблем при работе вашего сайта.

Если у нас используется Percona, то ставим pt-deadlock-logger:

wget percona.com/get/percona-toolkit.rpm
yum localinstall percona-toolkit-2.2.4-1.noarch.rpm

Подключаемся к MySQL и создаем таблицу deadlocks в базе test:

mysql> use test;
mysql> CREATE TABLE deadlocks (
        server char(20) NOT NULL,
        ts datetime NOT NULL,
        thread int unsigned NOT NULL,
        txn_id bigint unsigned NOT NULL,
        txn_time smallint unsigned NOT NULL,
        user char(16) NOT NULL,
        hostname char(20) NOT NULL,
        ip char(15) NOT NULL, -- alternatively, ip int unsigned NOT NULL
        db char(64) NOT NULL,
        tbl char(64) NOT NULL,
        idx char(64) NOT NULL,
        lock_type char(16) NOT NULL,
        lock_mode char(1) NOT NULL,
        wait_hold char(1) NOT NULL,
        victim tinyint unsigned NOT NULL,
        query text NOT NULL,
        PRIMARY KEY  (server,ts,thread)
      ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec)

Теперь запускаем pt-deadlock-logger:

pt-deadlock-logger localhost -uroot -p'password' --dest D=test,t=deadlocks --daemonize --run-time 12h --interval 30s

За более подробной документацией можно обратиться на оффициальный сайт: http://www.percona.com/doc/percona-toolkit/2.1/pt-deadlock-logger.html