MySQL之性能剖析(四)

性能剖析

使用慢查询

Percona Server对慢查询日志做了哪些改进?比如"使用SHOW PROFILE"执行相同查询后可以抓取到的结果

# Time:110905 17:03:18
# User@Host:root[root] @localhost[127.0.01]
# Thread_id:7 Schema:saklia Last_errono:0 Killed:0
# Query_time:0.166872 Lock_time:0.000552 Rows_sent:997 Rows_examined:24861Rows_affected:0 Rows_read:997
# Bytes_sent:216528 Tmp_tables:3 Tmp_disk_tables:2 Tmp_table_sizes:11627188
# InnoDB_trx_id:191E
# QC_Hit:NO Full_scan:Yes Full_jooin:No Tmp_table:Yes Tmp_table_on_disk:Yes
# Filesort:yes Filesort_on_disk:No Merge_passes:0
# InnoDB_IO_r_ops:0 InnoDB_IO_r_bytes:0 InnoDB_IO_r_wait:0.000000
# InnoDB_rec_lock_wait:0.000000 InnoDB_queue_wait:0.000000
# InnoDB_pages_distinct:20
# PROFILE_VALUES ...Copying to tmp table:0.090623...
SET timestamp=1315256598
SELECT * FROM sakila.nice_but_slower_film_list;

从这里可以看到查询确实以供创建了三个临时表,其中两个是磁盘临时表。而SHOW PROFILE看起来则隐藏了信息(可能由于服务i去执行查询的方式有不一样地方造成的)。最后对该查询执行SHOW PROFILE的数据也会写入到日志中,所以在Percona Server中甚至可以记录SHOW PROFILE的细节信息。
另外可以看到,慢查询日志中详细记录的条目包含了SHOW PROFILE和SHOW STATUS所有的输出,并且还有更多的信息。所以通过pt-query-digest发现"坏"查询后,在慢查询日志中可以获得足够有用的信息。查看pt-query-digest的报告时其标题部分一般会有如下输出:

# Query 1:0 OPS, 0x concurrency, ID0xEE758C5E0D7EADEE at byte 3214——

可以通过这里的字节偏移值(3214)直接跳转到日志的对应部分,例如用下面这样的命令即可:

tail -c +3214 /path/to/query.log | head -n100

这样就可以直接跳转到细节部分了,另外pt-query-digest能够处理Percona Server在慢查询日志中增加的所有键值对,并且会自动在报告中打印更多的细节信息

使用Performance Schema

在MySQL5.5中新增的Performance Schema表还不支持查询级别的剖析信息。Performance Schema还是非常新的特性,并且还在快速开发中,未来的版本中将会包含更多的功能。尽管如此,MySQL 5.5的初始版本已经包含了狠毒偶有去的信息。例如,下面的查询显示了系统中等待的主要原因:

mysql> SELECT event_name, count_star, sum_timer_wait FROM `performance_schema`.`events_waits_summary_global_by_event_name` ORDER BY sum_timer_wait DESC LIMIT 5;

目前还有一些限制,使得Performance Schema还无法被当作一个通用的剖析工具,首先它还无法提供查询执行阶段的细节信息和计时信息,而前面提供的很多现有的工具都已经能做到这些了。其次,还没有经过长事件、大规模使用的验证,并且自身的开销也还比较大,多数比较保守的用户还对此有疑问。
最后,对大多数用户来说,直接通过Performance Schema的裸数据获得有用的结果相对来说过于复杂和底层。到目前为止实现的这个特性,主要是为了测量当为提升服务器性能而修改MySQL源代码时使用,包括等待和互斥锁。MySQL5.5中的特性读与高级用户也很有价值,而不仅仅为开发者使用。在MySQL5.6或者以后的版本中,Performance Schema将会包含更多的功能,再加上一些方便使用的工具。而且Oracle将其实现成表的形式,可以通过SQL访问,这样用户可以方便地访问有用的数据.但其目前还无法立即取代慢查询日志等其他工具用于服务器和查询的性能优化。

使用性能剖析

当获得服务器或者查询的剖析报告后,怎么使用?好的剖析报告能够将潜在的问题显示出来,但最终的解决方案还需要用户来决定(尽管报告可能会给出建议)。优化查询时,用户需要对服务器如何执行查询有较深的了解。剖析报告能够尽可能多地收集需要的信息、给出诊断问题的正确方向,以及为其他诸如EXPLAIN等工具提供基础信息。
尽管一个拥有完美测量信息的剖析报告可以i让事情变得简单,但现有系统通常都没有完美的测量支持。例如,我们虽然推断出是临时表和没有索引的读导致查询的响应事件过长,但却没有明确的证据。因为无法测量所有需要的信息,或者测量的范围不正确,有些问题就很难解决。例如,可能没有集中在需要优化的地方测量,而是测量了服务器层面的活动,或者测量的是查询开始之前的计数器,而不是查询开始后的数据。
也有其他的可能性。设想一下正在分析慢查询日志,发现了一个很简单的查询正常情况下都非常快,却有几次非常不合理地执行了很长事件。手工重新执行一遍,发现也非常快,然后使用EXPLAIN 查询其执行计划,也正确地使用了索引。然后尝试修改WHERE条件中使用不同的值,以排除缓存命中的可能,也没有发现什么问题,这可能是什么原因呢?
如果使用官方版本的MySQL,慢查询日志中没有执行计划或者详细的时间信息,对于偶尔记录到的这几次查询异常慢的问题,很难知道其原因在哪里,因为信息优先,可能是系统中有其他东西消耗了资源,比如正在备份,也可能是某种类型的所或者争用阻塞了查询的进度。

