MySQL服务器创建stock_view视图成功后phpMyAdmin无法打开且查询无响应
MySQL视图服务器端查询无响应排查步骤
1. 排除Web层干扰,直接验证MySQL层面执行情况
首先通过SSH登录服务器,直接在MySQL命令行执行操作,排除Apache、phpMyAdmin层面的问题:
- 执行命令登录MySQL:
mysql -u 你的数据库账号 -p,输入密码后进入对应业务库 - 先执行视图的执行计划分析:
EXPLAIN SELECT * FROM stock_view;- 若执行计划显示扫描行数达十万级以上、关联字段无可用索引,说明是服务器基表数据量远大于本地环境,视图查询性能不足导致超时,和
proxy_read_timeout参数无关
- 若执行计划显示扫描行数达十万级以上、关联字段无可用索引,说明是服务器基表数据量远大于本地环境,视图查询性能不足导致超时,和
2. 校验视图定义与依赖资源合法性
- 执行
SHOW CREATE VIEW stock_view;,对比服务器和本地的视图定义是否完全一致,排查迁移过程中表名、字段名写错的问题 - 检查视图依赖的所有基表,确认当前数据库账号对所有基表有
SELECT权限,部分权限限制场景会导致查询挂起而非直接返回报错 - 单独查询所有依赖基表:分别执行
SELECT COUNT(*) FROM 基表名,排查是否存在单张基表损坏、被锁导致查询卡住的问题
3. 定位MySQL运行态问题
- 执行
SHOW PROCESSLIST;,触发视图查询后观察对应线程的状态:- 若状态为
Locked:说明有其他长事务占用了基表的写锁,导致查询阻塞,杀掉对应阻塞事务线程即可恢复 - 若状态为
Sending data:确认是查询本身性能不足,需要优化视图关联逻辑、为关联条件、过滤条件的字段加索引
- 若状态为
- 开启慢查询日志:执行
SET GLOBAL slow_query_log = 'ON';,设置慢查询阈值为1秒后重新触发视图查询,确认请求是否被记入慢查询日志
4. 快速验证方案
若需要快速确认是否为全量查询性能问题,可执行SELECT * FROM stock_view LIMIT 10;测试,若加Limit后能快速返回结果,即可确定是全量查询性能不足导致的超时,后续按需做索引优化或拆分视图逻辑即可。
内容的提问来源于stack exchange,提问作者Hai Tien
相关产品推荐
相关产品推荐

