如何查看运行 MySQL 的 Amazon Relational Database Service (Amazon RDS) 数据库实例的服务器活动?
解决方法
您可以使用服务器活动来帮助确定性能问题的根源。您可以查看 InnoDB 存储引擎的状态、识别正在运行的查询或查找数据库实例上的死锁。
您必须拥有 MySQL PROCESS 服务器管理权限才能查看 MySQL 数据库实例上运行的所有线程。如果您没有管理权限,那么 SHOW PROCESSLIST 仅显示与您正在使用的 MySQL 账户关联的线程。您还必须拥有 MySQL PROCESS 服务器管理权限才能使用 SHOW ENGINE。并且,您需要有 MYSQL PROCESS 服务器管理权限才能查看有关 InnoDB 存储引擎状态的信息。
要查看数据库实例的服务器活动,请执行以下步骤:
1. 为 MySQL 数据库实例开启常规和慢速查询日志。
2. 连接到运行 MySQL 数据库引擎的数据库实例。
3. 运行如下命令:
SHOW FULL PROCESSLIST\G
SHOW ENGINE INNODB STATUS\G
**注意:**要查看每个语句的不止前 100 个字符,请使用 FULL 关键字。
4. 查看哪些事务处理正在等待以及哪些事务处理阻止正在等待的事务处理。根据您正在运行的 Amazon RDS for MySQL 版本来运行以下命令之一:
对于版本 5.6 和 5.7:
SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, b.trx_query blocking_query FROM information_schema.innodb_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;
对于版本 8.0
ON r.trx_id = w.requesting_engine_transaction_id;INNER JOIN information_schema.innodb_trx r
ON b.trx_id = w.blocking_engine_transaction_id
INNER JOIN information_schema.innodb_trx b
FROM performance_schema.data_lock_waits w
b.trx_query blocking_query
b.trx_mysql_thread_id blocking_thread,
b.trx_id blocking_trx_id,
r.trx_query waiting_query,
r.trx_mysql_thread_id waiting_thread,
r.trx_id waiting_trx_id,
**注意:**最佳做法是以短暂的连续间隔(例如,60 秒)收集这些输出。查看多个输出可以更广泛地了解引擎的状态。这有助于您解决性能问题。
相关信息
监控 Amazon RDS 实例中的指标