更新时间:2018年3月06日 22:53:41 作者:
本文主要介绍MySQL SQL语句分析和查询优化。 有需要的朋友可以参考一下。
如何获得有性能问题的SQL
1、通过用户反馈获取存在性能问题的SQL
2、通过慢查询日志获取性能问题的SQL
3.实时获取有性能问题的SQL
使用慢查询日志获取有性能问题的SQL
首先介绍一下慢查询相关的参数。
1.开始定制慢查询日志
设置方法可以通过MySQL命令行set=on。
或者修改/etc/f文件,添加=on
2、指定慢查询日志的存储路径和文件
建议日志存储和数据存储分开存储
3、指定记录慢查询日志SQL执行时间的阈值
① 记录所有符合条件的SQL
② 数据修改声明
③ 包含查询语句
④ 已回滚的SQL
注意:
时间可以精确到微秒。 存储单位为秒。 默认值为 10 秒。 比如我们要查询1微秒的值,我们需要将其设置为0.001秒。
4、是否记录不使用索引的SQL
5、设置慢日志查询的保存格式(如果需要保存为文件,请改为FILE)
慢查询使用日志中记录的信息
1、第一行记录的信息为使用测试
2、第二行记录的信息是慢查询日志的时间。
3、第三行记录的信息是使用的锁定时间
4、第四行记录的信息是返回的数据行数。
5、第五行记录的信息是扫描数据的行数。
6. 第六行记录的信息是时间戳。
7、第七行记录的信息是查询的SQL语句。
使用慢查询获取有性能问题的 SQL
常用的慢查询日志分析工具()
简介:汇总除查询条件外的相同SQL,并按照参数指定的顺序输出分析结果。
慢查询日志示例
慢查询的相关配置设置
命令行执行参数查看分析结果
]# cd /var/lib/mysql/log
]# -sr -t 10 慢-mysql
常用的慢查询日志分析工具(pt-query-)
在使用该工具之前,您需要先安装它。 如果您已经拥有它,则可以跳过以下安装步骤。
1.perl模块
]# yum -y perl-CPAN perl-Time-HiRes perl-IO--SSL perl-DBD-mysql perl--MD5
2.切换到src目录下载rpm包
]# cd /usr/local/src
]# wget
3. 安装工具包
]# rpm -ivh --3.0.7-1.el7..rpm
执行命令分析慢查询日志
]# pt-query- --user=root --= --host=127.0.0.1 Slow-mysql > Slow.rep
分析结果如下
MySQL服务器处理查询请求的全过程
1.客户端向服务器发送SQL请求
2. 服务器检查SQL是否命中缓存服务器。
3、服务器进行SQL解析和预处理,然后优化器对应执行计划。
4.根据执行计划,调用存储引擎API查询数据
5.返回结果给客户端
查询缓存对 SQL 性能的影响
1.优先检查整个查询是否命中查询缓存中的数据
2. 通过区分大小写的哈希搜索来实现
查询缓存优化参数
设置查询缓存是否可用
开关,
注意:表示查询语句中只使用SQL-CACHE 和 来控制是否需要缓存。
设置查询缓存的内存大小
设置可用于查询缓存的最大存储量
设置数据表锁定后是否返回缓存中的数据(默认关闭,建议关闭该选项)
unit 设置查询缓存分配的内存块的最小值
是什么原因导致MySQL生成不正确的执行计划
1、统计信息不准确
2、执行计划中的成本估算与执行计划的实际成本不相等
3. MySQL优化器认为的最优可能与你认为的最优不同。
4. MySQL从不考虑其他并发查询,这可能会影响当前查询数据
5. MySQL有时会根据一些固定的规则生成执行计划。
6. MySQL不考虑其无法控制的成本
MySQL优化器可以优化的SQL类型
1.重新定义表的关联顺序
优化器根据统计信息确定表关联的顺序。
2.将外部链接转换为内部链接
where条件和库表结构等
3.使用等价变换规则
(5=5 and a > 5) 将被重写为 a > 5
4.优化count()、min()和max()
离开
优化器已从执行计划中删除该表并用常量替换它
5. 将表达式转换为常量表达式
6.使用等价变换规则
7.子查询优化
8.优化in()条件
如何确定查询处理各个阶段所花费的时间
使用
设置= 1;
执行查询:
展示 ;
显示查询 N;
查询各阶段所花费的时间
使用视图语句所花费的时间
具体SQL查询优化
1、利用主从切换的原理来修改大表的表结构。 比如现在在从服务器上修改。 修改完成后,进行主从切换,然后修改原master上的大表。 有一定的风险。 。
2. 在主服务器上创建一个新表。 表结构就是修改大表的表结构,然后将旧表的数据重新导入到新表中,并在旧表中创建一系列触发器来将旧表的数据同步到新表中。新表。 将旧表中的数据全部同步到新表后,对旧表加排它锁,将新表更改为旧表的名称,并删除更名后的旧表。 如下所示
使用pt ---命令修改大表。 具体操作如下图所示。
上图中参数解释
--更改使用的sql语句
--user 数据库登录用户
-- 登录用户的密码
D 指定所有修改表的数据库名
表名
-- 指定数据库的字符串
- 实施
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。