說幾句廢話,在平常工做當中使用的更多的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