其他剖析工具

  • 1.使用USER_STATISTICS表。
    Percona Server和MariaDB都引入了一些额外的对象级别使用统计的INFORMATION_SCHEMA表,这些最初是由Google开发的。这些表对于查询服务器各部分的实际使用情况非常有帮助。在一个大型企业中,DBA负责管理数据库,但其对开发缺少话语权,那么通过这些表就可以对数据库活动那个进行测量和审计,并且强制执行使用策略。对于像共享主机环境这样的多租户环境也同样有用。另外,在查找性能问题时,这些表也可以帮助找出数据库中什么地方花费了最多的时间,或者什么表或索引表使用得最皮肤那你,抑或最不频繁,下面就是这些表:

mysql> SHOW TABLES FROM information_schema LIKE '%_STATISTICS';
+---------------------------------------------+
| Tables_in_information_schema (%_STATISTICS) |
+---------------------------------------------+
| TABLE_STATISTICS                            |
| INDEX_STATISTICS                            |
| IO_STATISTICS                               |
| PERF_STATISTICS                             |
+---------------------------------------------+
4 rows in set (0.15 sec)

有几个要点要说明一下:
1.可以查找使用得最多或者使用得最少的表和索引,通过读取次数或者更新次数,或者两者一起排序
2.可以查找出从未使用的索引,可以考虑删除之
3.可以看看复制用户的CONNECTED_TIME和BUSY_TIME,以确认复制是否会很难跟上主库的进度

  • 2.使用strace
    strace工具可以调查系统调用的情况,有好几种可以使用的方法,其中一种是计算系统调用的时间并打印出来:
strace -cfp $(pidof mysqld)
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.012014           6        202        12 read00.00    0.000000           0          2          0 write00.00    0.000000           0          4          0 ioctl00.00    0.000000           0          1          0 mmap
------ ----------- ----------- --------- --------- ----------------
100.00    0.012014                   209        12 total

read 系统调用被调用了 202 次,总共耗时大约 0.012 秒,每次调用平均用时 6 微秒,并且有 12 次错误。
write 系统调用被调用了 2 次,没有错误发生。
ioctl 系统调用被调用了 4 次,没有错误发生。
mmap 系统调用被调用了 1 次,没有错误发生。
这种用法和oprofile有点像。但是oprofile还可以剖析程序的内部符号,而不仅仅是系统调用。另外,strace拦截系统调用使用的是不同oprofile的技术,这会有一些不可预期性,开销也更大些。strace度量时使用的实际时间,而oprofile使用的是花费CPU周期。
举个例子,当IO等待出现问题的时候,strace能将它们希纳是出来,因为它诸如read或者pread64这样的系统调用开始计时,直到调用结束。但opfile不会这样,因为IO系统调用并不会真正地消耗CPU周期,而只是等待IO完成而已。
strace对像mysqld这样有大量线程的场景会产生一些副作用。当strace附加上去后,mysqld的运行会变得很慢,因此不适合在产品环境中使用。但在某些场景下还是相当有用的,Percona Toolkit中有一个叫作pt-ioprofile的工具就是使用strace来生成IO活动的剖析报告的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】

2.2 漏洞详情 SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】 【可验证】 详细描述TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。 TLS, SSH, IPSec协商及其他产品中使用的IDEA、DES及Triple DES密码或者3DES及Triple 3DES存在大约…

我想给儿子开发一个手机应用

我想给儿子开发一个手机应用,不知道从何入手,利用AI获取的大概方向: 在开发一款针对少儿的手机应用(App)时,内容方向的选择至关重要。以下是一些建议的方向,它们结合了当前的市场趋势、儿童教育…

自动化使用 ChatGPT 生成 PPT 大纲 - 基于 Python 和 PyAutoGUI

这篇文章将指导您利用 Python 的 pyautogui 库创建一个自动化的脚本,帮助您使用 ChatGPT 生成公司智能管理平台的 PPT 大纲。该脚本将打开 Chrome 浏览器,访问 ChatGPT 并输入相应的提示词,让 ChatGPT 为您创建 PPT 大纲。 C:\pythoncode\ne…

QGis3.34.5工具软件保存样式,软件无反应问题

在使用QGis软件保存SLD样式的时候,每次保存样式,软件都进入无反应状态,导致无法生成样式文件 百度中多次查询问题点,终未能在在3.34.5这个版本上解决问题。 考虑到可能是软件本身问题,于是删除了3.34.5这个版本&#x…

SAP ABAP MD04屏幕增加:增加列

