欢迎光临
我们一直在努力

双工检查是什么3、MySQL索引原理与使用原则

我唯一知道的就是我一无所知——苏格拉底

 

MySQL的删除:https://blog.csdn.net/weixin_34462581/article/details/113010258

MySQL的安装:参考官网https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

MySQL的资源:https://dev.mysql.com/downloads/file/?id=484922

MySQL密码忘记(异常失效):https://www.jb51.net/article/127281.htm

  • 检查端口3306是否被占用
  • 如果已经安装过MySQL,并且需要重新安装,需要前之前安装的完全卸载。包含mysql相关的文件夹、文件,尤其注意其配置文件/etc/my.cnf必须要删掉
  • 按照官网安装即可

netstat -tunlp | grep 3306 

  • 安装完成之后,记得把用户角色的远程访问权限改一下(localhost->%)

 

1.3.1、密码意外丢失

 

  • 描述一条查询语句的执行流程,什么模块做了什么事情
  • 记录redo log和bin log,为什么要要用XA两阶段提交?如果redo log直接写入成功,bin log写入失败,会出现什么问题?

 

2.2.1、MySQL服务的基本概念

我们的数据是存储在服务端,我们使用的工具(eg: navicat)是客户端。如果要读取数据,首先要建立客户端与服务端的连接, 服务端运行3306的端口,客户端会连接到3306。其次两端必须要规范协议,消息报文格式等。

2.2.1.1、连接方式 :

  • 长连接(连接一直保持打开,也就是说可以被其他会话、客户端复用。这样可以减少创建和释放连接的消耗,但会消耗服务端的性能),一般这是种通用方式。
  • 短连接(客户端操作完后,连接马上close)

 

查看连接数:

   SHOW GLOBAL STATUS LIKE 'Thread%';

客户端跟服务端建立一个连接,对服务端来讲就是创建一个线程来处理连接。所以查Thread就是查连接数。这个命令可以差大已经缓存的连接数、已经建立的连接数、已创建的连接数、运行中的连接数

image.png

2.2.1.2、如何在客户端查询相关配置

  • 举例:长连接过多久不活动会被释放掉?
-- 连接的超时时间
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';   -- 非交互式超时时间(没有界面的),如JDBC程序
SHOW GLOBAL VARIABLES LIKE 'interactive_timeout'; -- 交互式超时时间,如数据库工具(单位秒,一共8个小时,如果需要加快回收速度,可以调小这个值)
-- 允许的最大连接数(并发线程数)
SHOW GLOBAL VARIABLES LIKE 'max_connections';

效果:

image.png

  • 问题:这些变量在哪找?

https://dev.mysql.com/  官网下文档里系统预设变量可查到。

image.png

 

image.png

 

2.2.1.3、如何更改相关配置

系统中的变量有两个级别session、global:

    • session是会话级别,作用域只在当前会话,如果会话的生命周期结束,那么当前session中的配置也会失效。举例:SHOW VARIABLES LIKE 'max_connections' 默认的是当前会话的级别。
    • global是全局级别

 

修改有两种方式 :

    • 动态修改
    • 配置文件永久修改 /etc/my.cnf

 

此处以动态配置举例:

  • 第一步: SHOW VARIABLES LIKE 'autocommit'; 看到是ON

image.png

  • 第二步: SET autocommit = off; 在当前会话将ON改为OFF
  • 第三步:SHOW VARIABLES LIKE 'autocommit'; 在当前会话再查一次,看到是OFF。

image.png

  • 第四步:SHOW VARIABLES LIKE 'autocommit'; 新开一个会话再查一次,看到还是ON。因为这里的修改是session级别,修改只作用于当前会话,所以再打开一个页面查询还是ON。

image.png

  • 第五步:总结,当前到操作是session级别,只在当前会话生效。如果要在所有的会话都生效,要在语句中加上global

`SHOW GLOBAL VARIABLES LIKE 'autocommit';`

 

2.2.2、补充说明

  • 通信协议

TCP/IP   Unix Socket

MySQL的通讯协议文件:/var/lib/mysql.socket

 

  • MySQL用的是半双工

由于是半双工的模式,客户端和服务器的数据接收和发送不能同时进行,必须要等待一个操作全部执行完毕之后才可以下一个操作。因此,一条sql做大量数据的查询,会带来网络和服务的消耗,所以单条sql尽量小粒度的查询,比如带上查询条件(limit,或者业务层代码写一个循环进行分批的查询)。

 

 

2.3.1、查询缓存

MySQL8之前,mysql服务提供数据的缓存(改配置默认是关闭的),目的是将查询到的结果以key-value的形式缓存起来,如果下一次遇到同样的查询,便可以省去从磁盘获取数据导致的开销,以提升吞吐量。

MySQL8已经取消了查询缓存:

一种说法是不建议使用查询缓存,因为查询缓存往往弊大于利。缓存的级别是针对于表的,而不是针对于语句的,如果表中有任意一行数据变化,都会把整个表的缓存清空。所以不建议在数据库的服务端开启缓存。这样,查询缓存的失效会非常频繁,只要有对一个表的更新,这个表上的所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务有一张静态表,很长时间更新一次,比如系统配置表,那么这张表的查询才适合做查询缓存。

有观点认为,大多数应用都把缓存做到了应用逻辑层,简单的如一个map的mybatis,复杂的可以用redis或者memcache,直接操作内存远远比走网络访问快,所以mysql直接抛弃了查询缓存。

 

2.3.2、解析环节

2.3.2.1、解析器

解析器分为:

    • 词法解析,把sql语句打碎成一个一个的单词,包含关键字、变量、符号
    • 语法解析,分析语法是否符合规则,比如左边有括号,右边一定要有对称的括号。

(注:词法和语法解析是非常基础且常见的功能,比如jvm、json等有会有用到。世面上也已经有比较好的开源的工具)

 

2.3.2.1、预处理器(得到解析树)

image.png试想一下:

select * from 不存在的表; 由于表不存在会报错,又或者 select b.* from user a; 由于别名不存在报错。

那么是在解析时报错,还是执行的时候报错呢?

上一节我们知道解析器解析的是词法和语法,如果要解析校验数据库里有哪些表,表里有哪些字段,就要把表的信息存储起来。那么预处理器就是干这个的。

 

预处理器的作用:

    • 权限
      • 操作的权限,不允许的ip的访问
      • 用户的权限,只读的权限不能写
    • 语义的解析
      • 表名、字段名、别名错误的识别

 

2.3.3、优化器

对语句进行优化,优化查询效率

2.3.3.1、概念

解析树的本质:一种可以被执行器执行的数据结构。

那么在解析环节生成的解析树是否可以直接交给执行器执行了呢?或者说客户端发送的一条SQL语句是不是一定是服务端执行的SQL语句呢?

事实上,一条SQL语句是有多种执行方式(路径)的。MySQL服务层有一个基于成本(cost)的模型算法进行计算,找到代价最小的路径,执行器最终执行的路径便是进过优化器筛选后的路径。

 

2.3.3.2、查看执行成本: SHOW STATUS LIKE 'last_query_cost';

image.png

 

2.3.3.3、优化器可以做什么事情

举例:

    • 当a join b,在数据库的底层没有办法同时读取几张表,一定是先访问一张表拿到一些数据,再基于这些数据访问另一张表达到过滤数据的目的。所以关联查询时,必然要决定先查询哪张表,这张表就是基准表。基准表的决定需要优化器判断。
    • 条件查询where a = ? and b < ? and c > ?,每一个字段都有索引的时候,既有单列的索引,又有复合索引,它需要决定要不要使用索引,使用哪几个索引。
    • 当出现1 = 1恒等式,或者((()))多余的括号,优化器可以自动去掉。

 

但优化器的优化作用是有限的,不能全部依赖优化器。

经过优化器的选择,最终会生成一条执行计划。

 

2.3.4、执行计划(优化器的执行结果,或者叫数据结构)

执行计划的工具,查看执行路径

EXPLAIN SELECT * FROM people;

EXPLAIN FORMAT = JSON SELECT * FROM people;

OPTIMIZE trace; -- 执行计划的开关,信息量非常的大

 

举例:sql语句最终选定的执行计划

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
            "query_cost": "0.65"    -- 总开销
    },
    "table": {
      "table_name": "people",       -- 查哪张表
      "access_type": "ALL",         -- 查询的范围
      "rows_examined_per_scan": 4,  -- 预估要查多少行
      "rows_produced_per_join": 4,  -- 实际查询多少行
      "filtered": "100.00",
      "cost_info": {                    -- 开销明细
        "read_cost": "0.25",
        "eval_cost": "0.40",
        "prefix_cost": "0.65",
        "data_read_per_join": "448"
      },
      "used_columns": [
        "id",
        "name"
      ]
    }
  }
}

2.3.5、执行器

执行器按照查询计划调用存储引擎,执行查询

 

2.3.6、存储引擎

2.3.6.1、概念

我们表面上看到的是数据放在了一个二维表结构里(类比excel),但我们用用navicat等工具查询对象信息时看到存储的表类型是InnoDB,表类型就是存储引擎。并且存储引擎的使用单位是表,而不是以数据库为单位,这意味着表的存储引擎还可以更改。

