一、经过用户反馈获取存在性能问题的SQL 二、经过慢查询日志获取性能问题的SQL 三、实时获取存在性能问题的SQL
首先介绍下慢查询相关的参数html
一、slow_query_log 启动定制记录慢查询日志 设置的方法,能够经过MySQL命令行设置set global slow_query_log=on 或者修改/etc/my.cnf文件,添加slow_query_log=on 二、slow_query_log_file 指定慢查询日志的存储路径及文件 建议日志存储和数据存储分开存储 三、long_query_time 指定记录慢查询日志SQL执行时间的阈值 ① 记录全部符合条件的SQL ② 数据修改语句 ③ 包括查询语句 ④ 已经回滚的SQL 注意: 时间能够精确到微秒,存储的单位是秒,默认值为10秒,例如咱们想查询1微秒的值,这里就要设置成0.001秒 四、log_queries_not_using_indexes 是否记录未使用索引的SQL 五、log_output 设置慢日志查询的保存格式(若是须要保存为文件请修改为FILE)
一、第一行记录的信息为使用sbtest作的测试 二、第二行记录的信息为慢查询日志的时间 三、第三行记录的信息为所使用锁的时间 四、第四行记录的信息为返回的数据行数 五、第五行记录的信息为扫描数据的行数 六、第六行记录的信息为时间戳 七、第七行记录的信息为查询的SQL语句
介绍:汇总除查询条件外其余彻底相同的SQL,并将分析结果按照参数中所指定的顺序输出
命令行执行参数查看分析的结果mysql
]# cd /var/lib/mysql/log ]# mysqldumpslow -s r -t 10 slow-mysql
使用工具前,须要先安装该工具,若是已有,可略过下面的安装步骤 一、perl模块 ]# yum install -y perl-CPAN perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-mysql perl-Digest-MD5 二、切换至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 三、安装工具包 ]# 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
一、客户端发送SQL请求给服务器 二、服务器检查是否存在在缓存服务器中命中该SQL 三、服务器端进行SQL解析,预处理,再由优化器对应执行计划 四、根据执行计划,调用存储引擎API来查询数据 五、将结果返回给客户端
一、优先检查整个查询是否命中查询缓存中的数据 二、经过一个对大小写敏感的哈希查找实现的
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优化器所认为的最优可能与你所认为的最优不同 四、MySQL从不考虑其余并发的查询,这可能会影响当前查询数据 五、MySQL有时候也会基于一些固定的规则来生成执行计划 六、MySQL不会考虑不受其控制的成本
一、从新定义表的关联顺序 优化器会根据统计信息来决定表的关联顺序 二、将外连接转换成内链接 where条件和库表结构等 三、使用等价变换规则 (5=5 and a > 5)将会被改写成 a > 5 四、优化count(), min()和max() select tables optimized away 优化器已经从执行计划中移除了该表,并以一个常数取而代之 五、将一个表达式转换为常数表达式 六、使用等价变换规则 七、子查询优化 八、对in()条件进行优化
使用profile set profiling = 1; 执行查询: show profiles; show profile for query N; 查询的每一个阶段所消耗的时间
一、利用主从切换的原理进行大表的表结构修改,例如,如今从服务器上修改,修改完毕之后,进行主从切换,再在原来老的主上进行大表的修改,存在必定的风险。 二、在主服务器上建立于一个新的表,表结构就是将要修改大表后表结构,再把老表的数据从新导入到新表中,并在老表中创建一系列的触发器,把老表的数据同步更新到新表中,当老表中的数据所有同步到新表之后,再对老表加排它锁,把新表改为老表的名称,删除重命名的老表,以下图所示
--alter 所使用的sql语句 --user 数据库的登陆用户 --password 登陆用户的密码 D 指定全部修改表的数据库名称 t 表的名称 --charset 指定数据库的字符串 --excute 执行