需求:增加显示销售订单送达方 主要使用二代增强出口:M61X0002 事务码T-code:CMOD 填写描述,保存到对应的包下 分配增强到项目下 激活组件,激活后效果如下 编写ZXM61U04 SAP留出的按钮,填写描述 button1_ez = 送达方. 编写ZXM61U03 *&-------------------------…

Java版招投标管理系统源码:优化流程,提升效率,实现全方位项目管理

在现今日益竞争激烈的招标市场中,企业需要一款强大而灵活的招投标管理系统来优化流程、提升效率。我们的招投标管理系统正是为此而生,它集门户管理、立项管理、采购项目管理、公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等多…

解决git status提示error bad signature 0x00000000

问题描述: 操作git的时候电脑卡了,重启电脑后git status就提示bad signature 0x00000000,index file corrupt错误,如下: 解决办法: rm -f .git/index git reset

【赠书第25期】C#项目开发实战(微视频版)

文章目录 前言 1 项目构思与需求分析 1.1 项目构思 1.2 需求分析 2 系统设计 2.1 系统架构设计 2.2 数据库设计 2.3 接口设计 3 编码实现 3.1 环境搭建 3.2 编码规范 3.3 编码实现 4 测试与部署 4.1 单元测试 4.2 系统测试 4.3 部署与上线 5 总结与展望 6 推…

[面经] 西山居非正式面试(C++)

前言 这次面试是我第一次面试,而且我也并没有做好准备,应该说几乎就是临场发挥,面试的时间与我推测的相差太大,几乎就是做完简历的下一天就马上去面试了,有不少地方自己没能很好的答出,故做此记录。 关于…

代码随想录算法训练营第五十四天||392.判断子序列、115.不同的子序列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、392.判断子序列 思路 二、115.不同的子序列 思路 一、392.判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是…

力扣算法之1070. 产品销售分析 III

力扣传送门 题解 选出每个售出过的产品 第一年 销售的 产品 id、年份、数量 和 价格,很明显就是个排序问题 我的解 SELECT product_id,year as first_year,quantity,price FROM ( SELECT sale_id,RANK() OVER(PARTITION BY product_id ORDER BY [year] asc ) A…

第五周:坦诚是领导力的根基

1. 懂得很多道理,依然过不好这一生 “纸上得来终觉浅,绝知此事要躬行。” 我们往往就是这样,开导别人的时候,口若悬河,心灵鸡汤信手拈来,自以为洞穿了他人困境的本质,并且找到了解决办法&#x…

TinyChat: Visual Language Models Edge AI 2.0

TinyChat: Visual Language Models & Edge AI 2.0 要点 了解TinyChat和AWQ最新的技术发展。在边缘部署语言理解模型(LSTM)后,借助于视觉语言模型(VLM),可以为LLM提供更好地处理图像输入的能力,从而极大方便了文字对话问答、图片标题生成…

C#中结构struct能否继承于一个类class,类class能否继承于一个struct

C#中结构struct能否继承于一个类class,类class能否继承于一个struct 答案是:都不能。 第一种情行,尝试结构继承类 报错:接口列表中的类型"XX"不是接口interface。 一般来说,都是结构只能实现接口&#x…

【第四节】C++的派生与继承

目录 一、继承特性 二、派生类的定义格式 三、派生类的继承方式 3.1 三种继承方式概述 3.2 接口继承和实现继承 四、派生类的构造和析构函数 五、类的成员重定义 六、多重继承 6.1 多继承 6.2 多继承中的二义性问题 七、虚基类 八、总结 一、继承特性 在生物学中&a…

HDFS RPC响应调优:FairCallQueue调优

参考材料: Apache Hadoop 3.4.0 – Fair Call Queue Guide 一、案例 在 core-site.xml 配置文件中添加如下配置项&#xff1a; <property><name>ipc.8020.callqueue.impl</name><value>org.apache.hadoop.ipc.FairCallQueue</value> </pr…

vue学习汇总

目录 一、vue基本语法 1.插值表达式 {{}} 2.显示数据(v-text)和(v-html) 3.事件处理(v-on) 4.循环遍历(v-for) 5.判断语法(v-if) 6.元素显示与隐藏(v-show) 7.动态设置属性(v-bind) 8.数据双向绑定(v-model) 9.计算属性 二、vue组件 1.使用组件的三个步骤 2.注册组…

有趣的css - 列表块加载动效

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用 css 打造一个极简的列表块加载动效。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整…

使用Ollama和Open WebUI管理本地开源大模型的完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月27日12点20分 &#x1f004;️文章质量&#xff1a;96分 目录 ✨️Open-WebUI介绍 优点 &#x1f4a5;部署教程…

计算机视觉与深度学习实战:以Python为工具,基于Hough变化的答题卡识别

一、引言 在信息技术飞速发展的今天,计算机视觉与深度学习已成为许多领域不可或缺的技术。特别是在教育领域,答题卡识别技术的应用极大地提高了阅卷效率和准确性。本文将详细介绍如何利用Python作为工具,结合计算机视觉和深度学习的技术,基于Hough变换实现答题卡识别的实战…