说几句废话,在平常工做当中使用的更多的ORM框架是MyBatis,写的SQL(结构化查询语言)也历来没有测试过性能。在MySQL 5.0.37以后经过自带的Profiling工具可以很好的查看到SQL的运行瓶颈。mysql
工具:profiling sql
1.查看MySQL的Profiling是否打开框架
-- 查看profiling的参数 SHOW VARIABLES LIKE '%profil%'; -- 设置为0关闭,设置为1 开启 SET profiling = 1;
2.运行一条SQL语句函数
SELECT * FROM tableName;
--查看 Profiles SHOW PROFILES;
上面查看到 Query_ID 为9,那么,经过Profiling再查看 Query_ID为3的这条SQL运行的详细数据。工具
SHOW PROFILE block io,cpu,ipc,memory FOR QUERY 9;
ok. 一条简单的SQL语句MySQL内部进行了 15次操做,性能
ALL | 显示全部的开销信息 |
BLOCK IO (阻塞IO) | 显示阻塞输入和输出的操做次数测试 |
CPU | 显示用户CPU时间、系统CPU时间 |
CONTEXT SWITCHES(上下文切换) | 显示上下文切换的次数 |
IPC 过程间通讯 | 显示消息发送和接收的次数 (Internet Process Connection) |
MEMORY (内存) | 当前没有实现 |
PAGE FAULTS (页面错误) | 显示主要和次要的页面错误 |
SOURCE (源) | 从源代码显示函数的名字,连同文件的名称和行号及功能 |
SWAPS (交换) | 显示交换数 |
语法以下:spa
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type:
ALL:显示全部的开销信息
| BLOCK IO:显示块IO相关开销
| CONTEXT SWITCHES:上下文切换相关开销
| CPU:显示用户CPU时间、系统CPU时间
| IPC:显示发送和接收相关开销信息
| MEMORY:目前没有实现
| PAGE FAULTS:显示页面错误相关开销信息
| SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息
| SWAPS:显示交换次数相关开销的信息 code