1.uptime,uptime告诉我们这个机器活了多久,以及它的平均的负载是多少 。
2.dmesg -T | tail,告诉我们系统日志里边有没有什么报错 。
3.vmstat 1,告诉我们虚拟内存的状态,页的换进换出有没有问题,swap有没有使用 。
4. mpstat -P ALL,告诉我们CPU压力在各个核上是不是均匀的 。
5.pidstat 1,告诉我们各个进程的对资源的占用大概是什么样子 。
我们来看一下后五条:
首先是iostat-xz 1,查看IO的问题,然后是free-m内存使用率,之后两个sar,按设备网卡设备的维度,看一下网络的消耗状态,以及总体看TCP的使用率和错误率是多少 。最后一条命令top,看一下大概的进程和线程的问题 。
这个就是对于外部资源的诊断,这十条命令揭示了应该去诊断哪些外部资源 。
1.3 外部需求改造
第三个诊断思路是外部的需求改造 , 我在这里引用了一篇文档 , 这篇文档是MySQL的官方文档中的一章,这一章叫Examples of Common Queries,文档中介绍了常规的SQL怎么写, 给出了一些例子 。文章的链接二维码在slide上 。
我们来看一下它其中提到的一个例子 。
它做的事情是从一个表里边去选?。?这张表有三列,article、dealer、price,选取每个作者的最贵的商品列在结果集中,这是它的最原始的SQL , 非常符合业务的写法,但是它是个关联子查询 。
关联子查询成本是很贵的,所以上面的文档会教mysql怎么找分析你快速地把它转成一个非关联子查询,大家可以看到中间的子查询和外边的查询之间是没有关联性的 。
第三步 , 会教大家直接把子查询拿掉,然后转成这样一个SQL,这个就叫业务改造 , 前后三个SQL的成本都不一样,把关联子查询拆掉的成本,拆掉以后SQL会跑得非常好 , 但这个SQL已经不能良好表义了,只有在诊断到SQL成本比较高的情况下才建议大家使用这种方式 。
为什么它能够把一个关联子查询拆掉呢?
这背后的原理是关系代数,所有的SQL都可以被表达成等价的关系代数式,关系代数式之间有等价关系 , 这个等价关系通过变换可以把关联子查询拆掉 。
上面的这篇文档是一个大学的教材,它从头教了关于代数和SQL之间的关系 。然后一步步推导怎么去简化这句SQL 。
第一,MySQL本身提供了很多命令来观察MySQL自身的各类状态 , 大家从上往下检一般能检到SQL的问题或者服务器的问题 。
第二,从服务器的角度,我们从巡检的脚本角度入手,服务器的资源就这几种 , 观测手法也就那么几种,我们把服务器的资源全部都观察一圈就可以了 。
第三,如果实在搞不定 , 需求方一定要按照数据库容易接受的方式去写SQL,这个成本会下降的非常快,这个是常规的MySQL慢的诊断思路 。
Mysql-性能分析-ProfilingShow Profile 是mysql提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于Sql调优的测量 。
请读者继续看前面的图 SQL执行具体细节 , 左边 Status 列展示了一条SQL执行的从开始到清理的整个生命周期中执行的操作 。如果在其生命周期阶段出现如下的情况的就要重视了:
开启 Profiling 后,mysql会留下15条最近执行的sql的现场, 便于我们发现问题 。
Show profiles 用来查最近的15条 。
Show profile 用来展示每一个SQL执行阶段的耗时清单 , 便于我们发现耗时最多的地方,然后以此为依据查找问题所在 , 最后优化SQL或者优化mysql参数 。比如耗时清单创建了临时表,就要考虑表是否创建索引,如果创建了那么是否没有用到或者失效了 。
- mysql游标和存储过程是什么 mysql游标表名为变量
- 如何使用cmd命令行提示符登录mysql服务器 cmd中登陆mysql
- mysql怎么设置时区 mysql时间显示设置
- 招聘要精通mysql
- mysql 65535 8192 限制 mysql限制资源使用
- mysql有topn
- mysql协议包解析 mysqlicp协议
- mysql子查询和连接查询 mysql子查询插入
- Mysql使用索引查询 mysql使用round
- 云服务器游戏出现黑屏问题怎么解决? 云服务器游戏黑屏怎么办