image.png

2.3.6.2、sql查数据库中所有的表都使用了什么存储引擎,SHOW TABLE STATUS FROM hc_goods;

(注:没有指定存储引擎的表都会默认使用InnoDB。)

image.png

2.3.6.3、表类型是存储引擎,存储引擎是一种存储方式,那么在服务器上是怎么体现的呢?

查看数据库在服务器上位置: SHOW VARIABLES LIKE 'datadir';

image.png

来到服务器,可以看到表在服务上是一个文件,且存储引擎,其文件类型(后缀)不同,此处仅体现了InnoDB的idb文件

image.png

 

2.3.6.4、数据库支持哪些存储引擎, SHOW ENGINES;

image.png

2.3.7、总结

MySQL分为服务层和存储引擎层。客户端以各种方式建立连接,在服务层又分为解析环节、优化器、缓存,在存储引擎层有各种可用的存储引擎,最终数据在硬件的文件系统。

image.png

 

image.png

InnoDB最初是第三方公司针对MySQL开发的,其自身的存储引擎是ISAM。

2.4.1、官方网站列举的存储引擎

image

 

2.4.2、MySQL 8.0支持的存储引擎

image.png

  • InnoDB:MySQL 8.0中的默认存储引擎。 InnoDB是用于MySQL的事务安全(兼容ACID)的存储引擎,具有提交,回滚和崩溃恢复功能来保护用户数据。 InnoDB行级锁(行锁是更小粒度的锁,无需升级为更粗粒度的锁)和Oracle风格一致支持读写的并发的操作,可提高并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键查询的I / O。为了保持数据完整性, InnoDB还支持FOREIGN KEY完整性约束。有关更多信息InnoDB,请参见 第15章,InnoDB存储引擎
  • MyISAM:这些表占用的空间很小。 表级锁定 限制了读/写运行负载中的性能,因此表锁通常用于Web和数据仓库配置中的只读或主要工作负载中。
  • Memory:将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中进行快速访问。该引擎以前称为HEAP引擎。它的使用场景正在减少;InnoDB使用其缓冲池内存区域,提供了一种通用且持久的方式来将大多数或所有数据保留在内存中,并 NDBCLUSTER为大型分布式数据集提供了快速的键值查找。
  • CSV:其表实际上是带有逗号分隔值的文本文件。CSV表使您可以导入或转储CSV格式的数据,以便与读取和写入相同格式的脚本和应用程序交换数据。由于CSV表未建立索引,因此通常InnoDB在正常操作期间将数据保留在表中,并且仅在导入或导出阶段使用CSV表。
  • Archive:存档的,没有索引的表旨在用于存储和检索大量很少使用的历史数据,归档或安全审核信息。
  • Blackhole:Blackhole存储引擎可以接受但不存储数据,类似于Unix/dev/null设备。查询总是返回一个空集。这些表可用于将DML语句发送到副本服务器的复制配置中,但源服务器不保留其自己的数据副本。
  • NDB(也称为 NDBCLUSTER):此集群数据库引擎特别适合于需要尽可能高的正常运行时间和可用性的应用程序。
  • Merge:使MySQL DBA或开发人员能够在逻辑上对一系列相同的MyISAM表进行分组并将它们作为一个对象引用。适用于VLDB环境,例如数据仓库。
  • Federated:提供了链接单独的MySQL服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合于分布式或数据集市环境。
  • Example:此引擎作为MySQL源代码中的示例,说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的 “存根”。您可以使用此引擎创建表,但是不能在其中存储数据或从中检索数据。

 

2.4.3、为什么要设计这么多存储引擎?

如上节所述,因为有不同的业务场景,对数据的管理和需求是不一样的。所以诞生了各种各样的存储引擎。

如果上述存储引擎没有一个能满足需求,怎么办?MySQL提供自定义存储引擎的接口。可以自定义一套存储引擎。

 

2.5.1、执行过程

服务层:

1、client的查询请求来查询缓存,如果缓存有,则直接返回。

2、解析器进行词法、语法解析。

3、预处理器判定权限、表、字段、别名是否有错。

4、优化器,选择开销最小的路径

5、执行计划,选择后的执行路径

6、执行器执行执行计划调用存储引擎,做查询

存储引擎层:

1、引擎读取磁盘的数据文件,将数据交给执行器。执行器把数据写入缓存,并且返回给客户端(如果有缓存放到缓存,如果没有缓存直接返回给客户端)。    

image.png

Mybatis源码的执行器Executor只有doQuery和doUpdate。MySQL也是一样的,update就包含了增删改。与查询不同的是,当从存储引擎拿到数据之后,将数据加载到内存(因为数据在磁盘里,只有将数据加载到内存中才能修改操作)

 

问题:

是不是需要操作多大的数据,就要一次性从磁盘加载多少数据到内存?比如需要操作5kb的数据,就一定要加载5kb的数据到内存?

我们知道磁盘的IO读写相对内存是非常慢,在加上这些数据可能在磁盘上分布在不同的位置,意味着很多次寻址、很多次IO操作,这将非常的耗时。

 

2.6.1、page

预读取(为解决上述问题),当访问到磁盘的一块位置,就认为周围的数据也会被读取,所以会读取一个固定大小的范围(意味着,可能要比想读取的数据大一些),单位page(页,逻辑单位),在InnoDB默认是16kb(注意区别,与操作系统中从磁盘加载到内存的大小4kb是两码事),如果想修改,只能修改源码,重新编译部署。

 

每一次对于页的操作也需要从磁盘上加载到内存中,会不会也有IO很慢的问题,那么能不能缓存起来呢,下一次就不用从磁盘中读了?当然可以,InnoDB里有内存的缓存池(buffer pool),从磁盘加载数据到内存中时,会将数据记录在buffer pool中,下次再读时可以直接从buffer pool拿到数据,提升数据的读写效率。如果需要修改(先读再写)的数据以及在内存的buffer pool中存在了,会先修改内存中的数据page。如果内存中的page与磁盘的page不一样,则内存中的page叫dirty page(脏页,产生本质是刷脏时间差和事务没有提交)。一旦后台线程开始空闲,就将脏页数据刷到磁盘文件中,又叫刷脏。

 

2.6.2、redo log

因为刷脏不是实时的,如果buffer pool的内容还没有刷到磁盘,这个时候数据库重启了或者宕机了,那么怎么保证缓冲池中数据页的安全性?没有好的办法,必须要考虑持久化,InnoDB内存数据页持久化的机制是redo log(重做log),当数据加载到内存中时,也会记录在redo log中。当数据库宕机重启后,会依据redo log里的脏页恢复到磁盘文件中,在InnoDB中叫做crash safe(崩溃恢复),并且事务中ACID中的D(持久性,durability)就是靠redo log实现的。

 

redo log为了提升日志的读写效率,也分为两块,内存和磁盘中各有一块。

2.6.2.1、redo log在磁盘上体现为什么样的文件,在安装目录下/var/lib/mysql

image.png

查询redo log SHOW VARIABLES LIKE '%innodb_log%'; 当然,这些都是可修改的。

image.png

为什么客户的更新现在内存缓冲池和redo log写一遍,再写到磁盘数据文件。为什么不直接写到磁盘?

记录redo log文件和磁盘数据文件有区别,在于既可以保证数据的安全性,还可以减少磁盘刷盘寻址的时间以降低开销,提升了吞吐量。

顺序IO,写入redo log是追加的过程,不需要寻址

随机IO,每一次都有寻址的时间

 

redo log的特点:(注意redo log的存在不是为了向数据文件写入数据,只是作为崩溃恢复时使用)

1、redo log是InnoDB独有的

2、redo log是物理日志,记录的是数据页里面做的修改,是绝对的

3、redo log的大小是固定的,不断覆盖,写入方式如下

image.png

2.6.2、undo log(撤销日志、回滚日志。redo log是物理日志,undo log是逻辑日志)

记录的是事务(增删改)发生之前数据状态,如果在增删改过程中发生了异常,则会基于undo log回滚事务,保证了原子性(全部成功,,全部失败)

image.png

undo log相关的参数: SHOW VARIABLES LIKE '聮'; 

image.png

 

2.6.3、一条更新语句是如何执行的

redo log + undo log配合使用

1、存储引擎层负责从RAM或DISK拿到数据,返回给服务Server层

2、修改这一行数据

3、记录undo log、redo log

4、调用存储引擎的接口,在内存buffer pool中修改数据page

5、commit

 

redo log两阶段的记录prepare、commit(跟XA的两阶段提交没有任何关系)

image.png

 

 

image

 

 

2.7.1、MySQL sever层也有一个日志文件binlog(逻辑日志—记录的是相对的操作)

  • 记录的是DDL,DML语句,在哪个数据页的哪条数据做个什么样的改动。
  • 没有固定大小限制,内容可追加(binlog用于数据恢复,而redo log只能做崩溃恢复,就是因为,内容不可追加,之前的数据会被覆盖)
  • Server层实现,可以被所有存储引擎使用
  • 用于数据恢复和主从复制

作用:

1、主从同步

