如何获取有性能问题的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;
执行查询:
show profiles;
show profile for query N;
查询的每个阶段所消耗的时间
使用profile查看语句所消耗的时间
特定的SQL查询优化
1、利用主从切换的原理进行大表的表结构修改,例如,现在从服务器上修改,修改完毕以后,进行主从切换,再在原来老的主上进行大表的修改,存在一定的风险。
2、在主服务器上创建于一个新的表,表结构就是将要修改大表后表结构,再把老表的数据重新导入到新表中,并在老表中建立一系列的触发器,把老表的数据同步更新到新表中,当老表中的数据全部同步到新表以后,再对老表加排它锁,把新表改成老表的名称,删除重命名的老表,如下图所示
使用pt-online-schema-change命令来修改大表,具体操作如下图所示
上图的参数解释
--alter 所使用的sql语句
--user 数据库的登录用户
--password 登录用户的密码
D 指定所有修改表的数据库名称
t 表的名称
--charset 指定数据库的字符串
--excute 执行
原创作品,转载请注明出处
MySQL,查询优化
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]