通过information_schema查询MySQL的锁定状态。
注意:MySQL版本必须>=5.1
如果看不到INNODB_LOCKS表,请用SHOW VARIABLES检查innodb_version变量。如果没有看到这个变量,说明你还没有使用InnoDB插件,你需要他。如果你看到了这个变量但没有那些表,那么你需要确保服务器配置文件的plugin_load设置中明确包括了那些表,详情请查阅MySQL用户手册。
下面的查询显示了谁阻塞和谁在等待,以及等待了多久:
SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, TIMESTAMPDIFF( SECOND, r.trx_wait_started, CURRENT_TIMESTAMP ) wait_time, r.trx_query waiting_query, l.lock_table waiting_table_lock, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, SUBSTRING( p. HOST, 1, INSTR(p. HOST, ':') - 1 ) blocking_host, SUBSTRING(p. HOST, INSTR(p. HOST, ':') + 1) blocking_port, IF (p.COMMAND = 'Sleep', p.TIME, 0) idel_in_trx, 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 INNER JOIN information_schema.INNODB_LOCKS l ON w.requested_lock_id = l.lock_id LEFT JOIN information_schema. PROCESSLIST p ON p.ID = b.trx_mysql_thread_id ORDER BY wait_time DESC\G
下面查询显示了多少查询被哪些线程阻塞:
SELECT CONCAT('thread ' , b.trx_mysql_thread_id , ' from ' , p.host) as who_blocks, IF(p.command = "Sleep", p.time, 0 ) as idle_in_trx, MAX(TIMESTAMPDIFF(SECOND, r.trx_wait_started, NOW() )) as max_wait_time, COUNT(*) as num_waiters FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS AS w INNER JOIN INFORMATION_SCHEMA.INNODB_TRX AS b ON b.trx_id = w.blocking_trx_id INNER JOIN INFORMATION_SCHEMA.INNODB_TRX AS r ON b.trx_id = w.requesting_trx_id LEFT JOIN INFORMATION_SCHEMA.PROCESSLIST AS p ON p.id = b.trx_mysql_thread_id GROUP BY who_blocks ORDER BY num_waiters DESC\G
相关推荐
### MySQL 5.7 Information Schema概述 MySQL 5.7 中的 `Information Schema` 是一个虚拟数据库,存储了关于数据库元数据(如表定义、列属性等)的信息。这一架构对于系统管理员和开发者来说非常重要,因为它提供了...
5. **查看当前锁状态**:`information_schema.innodb_locks`用于显示当前所有的锁定信息。 6. **查看锁等待情况**:`information_schema.innodb_lock_waits`展示被阻塞的事务和它们等待的锁。 7. **详细锁等待信息...
可以通过查询`INFORMATION_SCHEMA.INNODB_TRX`表来查看当前活跃的事务信息,包括事务的状态、开始时间、等待锁的信息等。 示例查询语句: ```sql SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; ``` 该查询可以...
- **性能监控**:通过性能_schema和information_schema数据库,监控MySQL的运行状态,调整配置以优化性能。 - **权限管理**:合理分配用户权限,遵循最小权限原则,防止不必要的安全风险。 - **索引优化**:根据...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动...
Oracle的动态性能视图(如V$视图)提供了深入的系统状态和性能数据,而MySQL的相关信息则主要通过SHOW命令或INFORMATION_SCHEMA查询获取。 在SQL优化上,Oracle和MySQL的执行计划机制有所不同。Oracle的执行计划...
WHERE table_schema NOT IN ('information_schema', 'mysql') AND data_free > 0; ``` 此查询返回的结果中,`data_free`列显示了每个表中未使用的空间大小(单位为字节),可以帮助我们识别哪些表存在较多的碎片...
MySQL 5.7引入了对性能监控的重大改进,特别是通过performance schema和sys schema的优化,使得数据库管理员能够更深入地了解系统性能,并有效地进行故障排查和优化。以下是对这两个关键特性的详细介绍: **1. ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL ...
information_schema:提供关于所有数据库、表、列、索引等元数据信息,是查询数据库结构的标准接口。 mysql:存储MySQL自身的系统信息,如用户权限、服务器配置、事件调度等。 performance_schema:自MySQL 5.5...
`或查询`information_schema.PROCESSLIST`视图也可以提供当前数据库实例中的活动进程信息,包括每个进程的ID、状态、所占用的时间以及正在执行的SQL语句。 在MySQL中,有一些关键概念需要理解: 1. **Database**:...