2、实现数据的恢复。既然记录的是增删改语句的逻辑日志,从最晚的一次全量备份的时间,解析binlog,把drop的语句剔除掉后,将其他的DDL、DML重新执行一遍

 

 

redolog是prepare,binlog无记录。回滚,因为数据的事务是以binlog为准的。

redolog是prepare,binlog有记录。而数据本身的事务没有commit,则会利用binlog的记录恢复事务,将事务提交。

 

2.7.2、主从同步的原理(扩展)

image.png

1、从节点的I/O Thread请求读取主节点的binlog

2、主节点的Log Dump Thread把数据发给从节点

3、从节点解析后写入中继日志

4、SQL Thread读取中继日志的数据

5、将解析后的SQL在从节点的DB中重放(重新执行)一遍

 

 

 

 

数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快熟查询、更新数据库表中数据。

没有数据库时,要查找一条数据,需要进行全表的扫描,类似从一本没有目录的书里找到指定的章节。而索引就相当于给书加了一份目录。

image.png

3.1.1、索引类型

normal,没有任何限制

unique,要求字段的值不重复

主键索引,是unique的一种特例,在unique的基础上要求不能为空

Full text,全文索引。

如果我们在表设计时用text存放大文本,日后需要用关键字模糊查询匹配的记录,如何解决?    

    • like '%关键字%'
    • 建立全文索引,语法:select * from fulltext_test where match(列名) against ('关键字' )
      • MATCH (col1, col2,…) AGAINST (expr [search_modifier])  — where条件后使用
      • 但这不是合适的办法,用ES更优

 

3.1.2、索引存储结构

InnoDB显示支持的索引结构只有B+Tree(虽然有hash类型的索引结构,但只是在InnoDB buffer pool隐式的使用,由于hash key-vlaue的本质和hash冲突的先天短板,因此不能做范围查询和大批量数据的命中,其作用仅限为小批量数据的快速查找——O(1))。

 

3.1.2.1、各数据结构如果作为索引选型的区别

旧金山大学数据结构可视化网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

 

分析一下,其他数据结构为什么不合适。

  • 有序数组

没错有序数组检索很快,但是索引的增删改

  • 链表

链表增删改很快,但检索复杂

  • BST——Binary Search Tree,二叉查找树

没错BST的确可以快速查找和快速变更。但为什么不选择BST呢?假如,按照大小顺序,有序的构建二叉查找树数,我们会发现所谓的BST变成了一个单链表,以这种特殊场景为例,极端情况下,BST检索的复杂度是O(n)。所以BST不适合做索引。

