怎么获取有功能问题的SQL

1、经过用户反应获取存在功能问题的SQL

2、经过慢查询日志获取功能问题的SQL

3、实时获取存在功能问题的SQL

运用慢查询日志获取有功能问题的SQL

首要介绍下慢查询相关的参数

1、slow_query_log 发动定制记载慢查询日志

设置的办法,能够经过MySQL指令行设置set global slow_query_log=on

或许修正/etc/my.cnf文件,增加slow_query_log=on

2、slow_query_log_file 指定慢查询日志的存储途径及文件

主张日志存储和数据存储分隔存储

3、long_query_time 指定记载慢查询日志SQL履行时刻的阈值

① 记载一切契合条件的SQL

② 数据修正句子

③ 包含查询句子

④ 现已回滚的SQL

留意:

时刻能够精确到微秒,存储的单位是秒,默许值为10秒,例如咱们想查询1微秒的值,这儿就要设置成0.001秒

4、log_queries_not_using_indexes 是否记载未运用索引的SQL

5、log_output 设置慢日志查询的保存格局(假如需求保存为文件请修正成FILE)

慢查询运用日志中记载的信息

1、榜首行记载的信息为运用sbtest做的测验

2、第二行记载的信息为慢查询日志的时刻

3、第三行记载的信息为所运用锁的时刻

4、第四行记载的信息为回来的数据行数

5、第五行记载的信息为扫描数据的行数

6、第六行记载的信息为时刻戳

7、第七行记载的信息为查询的SQL句子

运用慢查询获取有功能问题的SQL

常运用的慢查询日志剖析东西(mysqldumpslow)

介绍:汇总除查询条件外其他完全相同的SQL,并将剖析成果依照参数中所指定的次序输出

慢查询日志实例

慢查询的相关装备设置

指令行履行参数检查剖析的成果

]# cd /var/lib/mysql/log]# mysqldumpslow -s r -t 10 slow-mysql

常运用的慢查询日志剖析东西(pt-query-digest)

运用东西前,需求先装置该东西,假如已有,可略过下面的装置进程

1、perl模块

]# yum install -y perl-CPAN perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-mysql perl-Digest-MD5

2、切换至src目录下载rpm包

]# cd /usr/local/src

]# wget https://www.percona.com/downloads/percona-toolkit/3.0.7/binary/redhat/7/x86_64/percona-toolkit-3.0.7-1.el7.x86_64.rpm

3、装置东西包

]# rpm -ivh percona-toolkit-3.0.7-1.el7.x86_64.rpm

履行指令剖析慢查询日志

]# pt-query-digest --user=root --password=redhat --host=127.0.0.1 slow-mysql > slow.rep

剖析的成果如下

MySQL服务器处理查询恳求的整个进程

1、客户端发送SQL恳求给服务器

2、服务器检查是否存在在缓存服务器中射中该SQL

3、服务器端进行SQL解析,预处理,再由优化器对应履行计划

4、依据履行计划,调用存储引擎API来查询数据

5、将成果回来给客户端

查询缓存对SQL功能的影响

1、优先检查整个查询是否射中查询缓存中的数据

2、经过一个对大小写灵敏的哈希查找完成的

查询缓存的优化参数

query_cache_type 设置查询缓存是否可用

ON,OFF,DEMAND

留意:DEMAND表明只要在查询句子中运用SQL——CACHE和SQL_NO_CACHE来操控是否需求缓存

query_cache_size 设置查询缓存的内存大小

query_cache_limit 设置查询缓存可用存储的最大值

query_cache_wlock_invalidate 设置数据表被锁后是否回来缓存中的数据(默许是封闭的,主张也是封闭的此选项)

query_cache_min_res_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()

select tables optimized away

优化器现已从履行计划中移除了该表,并以一个常数取而代之

5、将一个表达式转换为常数表达式

6、运用等价改换规矩

7、子查询优化

8、对in()条件进行优化

怎么确认查询处理各个阶段所耗费的时刻

运用profile set profiling = 1;

履行查询: showprofiles; show profile forqueryN; 查询的每个阶段所耗费的时刻

运用profile检查句子所耗费的时刻

特定的SQL查询优化

1、运用主从切换的原理进行大表的表结构修正,例如,现在从服务器上修正,修正结束今后,进行主从切换,再在本来老的主上进行大表的修正,存在必定的危险。2、在主服务器上创建于一个新的表,表结构便是即将修正大表后表结构,再把老表的数据从头导入到新表中,并在老表中树立一系列的触发器,把老表的数据同步更新到新表中,当老表中的数据悉数同步到新表今后,再对老表加排它锁,把新表改成老表的称号,删去重命名的老表,如下图所示

