
如题,前提是 [已定位] 出了慢查询,要在不重启 MySQL 和关联的应用程序的情况下解决这个问题
1 Jemini 2019-11-21 23:41:58 +08:00 via iPhone 不应该是抓写那个查询的人出来祭天吗 |
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 PRO 针对那一条查询,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 层,没深入到引擎原理层去答 |