image.png

  • AVL Tree——Balance Binary Search Tree(平衡二叉查找树。发明人名字的简写是AVL,所以又叫AVL Tree

AVL的特点是:左右子树的深度差的绝对值不能超过1。所以AVL避免了BST变成单链表的问题。

image.png

看来似乎已经能满足索引的基本要求了,那么我们假定使用AVL做索引来分析可能会出现什么问题。

设定每个节点(node),包含三块数据:键值、数据的物理地址、指向左右子节点的指针,构建索引的数据如下图:

image.png

问题:

    • 索引的内容本质上是通过存储引擎放到磁盘上,比对时要把各节点(Node=Page 16KB)的内容拿到server层比较,也就是说需要比对多少节点就要发生多少次IO。那么我们来看AVL,一个数据就是一个Node,如果对大量数据做索引,会导致AVL的深度很高,这也意味着要比对的节点很多,因此IO的次数也多,导致浪费性能。
    • MySQL的数据读取单位是page,一个page是16KB,显然在当前Node的设定(键值、物理地址、左右子树指针)是远远达不到16KB,所以会很浪费空间,且导致树的深度过高。

结论:

AVL不是索引数据结构的最好选择。

 

  • B Tree——Balanced Tree(B 树,多路平衡查找树

如果page多放点节点的内容(放多个键值;放更多的指针。或者说把AVL变成分更多岔的树),是不是就解决了AVL的2个问题:1、page浪费;2、深度过高。

B Tree的特点:度=关键字数+1执行分裂、合并保证B树的平衡(索引中也是Page的分裂和合并)

举例:

比如有关键字a、b,且a<b,则子树指针指向关键字的区间为(-∞,a),(a,b),(b,+∞)

B Tree比AVL更适合做索引的数据结构,那么我们假定使用B Tree做索引来分析可能会出现什么问题。

设定每个节点(node),包含三块数据:键值、数据的物理地址、指向各子节点的指针,构建索引的数据如下图:

image.png

还不够完美,问题:

    • 范围查找时,需要反复遍历树,效率低下。
    • 每次检索需要比较的Node次数不同(IO次数不同),效率不稳定。【注,假如我们知道每次查询都会比较的次数为N,且某一次查询比较的次数是n,如果n=N,可以确定的是一定成功】

 

 

  • B+ Tree——B Plus Tree(加强版多路平衡查找树)

B+ Tree的特点:度=关键字数;(B树是:度=关键字数+1)。

举例:

比如有关键字a、b、c,且a<b<c,则子树指针指向关键字的区间为[a,b),[b,c),[c,+∞)

 

image.png

跟B树不同的地方:B树的度=关键字数+1,B+树的度=关键字数,因此同样数量的数据构建出的索引结构,相比B+树的深度更低,深度低意味着更少的比较次数,等于进一步降低IO的次数。

B+树在索引数据结构的使用中,只有叶子节点才放物理地址(永远在叶子节点,这样每次IO的次数是固定的,且是可预知的)。并且叶子节点的page和page之间有双向指针(让叶子节点形成了有序的链表结构),便于范围查询(排序)。如果没有这个双向指针,将会多次遍历才能找到一个范围。

 

3.1.2.2、为什么选择B+Tree

  • B Tree能解决的问题,B+Tree都能解决

B Tree解决了什么问题:AVL(平衡二叉查找树)对page容量的浪费、深度过高。减少了比对次数(比对时,需要存储引擎层将数据page加载到内存,然后由MySQL服务层执行比对),同样减少了IO操作。增加了性能。

  • 扫库、扫表能力更强

叶子节点page页的双向链表,在范围查找或全量查询时,不用对数做多余的遍历。

  • 磁盘读写能力更强
  • 排序能力更强
  • 效率更加稳定
    • 每次的比较次数都是可预期
    • 由于物理地址都在叶子节点,不会出现AVL、B Tree时,有的在深度为1时完成查询,有的在深度为n时结束查询的问题。所以效率稳定。

 

3.1.3、特殊的索引方法——Hash

3.1.3.1、hash索引简介

特点:

k-v形式(如下图),时间复杂度=O(1),也因此我们在表中看起来顺序排列的数据,经过散列后分布在磁盘上是乱序的,所以不支持排序和范围查询。只能做k=?的查询

hash天生的缺陷:

hash冲突,需要用额外的方式解决,但也增加了复杂度,如再hash法、链地址法。

image.png

 

3.1.3.2、hash索引在InnoDB中的使用

在InnoDB中是不能使用hash建立索引的(存储引擎选用MEMORY时可以支持hash索引),亲手验证一下:

  • 保存前,注意索引方法是HASH

image.png

  • 保存后,索引方法会自动变为BTREE

image.png

但InnoDB的确隐式的使用了hash做索引,在哪里用的呢?回到InnoDB的架构图(红框数据缓冲池),为提升内存缓存池的热点数据页的访问速度,InnoDB自动建立的hash索引,是无法人为干涉的。

image.png

3.1.4、补充

为什么索引不考虑红黑树?

这么多定义约束,目的是:最长的路径不超过最短路径的2。

如果选为数据库索引的数据结构,检索的次数是不固定的,同理导致IO次数不固定,因此也可以说效率不稳定。

 

3.2.1、不同存储引擎的存储文件

3.2.1.1、MyISAM

主键索引

image.png

 

辅助索引

image.png

主键索引辅助索引都在索引的文件

 

3.2.1.2、InnoDB,索引即数据

image.png

聚簇索引:索引键值逻辑顺序与表数据行的物理顺序一致。因此,主键索引一定是聚簇索引,其他的索引都叫二级索引英文字典,第一个字母是第一个索引

一张表没有主键

 

3.2.1.3、聚集索引和二级索引

image.png

每个InnoDB表都有一个特殊的索引,称为聚簇索引 ,用于存储行数据。通常,聚簇索引与主键同义 。为了从查询,插入和其他数据库操作中获得最佳性能,您必须了解InnoDB如何使用聚簇索引为每个表优化最常见的查找和DML操作。

  • 在表上定义一个PRIMARY KEY时,InnoDB将其用作聚簇索引。你要为创建的每个表定义一个主键。如果没有逻辑唯一且非空的列或列集,请添加一个新的 自动递增 列,其值设为自动填充。
  • 如果您没有为表定义PRIMARY KEY,当所有列都是NOT NULL 时,MySQL会在所有键列所在的位置找到第一个UNIQUE的索引,并将其用作 InnoDB的聚集索引。
  • 如果表即没有索引PRIMARY KEY也没有合适的 UNIQUE索引,则InnoDB 在内部生成一个隐藏的聚集索引GEN_CLUST_INDEX,该索引是包含行ID值的合成列 。这些行按照InnoDB分配给该表中各行的ID排序 。row_id是一个6字节的字段,随着插入新行而单调增加。因此,按行ID排序的行实际上是按物理顺序排序。如下图所示(如果有主键,则以主键作为rowId,下图便是这种情况)

image.png

InnoDB的表里是不可能没有索引的(索引即数据,数据即索引)。

聚集索引如何加快查询

通过聚集索引可以快速访问行,因为检索索引可以直接到达该行的page数据页。如果表很大, 当与索引记录中使用不同page页保存数据的其他存储结构比较时,聚集索引体系结构通常可以节省磁盘I / O操作 。

二级索引如何与聚簇索引建立联系

除聚集索引之外的所有索引都称为 辅助索引。在InnoDB中,辅助索引中的每个记录都包含该行的主键列,以及为辅助索引指定的列。 InnoDB使用此主键在聚集索引中搜索行。

如果主键很长,则辅助索引将使用更多空间,因此设置较短的主键是有利的。

image.png

只有在主键索引的叶子节点才上存储完整的数据,辅助索引的叶子节点存的是主键的值。

要使用辅助索引查找数据,要先在辅助索引的B+Tree检索一遍得到主键索引的值,然后再主键索引的B+Tree再检索一遍才能得到最终的数据。所以,辅助索引的效率要比主键索引的低。

InnoDB只有一个文件(xxx.ibd),所以主键索引的B+Tree、其他所有辅助索引的B+Tree都在这个文件上。

 

问题:辅助索引的叶子节点,为什么放的是主键索引的值,而不是数据的物理地址?

原因:上文索引的数据结构有说过,B+Tree和B Tree一样是依靠page的分裂、合并保证树的平衡,Page页的变化,即等于物理地址的变化,显然不可行。

image.png

选择合适字段:频繁被where、order等做为条件的字段。

3.3.1、列的离散度

离散度公式:count(distinct(column_name)) : count(*),即某一列不重复的值除总行数,简而言之,选择值重复低的列。

如下图所示,如果索引值的重复率太高(离散度低),再检索索引时,与根节点比较后,因为子节点都一样,无法抉择下一轮是与哪个子节点比较,这样的代价非常大。极端情况下,还不如把整个表都比较一遍,此时存储引擎甚至会放弃使用索引。

image.png

 

3.3.2、联合索引

3.3.2.1、概念

创建name+phone联合索引:ALTER TABLE people ADD INDEX `comidx_name_phone` (`name`, `phone`);

构建所得索引的数据结构如下

 image.png

顺序建立包含a、b、c三个列的联合索引,功能上相当与建立了a、ab、abc三个索引。因此,使用联合索引要求最左匹配原则,参考下图。如果不是按照创建字段的顺序使用,则达不到使用联合索引的目的。

image.png

 

3.3.2.2、问题:如下sql,哪些能用到索引:

  • EXPLAIN SELECT * FROM people WHERE `name` = '张三' AND phone = '100';   显然可以,查询条件完全符合联合索引的字段,且满足最左匹配原则。

image.png

  • EXPLAIN SELECT * FROM people WHERE phone = '100' AND `name` = '张三';  可以。虽然查询条件符合联合索引的字段,但不满足最左匹配原则。但是优化器会自动调整条件的顺序,达到使用联合索引的目的。

image.png

  • EXPLAIN SELECT * FROM people WHERE `name` = '张三';  可以,联合索引的最左匹配原则,相当于建立了一个name的索引。

image.png

  • EXPLAIN SELECT * FROM people WHERE phone = '100';   不满足最左匹配原则。

image.png

3.3.2.3、假如有如下场景,应该如何创建索引

第2个就够了,由于联合索引的最左匹配原则,相当于额外获得了name的索引,因此没必要创建多余的name索引

 

3.3.3、覆盖索引

3.3.3.1、什么是回表?

上文提过,在使用辅助索引时:

第一步、查辅助索引得到主键索引的值。

第二步、利用主键索引的值去查主键索引得到数据。

其中第二步便是“回表”。

image.png

3.3.3.2、什么是覆盖索引?

要查询的数据列,已经包含在所用到的索引里。

比如,创建了name的索引,然后select name from people where name = ?,这个查询操作在辅助索引的Tree上就能实现,不需要回表,这就叫覆盖索引。

举例,已创建了name+phone的联合索引,下列查询哪些是覆盖索引?

image.png

  • EXPLAIN SELECT NAME FROM people WHERE `name` = '张三';  

— 可以,辅助索引的Tree能满足查询

  • EXPLAIN SELECT NAME FROM people WHERE `name` = '张三' AND phone = '100';

— 可以

  • EXPLAIN SELECT NAME FROM people WHERE phone = '100';

— 可以,优化器的操作,的确不符合最左匹配原则,但如果不用联合索引,就要从主键索引里查,既然两个索引的树都能查到name,从概率上讲,联合索引的tree的开销更小

  • EXPLAIN SELECT * FROM people WHERE `name` = '张三';

— 不可以,虽然联合索引上存在name=张三,但没有其他数据,还是要回到主键索引的树去查

 

3.3.4、sql索引使用常识

  • 表的索引越全越好,因为不管什么情况都能用到索引,对吗?

不对

1、占用磁盘。索引也是数据结构,需要使用存储空间保存。

2、更新数据变慢,会发生大量的索引结构的调整。

  • 为什么不要在性别字段上建索引?

离散度低,做索引时开销大

  • 模糊查询like abc%,like %abc%,like %abc都用不到索引?
    • like abc%,可以,索引的最左前缀。
    • like %abc%,like %abc,不一定,当索引条件下推时会使用(ICP–Index Condition Push Down)。

我们知道获取数据是在存储引擎层,过滤、排序、比较等逻辑操作在server层。

当用不到索引的条件(比如like条件)先在存储引擎层过滤时开销更小时,会把这条件先在存储引擎过滤,叫做索引条件下推。

举例:

image.png

  • 不要使用select *,写明具体的查询字段。
    • 用不到覆盖索引
  • 负向的查询!=、<>、NOT IN、NOT LIKE能否用到索引?
    • NOT LIKE,不能

image.png

    • !=、<>、NOT IN,可以

image.png

用不用索引,是由基于成本的优化器(Cost Based Optimizer)决定的。

 

3.3.5、长字段如何建索引

长字段建立索引,1、page页的容量更小,大量数据时比较的次数多,IO多。2、索引占用大量磁盘空间。

  • 可以截取定长字段建立索引
  • 也可对该字段做hash运算,再用hash字段做索引

 

3.3.6、为嘛推荐使用递增的id作为主键索引?雪花算法?

InnoDB使用的是聚集索引,数据记录在主键索引的叶子节点上,且叶子节点是彼此链接且顺序排列。如果使用递增主键,对于主键索引的B+Tree,每新增一个主键,对于B+Tree的构建,其page页的分裂与合并对于包含数据的子节点,只需在最后一个page后续上当前需要插入的页,在物理结构上是相对连续的,有益于磁盘的使用效率。如果是非自增的随机主键,主键索引叶子节点page页和非叶子节点的page的分裂与合并也是随机的,造成更大的IO开销。

1、主键自增时,会按照顺序写满每一个页。而主键随机时,必然会发生插入已经写满的page页,将导致大量的page的分裂合并的开销

2、为什么是主键索引

3、相对其它互斥的主键索引占用的空间小

image.pngimage.png

  • 问题1:事务的特性原子性,隔离性,持久性是通过什么技术实现的?

原子性,借助undo log,实现回滚,达到全部失败的目的。没有异常就全部成功。

隔离性,利用事务的隔离机制,解决数据并发读取的问题。为了保证数据读取的一致性,使用LBCC和MVCC(仅有RR和RC使用)技术对数据库加锁。

持久性,数据库崩溃时利用redo log和双写缓冲,保证事务能够恢复,

  • 问题2:三种事务并发带来的问题,与四种事务隔离级别的关系。

三种问题分别是脏读、不可重复读、幻读。

四种隔离级别是未提交读、已提交读、可重复度、序列化。

RU:事务未提交的数据对其他事务是可见的,未解决任何并发问题。

RC:事务开始后能看见其他事务已提交的的修改,解决了脏读,但会出现不可重复读。

RR:在同一事务中多次读取同样的数据结果是一样的,解决了脏读和不可重复读。在InnoDB中由于RR的MVCC技术中使用了间隙锁,该锁本身就对插入阻塞,所以不存在幻读的情况。

Serializable:事务中最高的隔离级别,强制事务串行执行。虽然有效抑制了并发问题的发生,但极大影响并发度。所以,一般不使用。

数据库事务的场景,增删改,@Transaction、xml、AOP

维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(前文说过,page也是逻辑单位,是不可拆分的),由一个有限的数据库操作序列构成。

两个关键点:

  • 它是数据库最小的工作单元,是不可以再分的(所有的 CUD 操作都是事务,即使单条 SQL)
  • 它可能包含了一个或者一系列的DML语句,包括 insert delete update。(单条DDL(create drop)和 DCL(grant revoke)也会有事务)

 

哪些存储引擎支持事务,InnoDB,NDB(一个集群的存储引擎),也是5.5之后放弃MyISAM的诱因

image.png

4.2.1、事务的四大特性:

  • 原子性,Atomicity 最小的逻辑单位,事务的多个DML作为一个整体,不可分隔执行。对数据库的一系列的DML操作,要么都成功,要么都失败。

实现原理,在InnoDB中依赖 undo log(记录的是事务(增删改)发生之前数据状态)回滚,将数据恢复到原来的版本。

 

  • 一致性 Consistency,指的是数据完整性的约束不会被破坏,事务执行的前后都是合法的数据状态。

完整性约束包含:数据库自身的完整性约束(比如主键必须是唯一的,字段长度符合要求),用户自定义的完整性约束(通常在代码中控制)。(账户A-100,B+50,转账A0-50,B0+50)

 

  • 隔离性 Isolation,各事务是个逻辑单位,包含多个dml,事务之间,的dml语句并发执行,互相不干扰。在数据库里面会有很多的事务同时去操作同一张表或者同一行数据,必然会产生一些并发或者干扰的操作,那么我们对隔离性的定义,就是这些很多个的事务,对表或者行的并发操作,应该是透明的,互相不干扰的。

 

  • 持久性 durability,事务提交成功,写入到磁盘后状态应该是永久的。即使数据库中途崩溃(崩溃恢复redo log)、重启后恢复到之前的状态

双写缓冲,重要特性。页的备份

image.png

image.png

操作系统的page是4k,数据库的page是16k。当数据从内存向磁盘写时,需要写4个操作系统的page才能写完。假设写完第一个page时数据库崩溃,那么16k的数据库页也仅被写入了4k,如果崩溃,再恢复由于page已经不完整,所以不能再写入。所以要把数据库页做个备份,叫双写缓冲。

 

原子性、隔离性、持久性都是为了实现一致性。

 

4.2.2、数据库如何开启一个事务

SELECT VERSION();   -- 查看数据库版本

SHOW VARIABLES LIKE '%ENGINE%'; -- 查看存储引擎

SHOW GLOBAL VARIABLES LIKE 'tx_isolation';  -- 查看事务隔离级别

 

如何开启事务?

  • 单条增删改,自动开启,自动提交。如果结果不提交,是个在内存里脏数据。

SHOW VARIABLES LIKE 'autocommit';  -- 查看是否开启自动启用事务 

  • 手动开启  
    • BEGIN;
    • START TRANSACTION;
-- BEGIN;   -- 开启事务
START TRANSACTION; -- 开启事务,这两种都可以用,但start命令可用更多的参数
UPDATE people SET `name` = '张三123' WHERE id = 1;
ROLLBACK;   -- 回滚
-- COMMIT;  -- 提交

 

如果事务执行一半,会话断开,事务回滚。

事务结束的时候,事务所持有的锁就会释放。

 

 

4.2.3、事务并发问题

只要涉及增删改都会有事务,时时刻刻会有很多事务在执行。事务并发操作同一行数据,就会导致并发问题,隔离性怎么实现?(不要跟事务隔离级别混淆)

事务并发问题:

  • 脏读,读到了另一事物未提交的结果,重点是未提交被读到。

事务A有两次读操作,先读到age=16,事务B执行更新(事务尚未结束,数据还在内存中),事务A再次读取到age=18。即事务A读到事务B尚未提交的数据。

P1 ("Dirty read"): SQL-transaction T1 modifies a row. SQL-transaction T2 then reads that row before T1 performs a COMMIT.

If T1 then performs a ROLLBACK, T2 will have read a row that was never committed and that may thus be considered to have never existed.

image.png

  • 不可重复度,在同一时间内,一样的查询语句先后读到是另一事物未提交和提交后的结果。重点是已提交导致两次读结果不一致。

事务A有两次读操作,先读到age=16,事务B执行更新并且事务提交,事务A再次读取到age=18。即事务A读到事务B提交后的数据。

P2 ("Non-repeatable read"): SQL-transaction T1 reads a row. SQL- transaction T2 then modifies or deletes that row and performs a COMMIT.

If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted.

image.png

  • 幻读,范围查询时,在其他事务插入的数据的前后,读的结果不同。

事务A先读到1条数据,事务B执行插入并且事务提交,事务A再次读取到2条数据。即事务A先后两次读到结果数不同。

P3 ("Phantom"): SQL-transaction T1 reads the set of rows N that satisfy some . SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the  used by SQL-transaction T1.

If SQL-transaction T1 then repeats the initial read with the same, it obtains a different collection of rows.

image.png

怎么区分脏读、不可重复读、幻读:

脏读:读到另一事物未提交的数据

不可重复读:在另一事物做delete、update且提交时,先后读到的数据不一样,影响的是精确查询的结果。

幻读:在另一事物做insert且提交时,先后读到的数量不一样,影响的是范围查询的数量。

 

4.2.4、事务隔离级别

事务并发的三大问题其实都是读一致性问题(明明是相同的查询操作,但是读到了不同的结果)。作为服务提供方,必须由数据库提供一定得事务隔离机制来解决,保证数据一致性的问题。所以,有数据库的专家达成共识联合制定了一个标准,建议数据库厂商一定程度上实现数据一致性的问题。

SQL92 ANSI/ISO标准:http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

__Table_9-SQL-transaction_isolation_levels_and_the_three_phenomena_

 

     _Level__________________P1______P2_______P3________________________

    | READ UNCOMMITTED     | Possib|e Possib|e Possible                |
    |                      |       |        |                          |
    | READ COMMITTED       | Not   | Possibl| Possible                 |
                             Possible

    | REPEATABLE READ      | Not   | Not    | Possible                 |
    |                      | Possib|e Possib|e                         |
    |                      |       |        |                          |
    | SERIALIZABLE         | Not   | Not    | Not Possible             |
    |______________________|_Possib|e_Possib|e_________________________|
    |                      |       |        |                          |

image.png

串行化,所有的事务都要排队执行,所以就不会再有事务隔离性可能出现的3种现象。缺点,极大降低数据库并发度。

 

在InnoDB默认的数据库事务隔离级别RR中,已经解决了幻读的问题,所以不需要用Serializable这么高的隔离级别,而且会带来较高的并发度。

怎么解决幻读的?使用了间隙锁,阻塞插入,所以避免幻读。

image.png

 

如果要解决读一致性问题,保证一个事务中前后两次读取的数据结果一致,实现事务隔离,应该怎么做?

方案:

  • 在读取数据前对其加锁,阻止其他事务对数据进行修改(LBCC–Lock Based Concurrency Control,基于并发控制的锁)。问题:为了读而阻塞了写,导致并发度降低。适合需要加锁的读(当前读),比如要求读取最新的数据。
  • 快照,生成一个数据请求时间点的一致性数据快照(SnapShot),并用这个快照来提供一定级别(语句级或事务级)的一致性读取(MVCC–Multi Version Concurrency Control,多版本的并发控制)

MVCC的思想,只能查找创建时间小于等于当前事务ID的(已提交的)数据,和删除时间大于都去哪干事务ID的行(或未删除)。

image.png

MVCC用在已提交读RC和可重复读RR,为什么在已提交读RC还会出现不可重复读幻读,:

RR的快照建立的时间是第一次查询的时候,所以未提交的事务和其后的事务都是不能看见的,

RC的快照建立的时间是当前select,所以能看见其他事务已提交的数据。具体的机制是两种隔离级别下的ReadView的差异。

 

简单单一的select是快照读

存在加锁的for update或DML的事务中select是当前读

官网InnoDB锁的介绍:https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html

4.2.1、行锁与表锁

image.png

4.2.1.1、行锁

  • 共享锁,又称读锁,简称S锁

指多个事务对于同一数据可以共享一把锁,都能访问到数据,但只能读不能改(如果修改,可能会发生死锁)。

加锁方式: SELECT * FROM people WHERE id = 1 LOCK IN SHARE MODE; 

释放锁方式:事务结束

验证:分别在两个会话里对同一行数据加锁,都能加锁成功

image.pngimage.png

  • 排他锁,又称写锁,简称X锁

排他锁不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的锁(共享锁,排他锁),只有获取到排他锁的事务能对数据行进行读取和修改。

加锁方式:

    • 自动:delete、update、insert默认加上X锁
    • 手动:SELECT * FROM people WHERE id = 1 FOR UPDATE;

释放锁方式:事务结束

验证:在会话1中,自动给改行数据加一个排他锁,在会话2中分别尝试加共享锁和手动排他锁都被阻塞,无法获取锁,需要手动停止。

image.pngimage.pngimage.png

  • 官网里的其他行级别的锁:意向共享锁(IS)/意向排他锁(IX)

意向锁是数据库存储引擎自己维护的,用户无法手动操作意向锁。

    • 意向共享锁(IS–Intention Shared Lock):指事务准备给数据行加共享锁,也就是说给数据行加共享锁前,必须先获得该表的IS锁(表级别的意向的共享锁)
    • 意向排他锁(IX–Intention Exclusive Lock):指事务准备给数据行加排他锁,也就是说给数据行加排他锁前,必须先获得该表的IX锁(表级别的意向的共享锁)

干嘛要锁定一张表呢?

事务要成功的给一张表加上表锁,前提必须是:没有其他任何事务已经锁定了该表的任意一行数据。

如何确认数据没有被加锁?比如全表扫描,一行一行确认没被加锁,但是并发场景下不可避免一行数据在扫描中途被加锁,显然是不可行的。意向锁就是解决这个问题的办法,相当于表是否被加行锁的标志,类比火车卫生间的灯,只要标识未被加锁便可以后续操作,提升了加锁的效率。

验证:会话1给数据行加排他锁, 存储引擎会自动锁表。会话2手动锁表被阻塞。

image.pngimage.png

锁的作用:解决资源竞争的问题。

锁住了什么:一行数据?一个字段?

4.3.1、锁的原理

  • 没有索引,两个会话,select … where name = 'a' for update和select … where name = 'b' for update先后执行后,发现会话2失败,证明是锁表。
  • 主键索引,两个会话,select … where id= 1 for update和select … where id= 2 for update先后执行后,发现都可以查询,证明是锁行。
  • 主键索引+唯一索引,两个会话,select … where id= 1 for update和select … where name = 'b' for update先后执行后,发现都可以查询,证明是锁行。

锁的是聚簇索引

1、没有索引为什么会锁表?

聚簇索引:主键索引、第一个唯一索引、rowId。当没有索引时加排他锁查询,需要全表扫描,因此会锁住所有的rowId。

2、通过唯一索引加锁,为什么会阻塞主键索引的加锁?

image.png

二级索引加锁,先会把name字段锁住,接着把id锁住

假设表里已有id=1、4、7、10的记录。即索引记录有1、4、7、10。由这四个存在的索引记录隔开的区间,叫间隙。由间隙组成的左开右闭的区间叫临键。

image.png

image.png

无论用的哪种查询(范围查询或者等值查询),只要没有命中任何一个索引,就会锁住两个记录之间的区间。查询的相同间隙锁(select … for update)不排斥,因为本来就没有数据,排斥也没有愿意。 但是排斥插入

image.png

image.png

 

  • Read Uncommited,不加锁。生产中不会用到。
  • Serializable,所有的select语句都会被隐式的转化为select … in share mode,会和update、delete互斥(因为是排他锁,排他锁存在时不允许有任何锁)。生产中不会用到。
  • image.png

 

 

 

 

优化从何入手?

image.png

硬件的优化,操作系统的配置:基于硬件的实际情况调优。

操作系统、数据库配置

架构层次,缓存,集群,读写分离,分库分表

image.png

客户端与服务端简历连接,可能有什么问题?

服务端:连接数不够,

image.png

回收连接时间太长,导致连接没有及时释放。(默认8个小时)

image.png

客户端:怎么减少从服务端获取的连接数?

不要每次执行一条sql语句时就去和服务端建立一个新的TCP连接。

连接池,用完之后将连接归还到连接池(不是close),便于其他业务使用,这种方法在并发程度不高的情况下,可以大大减少频繁创建和关闭连接的开销。(比如ali的Druid,Spring Boot的Hikari)

缓存,将查询到的数据,暂存在缓存中,减少对数据库的读。

集群,这种情况下要保证数据一致性的问题(重放bin log中的DML)。

image.pngimage.png

基于集群,实现读写分离

image.png

分库分表,数据量多大,数据库扛不住并发压力。

垂直分库,基于业务角度划分不同的库

image.png

水平分库,基于数据划分,一张表数据量过大,将一张表水平拆分成多个表。

image.png

5.2.1、哪些SQL语句慢?

5.2.1.1、slow query log,慢查询日志

(默认关闭,原因是在DML执行过程中要多记录一个日志,会消耗性能)

image.png

结果中/var/lib/mysql/mine-slow.log就是慢查询记录的文件。

执行时间多久的sql会被定义为慢查询语句记录到日志中(默认10秒)

image.png

动态修改set语句,重启就会失效,可以从服务器上修改配置文件/etc/my.cnf。

SHOW GLOBAL VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query%';

SET long_query_time = 0;                    -- 临时设置慢查询的条件是0秒
SET GLOBAL slow_query_log = ON;     -- 临时开启慢查询日志

SELECT * FROM people;

慢查询日志里能看到具体的sql、执行时间、操作的用户、IP、消耗时间、获取锁的时间、筛选了多少行、预计筛选多少行。

image.png

统计慢查询结果,系统自带了分析工具——mysqldumpslow

比如查询用时最多的2条语句: mysqldumpslow -s t -t 2 -g 'select' mine-slow.log

image.png

 

5.2.1.2、PROFILE

谷歌工程师提供的工具,默认是不开启的。

  • SHOW PROFILES; 看到的所有执行的时间。

image.png

  • SHOW PROFILE; 与DML连用,查看该DML语句在每一个环节所消耗的时间。

image.png

5.2.2、查看server层的运行信息

5.2.2.1、服务器状态信息SHOW STATUS;

image.png

也可以使用通配符,比如查询select一共执行多少次:(记录的是数据库每一次启动之后的情况,如果数据库重启则会被重置)

image.png

5.2.2.2、查看服务端线程的信息(对应的是客户端的连接)SHOW PROCESSLIST;

image.png

如果想杀死某个线程,可以使用KILL + ID;

image.png

其数据来源是MySQL的表,如下。所以也可以直接使用sql查表

image.png

5.2.2.3、查看存储引擎层的运行信息

SHOW ENGINE INNODB STATUS G;

mysql>show engine innodb status
+----------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Type           | Name           | Status                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
+----------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| InnoDB         |                | 
=====================================
2016-05-12 08:52:28 2b6142bc7700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 50 seconds   //最近50秒内每2秒的平均值
-----------------
BACKGROUND THREAD    //backgroup 线程
-----------------
srv_master_thread loops: 1332198 srv_active, 0 srv_shutdown, 64396 srv_idle
srv_master_thread log flush and writes: 1396594
----------
SEMAPHORES          // 信号量
----------
OS WAIT ARRAY INFO: reservation count 118146   //os wait 的信息 ,reservation count 表示InnoDB产生了多少次OS WAIT  
OS WAIT ARRAY INFO: signal count 186714        // 进行OS WAIT线程,接收到多少次信号(single)被唤醒,如果这个single数值越大,几十万或者几百万,可能是很多I/0等待或者是InnoDB争用问题(关于争用问题可能与OS调度有关,可以尝试减少innodb_thread_concurrency参数)
Mutex spin waits 1664035, rounds 4276317, OS waits 20348  // Mutex spin线程无法获取锁而进入Spin wait ,rounds是spin wait 进行轮询检查mutextes的次数,os wait 线程放弃spin-wait 进入挂起状态
RW-shared spins 302454, rounds 11667281, OS waits 69050   //RW-shared 共享锁,
RW-excl spins 83942, rounds 4021896, OS waits 28377       // RW-excl 排他锁
Spin rounds per wait: 2.57 mutex, 38.58 RW-shared, 47.91 RW-excl  

// 备注:要明白Innodb如何处理互斥量(Mutexes),以及什么是两步获得锁(two-step approach)。首先进程,
试图获得一个锁,如果此锁被它人占用。它就会执行所谓的spin wait,即所谓循环的查询”锁被释放了吗?”。
如果在循环过程中,一直未得到锁释放的信息,则其转入OS WAIT,即所谓线程进入挂起(suspended)状态。
直到锁被释放后,通过信号(singal)唤醒线程
Spin wait的消耗远小于OS waits。Spinwait利用cpu的空闲时间,检查锁的状态,
OS Wait会有所谓content switch,从CPU内核中换出当前执行线程以供其它线程使用。
你可以通过innodb_sync_spin_loops参数来平衡spin wait和os wait

------------------------
LATEST DETECTED DEADLOCK
------------------------
2016-05-11 18:52:09 2b6677e07700   //死锁发生的时间
*** (1) TRANSACTION:
TRANSACTION 495116414, ACTIVE 0.092 sec fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 14 lock struct(s), heap size 6544, 20 row lock(s), undo log entries 6
LOCK BLOCKING MySQL thread id: 870003 block 876753
MySQL thread id 876753, OS thread handle 0x2b6685903700, query id 315677415 10.168.152.132 dsc Searching rows for update
update aaaa
    set xxx=xxx+(-1)
    where id=412  and xxx+(-1)>=0   //显示第一个死锁的的第一个事务
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 558 page no 5 n bits 144 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116414 lock_mode X locks rec but not gap waiting
Record lock, heap no 17 PHYSICAL RECORD: n_fields 23; compact format; info bits 0 
 // 以上表示死锁发生时事务1等待的锁,事务想获得aaaa表的idx_aaaa_unique索引对应的X排他锁(Innodb的锁是与索引相关)
 0: len 8; hex 8000000000000001; asc         ;;
 1: len 2; hex 5748; asc WH;;
 2: len 8; hex 800000000000004b; asc        K;;
 3: len 8; hex 8000000000000002; asc         ;;
 4: len 8; hex 8000000000002725; asc       '%;;
 5: len 8; hex 8000000000000215; asc         ;;
 6: len 2; hex 5a50; asc ZP;;
 7: len 8; hex 4231363033313441; asc B160314A;;
 8: len 6; hex 00001d82e06a; asc      j;;
 9: len 7; hex 1d00000235151a; asc     5  ;;
 10: len 8; hex 800000000000019c; asc         ;;
 11: len 8; hex 8000000000000000; asc         ;;
 12: len 5; hex 9998da0000; asc      ;;
 13: len 5; hex 999f5a0000; asc   Z  ;;
 14: len 10; hex 5a303230323032303031; asc Z020202001;;
 15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc             ;;
 16: len 4; hex 80001b2f; asc    /;;
 17: len 7; hex 80000000000000; asc        ;;
 18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;
 19: len 22; hex 53493230313630343136303030303136333531313735; asc SI20160416000016351175;;
 20: len 5; hex 99992b1384; asc   +  ;;
 21: SQL NULL;
 22: len 5; hex 99994d7c8d; asc   M| ;;   

*** (2) TRANSACTION:  // 事务2的状态
TRANSACTION 495116394, ACTIVE 0.246 sec fetching rows
mysql tables in use 1, locked 1
17 lock struct(s), heap size 2936, 18 row lock(s), undo log entries 21
MySQL thread id 870003, OS thread handle 0x2b6677e07700, query id 315677426 10.168.152.132 dsc Searching rows for update
update aaaa
    set xxx=xxx+(-2)
    where id=430  and xxx+(-2)>=0
*** (2) HOLDS THE LOCK(S):  // 表示事务2获得的锁
RECORD LOCKS space id 558 page no 5 n bits 144 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116394 lock_mode X locks rec but not gap
Record lock, heap no 17 PHYSICAL RECORD: n_fields 23; compact format; info bits 0
 0: len 8; hex 8000000000000001; asc         ;;
 1: len 2; hex 5748; asc WH;;
 2: len 8; hex 800000000000004b; asc        K;;
 3: len 8; hex 8000000000000002; asc         ;;
 4: len 8; hex 8000000000002725; asc       '%;;
 5: len 8; hex 8000000000000215; asc         ;;
 6: len 2; hex 5a50; asc ZP;;
 7: len 8; hex 4231363033313441; asc B160314A;;
 8: len 6; hex 00001d82e06a; asc      j;;
 9: len 7; hex 1d00000235151a; asc     5  ;;
 10: len 8; hex 800000000000019c; asc         ;;
 11: len 8; hex 8000000000000000; asc         ;;
 12: len 5; hex 9998da0000; asc      ;;
 13: len 5; hex 999f5a0000; asc   Z  ;;
 14: len 10; hex 5a303230323032303031; asc Z020202001;;
 15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc             ;;
 16: len 4; hex 80001b2f; asc    /;;
 17: len 7; hex 80000000000000; asc        ;;
 18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;
 19: len 22; hex 53493230313630343136303030303136333531313735; asc SI20160416000016351175;;
 20: len 5; hex 99992b1384; asc   +  ;;
 21: SQL NULL;
 22: len 5; hex 99994d7c8d; asc   M| ;;

Record lock, heap no 59 PHYSICAL RECORD: n_fields 23; compact format; info bits 0
 0: len 8; hex 8000000000000001; asc         ;;
 1: len 2; hex 5748; asc WH;;
 2: len 8; hex 800000000000004b; asc        K;;
 3: len 8; hex 8000000000000002; asc         ;;
 4: len 8; hex 800000000000276a; asc       'j;;
 5: len 8; hex 80000000000002c2; asc         ;;
 6: len 2; hex 5a50; asc ZP;;
 7: len 9; hex 423136303231374341; asc B160217CA;;
 8: len 6; hex 00001d82e06a; asc      j;;
 9: len 7; hex 1d00000235169f; asc     5  ;;
 10: len 8; hex 80000000000001db; asc         ;;
 11: len 8; hex 8000000000000000; asc         ;;
 12: len 5; hex 9998a20000; asc      ;;
 13: len 5; hex 99a2600000; asc   `  ;;
 14: len 10; hex 5a303230323032303031; asc Z020202001;;
 15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc             ;;
 16: len 4; hex 80000772; asc    r;;
 17: len 7; hex 80000000000000; asc        ;;
 18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;
 19: len 22; hex 53493230313630343136303030303137333630353531; asc SI20160416000017360551;;
 20: len 5; hex 99992b1385; asc   +  ;;
 21: SQL NULL;
 22: len 5; hex 99994d7c8d; asc   M| ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED: // 表示事务2等待的锁
RECORD LOCKS space id 558 page no 4 n bits 152 index `idx_aaaa_unique` of table `test`.`aaaa` trx id 495116394 lock_mode X locks rec but not gap waiting
Record lock, heap no 63 PHYSICAL RECORD: n_fields 23; compact format; info bits 0
 0: len 8; hex 8000000000000001; asc         ;;
 1: len 2; hex 5748; asc WH;;
 2: len 8; hex 800000000000004b; asc        K;;
 3: len 8; hex 8000000000000002; asc         ;;
 4: len 8; hex 8000000000000065; asc        e;;
 5: len 8; hex 80000000000000a8; asc         ;;
 6: len 2; hex 5a50; asc ZP;;
 7: len 9; hex 423136303232314b41; asc B160221KA;;
 8: len 6; hex 00001d82e07e; asc      ~;;
 9: len 7; hex 2b000001d920ad; asc +      ;;
 10: len 8; hex 80000000000001c8; asc         ;;
 11: len 8; hex 8000000000000000; asc         ;;
 12: len 5; hex 9998aa0000; asc      ;;
 13: len 5; hex 99a2680000; asc   h  ;;
 14: len 10; hex 5a303230323032303031; asc Z020202001;;
 15: len 12; hex e5b9bfe4b89ce5b9bfe5b79e; asc             ;;
 16: len 4; hex 80000b14; asc     ;;
 17: len 7; hex 80000000000000; asc        ;;
 18: len 23; hex 50555243484153455f4f524445525f494e5f53544f434b; asc PURCHASE_ORDER_IN_STOCK;;
 19: len 22; hex 53493230313630343136303030303137333630353531; asc SI20160416000017360551;;
 20: len 5; hex 99992b1385; asc   +  ;;
 21: SQL NULL;
 22: len 5; hex 99994d7c8d; asc   M| ;;

*** WE ROLL BACK TRANSACTION (1)  // 表示选择了哪个事务回滚,避免无限期死锁等待
// innodb有一个内在的死锁检测工具,当死锁超过一定时间后,会回滚其中一个事务,innodb_lock_wait_timeout 
可配置死锁等待超时时间

------------
TRANSACTIONS  // 包含了InnoDB事务(transaction)的统计信息
------------
Trx id counter 495910498  // 当前的transaction id ,这是个系统变量,随着每次新的transaction产生而增加
Purge done for trx's n:o < 495910389 undo n:o < 0 state: running but idle  //正在进行清空的操作操作的transaction ID
History list length 2606  // 记录了undo spaces 内unpurged 的事务个数
//Purge的原则就是记录没有被其它事务继续使用了

LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 329193748744296, not started
MySQL thread id 909825, OS thread handle 0x2b6142bc7700, query id 325773092 10.143.34.172 dsc init
show engine innodb status
---TRANSACTION 329193658413160, not started
MySQL thread id 909832, OS thread handle 0x2b667d881700, query id 325773024 10.168.108.146 dsc cleaning up

.....此处省略...

---TRANSACTION 329194102134888, not started
MySQL thread id 886232, OS thread handle 0x2b6686c40700, query id 325769275 10.252.160.92 dsc cleaning up
--------
FILE I/O   // 显示了I/O  Helper thread d的状态,包含一些统计信息
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)  // 以上显示了I/O Helper thread的状态
Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,
 ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0 // 显示各个I/O Helper thread的pending operations,pending的log和buffer pool thread的fsync()调用
2531032 OS file reads, 61115257 OS file writes, 51279005 OS fsyncs  //显示了reads writes fsync() 调用次数
0.00 reads/s, 0 avg bytes/read, 46.64 writes/s, 39.30 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 3606, seg size 3608, 38466 merges 
// seg size 表示当前插入缓冲的大小为3608*16KB,大约为57728KB。free list len代表了空闲列表的长度,merges 表示合并次数
merged operations:
 insert 34642, delete mark 1008134, delete 0   //insert 插入的记录数,delete mark 打上的标记,delete 删除的次数
discarded operations:
 insert 0, delete mark 0, delete 0
AHI PARTITION 1: Hash table size 4980539, node heap has 161 buffer(s)
AHI PARTITION 2: Hash table size 4980539, node heap has 90 buffer(s)
AHI PARTITION 3: Hash table size 4980539, node heap has 225 buffer(s)
AHI PARTITION 4: Hash table size 4980539, node heap has 352 buffer(s)
AHI PARTITION 5: Hash table size 4980539, node heap has 3556 buffer(s)
AHI PARTITION 6: Hash table size 4980539, node heap has 4393 buffer(s)
AHI PARTITION 7: Hash table size 4980539, node heap has 3052 buffer(s)
AHI PARTITION 8: Hash table size 4980539, node heap has 145 buffer(s)
26.62 hash searches/s, 51.78 non-hash searches/s
---
LOG   // 记录了transaction log 子系统的信息
---
Log sequence number 264509449071   //显示当前log sequence number表示有多少字节写入到log文件内
Log flushed up to   264509449064   //显示已经被flushed(写入磁盘)的logs
Pages flushed up to 264509446093   
Last checkpoint at  264509412298   //显示最后一个checkpoint 的logs
0 pending log flushes, 0 pending chkp writes
27332545 log i/o's done, 16.22 log i/o's/second   // 显示pending log 的统计信息
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 20653670400; in additional pool allocated 0  // 显示分配给innodb 的内存大小,以及additional pool 使用的大小 (0表示没有使用)
Dictionary memory allocated 1905658
Buffer pool size   1228800 // buffer pool size > database pages 因为buffer pool size 还会存放lock index hash index 等一些其他系统信息
Free buffers       8192
Database pages     1208634
Old database pages 445992
Modified db pages  8
Pending reads 0 //显示了pending的reads 和writes
Pending writes: LRU 0, flush list 0, single page 0   // 显示InnoDB读写和创建的页面(pages)
Pages made young 842882, not young 127112054
0.00 youngs/s, 0.00 non-youngs/s
Pages read 2637230, created 729565, written 30484675
0.00 reads/s, 0.34 creates/s, 24.06 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000  //显示buffer pool 的命中率
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 1208634, unzip_LRU len: 0
I/O sum[9624]:cur[0], unzip sum[0]:cur[0]
----------------------
INDIVIDUAL BUFFER POOL INFO
----------------------
---BUFFER POOL 0
Buffer pool size   153600
Free buffers       1024
Database pages     151095
Old database pages 55755
Modified db pages  2
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 32021, not young 15238551
0.00 youngs/s, 0.00 non-youngs/s
Pages read 326672, created 90881, written 6387155
0.00 reads/s, 0.00 creates/s, 4.80 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151095, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 1
Buffer pool size   153600
Free buffers       1024
Database pages     151061
Old database pages 55742
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 32063, not young 15503760
0.00 youngs/s, 0.00 non-youngs/s
Pages read 327353, created 91471, written 978265
0.00 reads/s, 0.00 creates/s, 0.24 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151061, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 2
Buffer pool size   153600
Free buffers       1024
Database pages     151107
Old database pages 55759
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 32746, not young 14789866
0.00 youngs/s, 0.00 non-youngs/s
Pages read 328273, created 91339, written 4147582
0.00 reads/s, 0.00 creates/s, 3.50 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151107, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 3
Buffer pool size   153600
Free buffers       1024
Database pages     151088
Old database pages 55752
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 31950, not young 15539726
0.00 youngs/s, 0.00 non-youngs/s
Pages read 329629, created 91566, written 2998238
0.00 reads/s, 0.00 creates/s, 1.68 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151088, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 4
Buffer pool size   153600
Free buffers       1024
Database pages     151063
Old database pages 55743
Modified db pages  1
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 323393, not young 17803631
0.00 youngs/s, 0.00 non-youngs/s
Pages read 337003, created 90967, written 3974291
0.00 reads/s, 0.08 creates/s, 4.38 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151063, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 5
Buffer pool size   153600
Free buffers       1024
Database pages     151066
Old database pages 55744
Modified db pages  3
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 323468, not young 18135650
0.00 youngs/s, 0.00 non-youngs/s
Pages read 335789, created 90992, written 3382034
0.00 reads/s, 0.26 creates/s, 3.04 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151066, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 6
Buffer pool size   153600
Free buffers       1024
Database pages     151073
Old database pages 55747
Modified db pages  2
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 34315, not young 15008240
0.00 youngs/s, 0.00 non-youngs/s
Pages read 324769, created 91064, written 5580181
0.00 reads/s, 0.00 creates/s, 4.66 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151073, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 7
Buffer pool size   153600
Free buffers       1024
Database pages     151081
Old database pages 55750
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 32926, not young 15092630
0.00 youngs/s, 0.00 non-youngs/s
Pages read 327742, created 91285, written 3036929
0.00 reads/s, 0.00 creates/s, 1.76 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 151081, unzip_LRU len: 0
I/O sum[1203]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS //显示了row operations 及其他一些统计信息
--------------
0 queries inside InnoDB, 0 queries in queue //显示了有多少个线程在InnoDB内核
52 read views open inside InnoDB  // 有多少个read view 被打开,一个read view 是一致性保证MVCC "snapshot"
Main thread process no. 46196, id 47719070582528, state: sleeping   //显示内核main thread的状态信息。
Number of rows inserted 35803330, updated 3181469, deleted 14015545, read 7740416065
12.48 inserts/s, 0.68 updates/s, 0.30 deletes/s, 3005.82 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

5.2.3、SQL慢的原因

  • EXPLAIN Output Columns
Column JSON Name Meaning id select_id The SELECT identifier——优化器中各表的查询顺序 select_type None The SELECT type——查询的类型 table table_name The table for the output row——访问的表 partitions partitions The matching partitions——分区 type access_type The join type——访问的类型,对于优化非常关键 possible_keys possible_keys The possible indexes to choose——可能用到的索引 key key The index actually chosen——实际用到的索引 key_len key_length The length of the chosen key ref ref The columns compared to the index——索引列做等值查询时,与索引列比对的值得信息(如,这个值是个常数,或者另一个列) rows rows Estimate of rows to be examined——预估要扫描多少数据 filtered filtered Percentage of rows filtered by table condition——交付客户端/存储引擎筛选的。(由于有server层的过滤,索引server过滤的越少越好) Extra None Additional information

 

  • select type查询类型
select_type Value JSON Name Meaning SIMPLE None Simple SELECT (not using UNION or subqueries)——简单查询,单表查询 PRIMARY None Outermost SELECT——主查询,有关联查询时,最外面那层查询 UNION None Second or later SELECT statement in a UNION DEPENDENT UNION dependent (true) Second or later SELECT statement in a UNION, dependent on outer query UNION RESULT union_result Result of a UNION. SUBQUERY None First SELECT in subquery——子查询,有关联查询时,第一层子查询(不管这个子查询里又有多少子查询) DEPENDENT SUBQUERY dependent (true) First SELECT in subquery, dependent on outer query DERIVED None Derived table——在得到最终结果之前,用到的临时表 DEPENDENT DERIVED dependent (true) Derived table dependent on another table MATERIALIZED materialized_from_subquery Materialized subquery UNCACHEABLE SUBQUERY cacheable (false) A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query UNCACHEABLE UNION cacheable (false) The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

 

  • type 针对单表的访问方法

从上到下=从优到劣

    • const,唯一性索引和常数(常数不用计算,如子查询等等)的匹配,id=1
    • system,访问系统表,且表里只有一行数据
    • eq_ref,多表的关联查询时,与被驱动表比较时用到了被驱动表唯一性索引
    • ref,用了普通的索引(不是唯一性索引)
    • range,对索引的范围扫描,><,between and
    • index,对索引全量扫描,比如(id是索引)select id from teacher;
    • all,没有用到任何索引,就要对表全量扫描

 

  • Extra,额外的信息
    • using index(覆盖索引)
    • using where 存储引擎返回的数据,并不都满足客户端的筛选条件时,需要server层再过滤
    • using index Condition(索引下推)
    • using filesort 排序的列不是索引
    • using temporary 过滤或排序时,需要暂存数据到临时表,(比如,distinct、group by时)。可以对这些列创建索引,以消除using temporary

5.2.4、优化的参考

数据库优化的目标,就是基于Explain的信息尽量的使用索引。当然在业务上也要考虑优化,尽量减少的数据库访问负担。

  • 表结构的优化
    • 字段的定义,类型和长度。选择满足需要的最小数据类型(int,tinyint),字符char,verchar,能用定长就不要用变长。
    • 不建议用外键、触发器、视图 因为不可见,降低可读性。外键,数据一致性的约束放在代码层。
    • 大文件的存储,图片、文本、视频最好不要base64编码后存在数据库,会占用大量空间。可以上传到ftp服务器。
    • 字段适当冗余,解决重关联的问题,避免太多表联合查询。
    • 表的拆分,尽可能满足第三范式,拒绝表字段大而全。
    • 关系型数据库如果不满足,可以用nosql,大数据 。

 

  • sql的优化(简单写写 )
    • 调整表查询的顺序,用小表驱动大表
    • join 代替 in
    • union 代替or
    • union all(不需要去重) 效率大于 union
    • limit 大偏移量时,比如要从100万开始,可以先把数据过滤,再limit

 

 

 

 

 

附录:

1、取消MySQL密码检验程序:在mysql客户端执行UNINSTALL COMPONENT 'file://component_validate_password';https://www.yuque.com/u8021948/zt89r2/kf7qxxhttps://www.yuque.com/u8021948/zt89r2/kf7qxx

参考:https://dev.mysql.com/doc/refman/8.0/en/validate-password-installation.html

2、服务器上的localhost:用户root,密码1qazxsw2!

远程连接:用户customer,密码123qwe

来源:https://www.yuque.com/u8021948/zt89r2/kf7qxx

 

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » 双工检查是什么3、MySQL索引原理与使用原则

登录

找回密码

注册