1.如何获取有性能问题的 SQL
1.通过用户反馈获取存在性能问题的 SQL
2.通过慢查日志获取存在性能问题的 SQL
3.实时获取存在性能问题的 SQL
2.使用慢查询日志获取有性能问题的 SQL
slow_query_log 启动停止记录慢查日志
slow_ query_log_file 指定慢査日志的存储路径及文件
long_ query-time 指定记录慢查日志 SQL 执行时间的伐值
log_ queries_ not_using_indexes 是否记录未使用索引的 SQL
慢查询日志配置
https://www.cnblogs.com/saneri/p/6656161.html
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示:
show variables like '%slow_query_log%';
set global slow_query_log=1;
show variables like '%slow_query_log%';
修改my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器
slow_query_log =1
slow_query_log_file=/usr/local/mysql/data/localhost-slow.log
系统变量log-queries-not-using-indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan的sql也会被记录到慢查询日志。
系统变量log_slow_admin_statements表示是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记入慢查询日志
3.SQL 查询优化
常用的慢查日志分析工具( pt-query- digest
pt-query-digest
-- explain h=127.0.0.1, u=root, p=p@swORd
long-mysqllog
pt-query-digest --explain h=127.0.0.1,u=root,p=root123465 DEVAPP01-slow.log
4.查询速度为什么会慢
1.客户端发送 SQL 请求给服务器
2.服务器检查是否可以在查询缓存中命中该 SQL
3.服务器端进行 SQL 解析,预处理,再由优化器生成对应的执行计划
4.跟据执行计划,调用存储引擎 API 来査询数据
5.将结果返回给客户端
这就是 MQL 服务器处理查询请求的整个过程
5.查询缓存对 SQL 性能的影响
对于一个读写频繁的系统使用查询缓存很可能会降低查询处理的效率所以在这种情况下建议大家不要使用查询缓存
query_cache_type 这个系统变量控制着查询缓存工能的开启的关闭。
query_cache_type=0 时表示关闭,1时表示打开,2表示只要select 中明确指定SQL_CACHE才缓存。
最好的关闭查询缓存的办法就是把my.cnf 中的query_cache_type=0然后再重启mysql
查询缓存相关的系统变量:
have_query_cache 表示这个mysql版本是否支持查询缓存。
query_cache_limit 表示单个结果集所被允许缓存的最大值。
query_cache_min_res_unit 每个被缓存的结果集要占用的最小内存。
query_cache_size 用于查询缓存的内存大小。
如何监控查询缓存的命中率:
Qcache_free_memory 查询缓存目前剩余空间大小。
Qcache_hits 查询缓存的命中次数。
Qcache_inserts 查询缓存插入的次数。
也就是说缓存的命中率为 Qcache_hits/(Qcache_hits+Qcache_inserts)
查询缓存对 SQL 性能的影响
query_cache_type 设置查询缓存是否可用 OFF
query_cache_size 设置查询缓存的内存大小 0
query_cache_limit 设置查询缓存可用存储的最大值
query_cache_lock invalidate 设置数据表被锁后是否返回缓存中的数据
query_cache_min_res_unit 设置查询缓存分配的内存块最小单位
如何确定查询处理各个阶段所消耗的时间
使用 profile
set profiling =1;
执行查询
show profiles
show profile for query N;
查询的每个阶段所消耗的时间
show profile for query 1;
show profile cpu for query 1;
如何确定查询处理各个阶段所消耗的时间
使用 profile
set profiling =1;
执行查询
show profiles;
show profile for query N;
5.performance_schema使用
https://yq.aliyun.com/articles/415550
show variables 'performance_schema';
查看是否支持performance_schema
mysql> select * from information_schema.engines where engine ='performance_schema';
6.如何修改大表的表结构
pt-online-schema-change
--alter="MODIFY C VARCHAR(50) NOT NULL DEFAULT''"
--user=root--password=PassWord D=imooc, t=sbtest4
--charset=utf8 --execute
将后面的转化成上面的--alter7.数据库分片
oneProxy 安装和使用
https://blog.csdn.net/xxq929604980/article/details/79581222
网友评论