如题,前提是 [已定位] 出了慢查询,要在不重启 MySQL 和关联的应用程序的情况下解决这个问题
1
Jemini 2019-11-21 23:41:58 +08:00 via iPhone 2
不应该是抓写那个查询的人出来祭天吗😹
|
2
hanxiV2EX 2019-11-21 23:58:51 +08:00 via Android
加索引
|
3
crclz 2019-11-22 00:13:36 +08:00
如果慢查询出现在索引、表结构,那么要看当前版本的 mysql 是否支持不停机建索引。
如果慢查询是因为不好的 sql 语句: 假设应用程序有 n 个实例(n>=2),记现在服务端程序的版本为 v1。 现在将解决了慢查询问题的服务端 v2 开发写出来。然后将 v1 实例逐个替换成 v2。 如果只有一个实例,那么请开多个实例。 |
5
realpg 2019-11-22 08:00:47 +08:00
针对那一条查询,DBA 和写的码农一起诊断
是否能在数据库段优化,是否影响业务 如果不能在数据库端优化,那就更改逻辑拆分成简单有效查询 |
6
l8g 2019-11-22 09:13:25 +08:00
这种情况只能看看能不能调整索引。
不停机的话要看表的数据量和读写压力,否则业务高峰期进行的话有一定风险。 我司调整索引一般是在凌晨没有什么请求量的情况下进行。 当然如果显然是 SQL 写的效率低的话,更好的做法是肯定是修改代码重新发布,应用如果有多个实例的话影响也不会非常大。 |
7
lihongjie0209 2019-11-22 09:13:38 +08:00
你这个要求就像在线修复 BUG 一样
|
8
b821025551b 2019-11-22 09:13:55 +08:00
别无脑加索引,数据量大会把机器搞死掉的
|
10
amos15 OP |
12
amos15 OP @fuyufjh online DDL 是 5.6 版本就有的,这个我觉得应该是一个比较常规的操作,早期主要通过 copy-trigger-rename 的方式也答了
|
13
amos15 OP 查了下资料,5.7 的有插件可增加 rewrite query 方案,8.0 的增加了线上加 column 的操作,如果真是想问这里的话我觉得有点过了
可能还是因为停留在了操作层和 server 层,没深入到引擎原理层去答 |