运用pt-online-schema-change指令来修正大表,具体操作如下图所示

上图的参数解说

--alter 所运用的sql句子

--user 数据库的登录用户

--password 登录用户的暗码

D 指定一切修正表的数据库称号

t 表的称号

--charset 指定数据库的字符串

--excute 履行

作者:demon_gdy

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化相关推荐

  1. mysql查阅某个日期的语句_mysql查询指定日期时间内的sql语句及原理

    查询指定日期时间内的sql语句的实现原理: 如果是月份就是当前的月减去你要统计的时间,比如要查询数据库中从今天起往前三个月的所有记录. 另外,在数据库设计阶段,要注意时间字段为int(11),保存在数 ...

  2. c mysql查询年月日_mysql查询指定日期时间内的sql语句及原理

    查询指定日期时间内的sql语句的实现原理: 如果是月份就是当前的月减去你要统计的时间,比如要查询数据库中从今天起往前三个月的所有记录. 另外,在数据库设计阶段,要注意时间字段为int(11),保存在数 ...

  3. MySQL查询本年的数据的sql语句

    MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());

  4. mysql查看cpu使用高sql语句_查询CPU占用高的SQL语句

    触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的 ...

  5. 经典MySQL语句大全和常用SQL语句命令的作用。

    转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893 转自网络: 经典MSSQL语句大全和常用SQL语句命令的作用  下列语句部分是M ...

  6. mysql突然出现慢sql_Mysql开启慢SQL并分析原因

    第一步.开启mysql慢查询 方式一:修改配置文件 Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下. Linux:Linux ...

  7. mysql执行sql语句按钮_mysql执行sql语句过程

    开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里默认数据库为mysql),服务器通过sql语句将查询数据的请求传入到mysql数据库 ...

  8. Mysql学习笔记(基础)基础sql语句详细记录

    数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...

  9. 视图的重命名mysql语句_sql语句重命名字段-视图重命名sql语句-数据库重命名sql语句...

    sql语句如何重命名表名和列名? 一.更改数据库名 sp_renamedb 更改数据库的名称. 语法: sp_renamedb [ @dbname = ] ' old_name ' , [ @newn ...

最新文章

  1. linux shell读取文件,Linux shell逐行读取文件的方法
  2. Python基础练习题:猜数字小游戏
  3. .git文件夹_将Git存储库中的文件夹转换为全新的存储库
  4. 【案例分享】crontab执行脚本异常问题
  5. NOIP练习赛题目5
  6. 音乐人高嘉丰在 Opensea 发布音乐 NFT
  7. vscode web版搭建_VS Code 1.40 发布!可自行搭建 Web 版 VS Code!
  8. 访问控制基础(DAC,MAC,RBAC,ABAC,BLP)
  9. 圣诞老人python代码_用Python画圣诞老人的N种方法
  10. 孩子早餐要吃好,如何为孩子准备营养早餐
  11. webservice 缺少根元素_草莓种植,钙、硼元素十分重要,直接关系到草莓的产量和品质!...
  12. 来,教你开发一款图形编辑器
  13. Error C4668 : ‘USE_RTTI‘ is not defined as a preprocessor macro, replacing with ‘0‘ for ‘#if/#elif‘
  14. 故宫元宵节首开夜场,票务系统HTTPS加密护航 1
  15. 工厂生产管理流程有哪些环节?
  16. 五子棋-完美解决闪屏问题版-新增悔棋功能(C++实现)
  17. attention综述论文阅读:An Overview of the Attention Mechanisms in ComputerVision
  18. 职业学校计算机专业总结,职业学校期末总结范文
  19. Android 基于Zxing的扫码功能实现(二)
  20. 求两个数的平均值(三种方法)

热门文章

  1. rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory
  2. springboot2 配置redis报错 redis timeout Value not a valid duration解决办法
  3. Oracle查询所有序列
  4. Vue3 --- vue-router4 编程导航
  5. 获取redis中以某些字符串为前缀的KEY列表
  6. java8 lambda maplist排序_「java8系列」流式编程Stream
  7. electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记
  8. C++实现单链表的反序
  9. Python 递归函数 - Python零基础入门教程
  10. CTF工具-gdb插件peda,pwndbg安装