SQL执行过程中的性能负载点
一、SQL执行过程
1、用户连接数据库,执行SQL语句;
2、先在内存进行内存读,找到了所需数据就直接交给用户工作空间;
3、内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到磁盘中查找;
4、找到的数据放到内存中,在内存进行数据过滤再放到会话工作空间。
5、假设会话工作空间需要暂存结果集进行排序,但空间不足的话,就会借用磁盘tmpdir,最后再将结果返回给用户。
注:
用户会话空间是内存中分配出来的一个工作空间,而innodb_buffer_pool是innodb存储引擎在内存中的一个缓冲池。
一个SQL执行速度快并不能说明这个SQL没有性能问题,SQL性能不是一定需要利用并发来测试,主要是看其资源消耗点。
二、影响SQL执行几个资源消耗点(最底层理论依据):
1、用户连接线程建立
2、物理读,I/O慢
3、内存读,消耗CPU
4、磁盘排序
5、数据传输,网络消耗
三、判断一个SQL的性能执行优劣
根据SQL执行的资源消耗点来进行判断。
1、如何判断是否出现连接建立
mysql> show global status like 'Threads_created';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Threads_created | 5 |
+-----------------+-------+
1 row in set (0.00 sec)
2、如何判断是否出现物理读
mysql> show global status like 'Innodb%read%';
+---------------------------------------+----------+
| Variable_name | Value |
+---------------------------------------+----------+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 2303 |
| Innodb_buffer_pool_read_ahead_evicted | 0 |
| Innodb_buffer_pool_read_requests | 137140 |
| Innodb_buffer_pool_reads | 662 |
| Innodb_data_pending_reads | 0 |
| Innodb_data_read | 49271296 |
| Innodb_data_reads | 3130 |
| Innodb_pages_read | 2964 |
| Innodb_rows_read | 369 |
+---------------------------------------+----------+
10 rows in set (0.01 sec)
关注点:
1、Innodb_buffer_pool_reads:innodb物理读的次数
2、Innodb_data_reads:物理读IO请求次数
3、Innodb_pages_read:物理读page的总数
3、如何判断是否出现过量内存读(比值)
mysql> show global status like 'Innodb_rows_read';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Innodb_rows_read | 369 |
+------------------+-------+
1 row in set (0.00 sec)
Innodb_rows_read:实际上的内存读的数量,也就是实际上需要访问的数据量(返回的数据量)
4、如何判断是否出现磁盘排序
mysql> show global status like 'sort_merge_passes';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Sort_merge_passes | 0 |
+-------------------+-------+
1 row in set (0.00 sec)
sort_merge_passes:必须要做归并排序的次数
5、如何查看网络传输量
mysql> show global status like '%bytes%';
+--------------------------------+----------+
| Variable_name | Value |
+--------------------------------+----------+
| Bytes_received | 8943228 |
| Bytes_sent | 10775680 |
| Innodb_buffer_pool_bytes_data | 49741824 |
| Innodb_buffer_pool_bytes_dirty | 0 |
+--------------------------------+----------+
4 rows in set (0.01 sec)
四、关于磁盘排序
客户端一个用户连接到服务器MySQL数据库,系统为该用户启动一个用户会话,数据库开启一个用户连接线程,并根据配置参数在内存中为该用户分配用户工作空间。如果读取的数据结果集要进行排序处理,而用户工作空间不够用的话,就会向磁盘借用空间,磁盘排序。
mysql> show variables like 'tmpdir';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| tmpdir | /tmp |
+---------------+-------+
1 row in set (0.01 sec)
SQL执行过程中的性能负载点的更多相关文章
- 精尽MyBatis源码分析 - MyBatis 的 SQL 执行过程(一)之 Executor
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- 精尽MyBatis源码分析 - SQL执行过程(二)之 StatementHandler
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- 精尽MyBatis源码分析 - SQL执行过程(三)之 ResultSetHandler
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- 精尽MyBatis源码分析 - SQL执行过程(四)之延迟加载
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误
今天一个同事突然告诉我,以前跑得很正常的一个SQL语句,执行时突然报如下错误: 消息1222,级别16,状态18,第1 行 已超过了锁请求超时时段. ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
- 转:Oracle中SQL语句执行过程中
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
转载 Seay_法师 最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好 ...
- Deepin下phpunit安装,以及执行过程中所遇到的问题
Deepin下phpunit安装,以及执行过程中所遇到的问题 安装phpunit步骤 wget https://phar.phpunit.de/phpunit.phar chmod +x phpuni ...
随机推荐
- swift pod第三方OC库使用use_frameworks!导致#import提示无法找到头文件
以MBProgressHUD为例子 swift中Podfile文件一般都会加上use_frameworks! 这样就可以直接通过import MBProgressHUD来访问MBProgressHUD ...
- html学习笔记 - table表格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- php原生自定义验证码,5分钟搞定你的问题
当然现在很多php的框架里面自带了很多很多验证码,我的这个验证码,也是当初刚刚入行的时候学习模仿的.现在照搬出来,希望对刚入门的朋友有所帮助. **************************** ...
- zabbix监控redis
导入监控模板 点击[configuration]-->[templates]-->[import],导入xml监控模板. 配置客户端key 在被监控的主机上,新建/etc/zabbix/z ...
- sparklyr包:实现Spark与R的接口
日前,Rstudio公司发布了sparklyr包.该包具有以下几个功能: 实现R与Spark的连接—sparklyr包提供了一个完整的dplyr后端 筛选并聚合Spark数据集,接着在R中实现分析与可 ...
- Unix文化--RTFM
背景 从上个世纪70年代初unix被创建后的不久,它变得越来越流行起来,从最初的贝尔实验室,到后来的许多大学的计算机院系.这意味着越来越多的人需要学习如何使用unix. 可以预期的是,贝尔实验室的人都 ...
- mysql5.6 主从复制
Master 192.168.59.128 Slave 192.168.59.129 默认认为已安装mysql5.6 mysql5.6 rpm安装配置 修改Master my.cnf文件 # ...
- 地理位置 API
js获取地理位置的接口navigator.geolocation geolocation对象有三个方法 1.getCurrentPosition 2.watchPosition 3.clearWatc ...
- docker - 关于network的一些理解
docker 提供给我们多种(4种)网络模式,我们可以根据自己的需求来使用.例如我们在一台主机(host)或者同一个docker engine上面运行continer的时候,我们就可以选择bridge ...
- RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World
一.简介 RabbitMQ是一个消息的代理器,用于接收和发送消息,你可以这样想,他就是一个邮局,当您把需要寄送的邮件投递到邮筒之时,你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人 ...