V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
amos15
V2EX  ›  MySQL

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

  •  
  •   amos15 · 2019-11-21 23:27:17 +08:00 · 5385 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2019-11-22 20:53:06 +08:00
    Jemini
        1
    Jemini  
       2019-11-21 23:41:58 +08:00 via iPhone   ❤️ 2
    不应该是抓写那个查询的人出来祭天吗😹
    hanxiV2EX
        2
    hanxiV2EX  
       2019-11-21 23:58:51 +08:00 via Android
    加索引
    crclz
        3
    crclz  
       2019-11-22 00:13:36 +08:00
    如果慢查询出现在索引、表结构,那么要看当前版本的 mysql 是否支持不停机建索引。

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