pt-deadlock-logger
是 Percona Toolkit 中的一个工具,它用于记录 MySQL 中的死锁信息。这个工具可以帮助 DBA 或开发者监控和分析死锁,从而优化数据库性能和应用逻辑。
使用示例
-
输出数据库死锁日志信息到文件中:
你可以使用pt-deadlock-logger
将死锁信息输出到一个日志文件中。例如,通过crontab
每分钟运行一次,输出到日志文件中:pt-deadlock-logger --log=/var/log/deadlock.log --check --daemonize
这个命令会将死锁信息记录到
/var/log/deadlock.log
文件中,并且通过--daemonize
参数让pt-deadlock-logger
在后台运行。 -
将死锁信息输出到中心数据库的表中:
如果你希望将死锁信息输出到一个中心数据库的表中,可以创建一个表来存储这些信息,并使用pt-deadlock-logger
来填充这个表:CREATE TABLE deadlocks ( server char(20) NOT NULL, ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 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, 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;
然后使用以下命令将死锁信息输出到中心机的表中:
pt-deadlock-logger h=localhost,u=root,p=pass,S=/data/mysql/mysql.sock --dest h=localhost,u=msandbox_rjw,p=pass,S=/tmp/mysql_sandbox8026.sock,P=8026,D=test,t=deadlocks
这个命令会将死锁信息记录到
test
数据库的deadlocks
表中。 -
运行
pt-deadlock-logger
并创建死锁表:
如果你还没有创建死锁表,可以使用--create-dest-table
参数来创建它:pt-deadlock-logger --create-dest-table --dest D=test,t=deadlocks u=root,p=pass
这个命令会在指定的数据库中创建一个
deadlocks
表,并开始记录死锁信息。