已定位出线上 MySQL 出现了慢查询,该怎么在线处理呢?

2019-11-21 23:27:17 +08:00
 amos15

如题,前提是 [已定位] 出了慢查询,要在不重启 MySQL 和关联的应用程序的情况下解决这个问题

5222 次点击
所在节点    MySQL
13 条回复
Jemini
2019-11-21 23:41:58 +08:00
不应该是抓写那个查询的人出来祭天吗😹
hanxiV2EX
2019-11-21 23:58:51 +08:00
加索引
crclz
2019-11-22 00:13:36 +08:00
如果慢查询出现在索引、表结构,那么要看当前版本的 mysql 是否支持不停机建索引。

如果慢查询是因为不好的 sql 语句:
假设应用程序有 n 个实例(n>=2),记现在服务端程序的版本为 v1。
现在将解决了慢查询问题的服务端 v2 开发写出来。然后将 v1 实例逐个替换成 v2。
如果只有一个实例,那么请开多个实例。
weo0
2019-11-22 07:37:09 +08:00
@hanxiV2EX 数据量大,不停机加索引,不会出问题吗,我司有一次就是有一个同事不停机加索引崩了……
realpg
2019-11-22 08:00:47 +08:00
针对那一条查询,DBA 和写的码农一起诊断
是否能在数据库段优化,是否影响业务
如果不能在数据库端优化,那就更改逻辑拆分成简单有效查询
l8g
2019-11-22 09:13:25 +08:00
这种情况只能看看能不能调整索引。
不停机的话要看表的数据量和读写压力,否则业务高峰期进行的话有一定风险。
我司调整索引一般是在凌晨没有什么请求量的情况下进行。
当然如果显然是 SQL 写的效率低的话,更好的做法是肯定是修改代码重新发布,应用如果有多个实例的话影响也不会非常大。
lihongjie0209
2019-11-22 09:13:38 +08:00
你这个要求就像在线修复 BUG 一样
b821025551b
2019-11-22 09:13:55 +08:00
别无脑加索引,数据量大会把机器搞死掉的
fuyufjh
2019-11-22 12:46:36 +08:00
@weo0 MySQL 5.7 开始 Add Index 就支持 Online 了。只要别在负载太高的时候做就行。
amos15
2019-11-22 20:45:18 +08:00
@crclz @realpg @l8g @b821025551b @fuyufjh @realpg 谢谢哈
是昨天被问到的,答了表索引索引设计不当,SQL 语句,连接数,MySQL 选错索引,QPS 等方面原因,对应的解决方法和工具也分别答了,大致和大神们说的差不多,同时也提到了慢查询的检查和定位方案等,但是对方好像还在期待更好的解决方案
amos15
2019-11-22 20:45:48 +08:00
@Jemini 难道这就是终极方案Σ( ° △ °|||)︴
amos15
2019-11-22 20:49:06 +08:00
@fuyufjh online DDL 是 5.6 版本就有的,这个我觉得应该是一个比较常规的操作,早期主要通过 copy-trigger-rename 的方式也答了
amos15
2019-11-22 20:53:06 +08:00
查了下资料,5.7 的有插件可增加 rewrite query 方案,8.0 的增加了线上加 column 的操作,如果真是想问这里的话我觉得有点过了
可能还是因为停留在了操作层和 server 层,没深入到引擎原理层去答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX