本总结来自美团内部分享,屏蔽了内部数据与工具

知识准备

索引

  • 索引是存储引擎用于快速找到记录的一种数据结构
  • B-Tree,适用于全键值,键值范围或键最左前缀:(A,B,C): A, AB, ABC,B,C,BC
  • 哪些列建议创建索引:WHERE, JOIN , GROUP BY, ORDER BY等语句使用的列
  • 如何选择索引列的顺序:
    1. 经常被使用到的列优先
    2. 选择性高的列优先:选择性=distinct(col)/count(col)
    3. 宽度小的列优先:宽度 = 列的数据类型

慢查询

原因

  1. 未使用索引
  2. 索引不优
  3. 服务器配置不佳
  4. 死锁
  5. ...

命令

看版本

mysql -V 客户端版本 select version 服务器版本

explain 执行计划,慢查询分析神器
  • type

    • const,system: 最多匹配一个行,使用主键或者unique进行索引
    • eq_ref: 返回一行数据,通常在联接时出现,使用主键或者unique索引(内表索引连接类型)
    • ref: 使用key的最左前缀,且key不是主键或unique键
    • range: 索引范围扫描,对索引的扫面开始于某一点,返回匹配的行
    • index:以索引的顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描
    • all: 全表扫描 no no no
  • extra
    • using index : 索引覆盖,只用到索引,可以避免访问表
    • using where: 在存储引擎检索行后再做过滤
    • using temporary:使用临时表,通常在使用GROUP BY,ORDER BY 时出现(严禁)
    • using filesort: 到非索引顺序的额外排序,当order by col未使到索引时发生(严禁)
  • possible_keys: 显示查询可能使用的索引
  • key:优化器决定采用哪个索引来优化对该表的访问
  • rows:MySQL估算的为了找到所需行要检索的数,优化选择key的参考 (不是结果集的行数)
  • key_len: 使用的索引左前缀的长度(字节数),亦可理解为使用了索引中哪些字段
    • 定长字段,int占4个字节、date占3个字节、timestamp占4个字节,char(n)占n个字节
    • NULL的字段:需要加1个字节,因此建议尽亮设计为NOT NULL
    • 变长字段varchar(n),则需要 (n * 编码字符所占字节数 + 2 、)个字节,如utf8编码的, 个字符
      占 3个字节,则 度为 n * 3 + 2
  • 强制使用索引: USE INDEX (建议)或 FORCE_INDEX (强制)

show 命令

  • show status

    • 查看select语句的执行数 show global status like 'Com_select';
    • 查看慢查询的个数 show global status like 'Slow_queries';
    • 表扫描情况 show global status like 'Handler_read%'; Handler_read_rnd_next / com_select > 4000 需要考虑优化索引
  • show variables
    • 查看慢查询相关的配置 show variables like 'long_query_time';
    • 将慢查询时间线设置为2s set global long_query_time=2;
    • 查看InnoDB缓存 show variables like 'innodb_buffer_pool_size';
    • 查看InnoDB缓存的使用状态 show status like 'Innodb_buffer_pool_%'; 缓存命中率=(1-Innodb_buffer_pool_reads/ Innodb_buffer_pool_read_requests) * 100%;缓存率=(Innodb_buffer_pool_pages_data/ Innodb_buffer_pool_pages_total) * 100%
    • SHOW PROFILES;该命令可以trace在整个执行过程中各资源消耗情况(会话级)
    • SHOW PROCESSLIST; 查看当前有哪些线程正在运行,并且处在何种状态
    • SHOW ENGINE INNODB STATUS; 可用于分析死锁,但需要super权限

MySQL问题排查工具介绍的更多相关文章

  1. 转 MySQL问题排查工具介绍

    原文链接: http://mrchenatu.com/2017/03/24/mysql-tool/ 本总结来自美团内部分享,屏蔽了内部数据与工具 知识准备 索引 索引是存储引擎用于快速找到记录的一种数 ...

  2. 简要介绍Apache、php、mysql安装和工具介绍

    1 安装Apache 网站:www.Apache.org下载相应的Apache,目前下载了近期的:httpd-2.2.15-win32-x86-openssl-0.9.8msi 安装简要步骤如下图: ...

  3. MySQL之IDE工具介绍及数据备份

    一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...

  4. MySQL数据库----IDE工具介绍及数据备份

    一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...

  5. 十三、MySQL之IDE工具介绍及数据备份

    一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...

  6. mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)

    一.概述 物理备份和恢复又分为冷备份和热备份.与逻辑备份相比,它最大优点是备份和恢复的速度更快.因为物理备份的原理都是基于文件的cp. 1.1 冷备份 冷备份就是停掉数据库服务.这种物理备份一般很少使 ...

  7. MySQL Flashback 工具介绍

    MySQL Flashback 工具介绍 DML Flashback 独立工具,通过伪装成slave拉取binlog来进行处理 MyFlash 「大众点点评」 binlog2sql 「大众点评(上海) ...

  8. MySql点点滴滴(一)之可视化工具介绍

    以下的文章主要介绍的是10个可以简化开发过程的MySQL工具,其中包括MySQL Workbench.phpMyAdmin.Aqua Data Studio,以及SQLyog与MYSQL Front等 ...

  9. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

随机推荐

  1. C++ 内连接与外连接 (转)

    啥叫内连接 外连接 我们知道编译的时候(假如编译器是VS),是以源文件cpp文件为单位,编译成一个个的obj文件,然后再通过链接器把不同的obj文件链接起来. 简单的说,如果一些变量或函数的定义是内连 ...

  2. python socket 详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  3. 关于mysql 间隙锁

    前段时间系统老是出现update死锁,很是纠结.经过排查发现是间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围.间隙锁的主要作用是为了防止出现 ...

  4. 关于document.cookie的使用

    设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次 ...

  5. sqlserver: 使用While 示例

    declare @i intset @i = 1999while(@i<2009)begin declare @sql varchar(8000) set @sql = 'update    d ...

  6. 2015年传智播客JavaEE 第168期就业班视频教程11-导入配置文件

    资源文件放在Source Folder目录下面,这个目录同样会编译到classes目录下 web.xml的 <listener> <listener-class>org.spr ...

  7. ios Https问题

    HTTPS认证过程:   ① 浏览器发送一个连接请求给安全服务器.   ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.   ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA ...

  8. 获取openid回调两次

    解决了好久,请教了各路大神也没找到解决方案. 最后灵感一现,是不是参数顺序问题?按照官网示例的先后顺序从新调用了一次,回调一次,成功解决. 官网文档:https://mp.weixin.qq.com/ ...

  9. c语言字符串指针

    最近正在看c语言,在指针这块遇到了麻烦,特别是字符串指针这块,简单记录下. 字符串指针 void main() { char *p = "tasklist"; printf(&qu ...

  10. 使用mybatis提供的各种标签方法实现动态拼接Sql。这里演示where标签和if标签实现使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录。

    1.需求: 使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录. 2.在UserMapper接口中定义方法: public List<User> findU ...