Mysql 踩坑及优化笔记

Mysql 踩坑及优化笔记

Q: server has gone away

排查方向:

  1. 查看 server 端的 wait_timeout
1
mysql> show global variables like '%timeout%';
  1. client 端使用连接池,并把连接池的超时检测值设置为小于 wait_timeout 的值。

Q: 使用了 order by limit 语句导致查询慢

排查方向:

  1. 查看执行计划
1
explain select ...
  1. 检查 session 数,是不是有太多并发连接
1
mysql> show processlist;
  1. 变更 sql 语句
1
2
3
4
5
6
SELECT * FROM large ORDER BY id LIMIT 10000, 30 

-- 变更为 (id加到条件里)
SELECT * FROM large WHERE id > 10000 ORDER BY id LIMIT 30 
-- 或
SELECT * FROM large WHERE id >=(SELECT id FROM large ORDER BY id LIMIT 10000, 1) ORDER BY id LIMIT 30