1. 程式人生 > 資料庫 >mysql中profile的使用方法教程

mysql中profile的使用方法教程

profile是什麼

當我們要對某一條sql的效能進行分析時,可以使用它。

Profiling是從 mysql5.0.3版本以後才開放的。

啟動profile之後,所有查詢包括錯誤的語句都會記錄在內。

關閉會話或者set profiling=0 就關閉了。(如果將profiling_history_size引數設定為0,同樣具有關閉MySQL的profiling效果。)

此工具可用來查詢SQL執行狀態,System lock和Table lock 花多少時間等等,

對定位一條語句的I/O消耗和CPU消耗 非常重要。(SQL 語句執行所消耗的最大兩部分資源就是IO和CPU)

--在mysql5.7之後,profile資訊將逐漸被廢棄,mysql推薦使用performance schema

mysql官網定義

The SHOW PROFILE and SHOW PROFILES statements display profiling information that indicates resource usage for statements executed during the course of the current session.

簡單的說,當前會話資源的消耗情況。

注意:show profile和show Profiles都是不建議使用的,在mysql後期的版本中可能會被刪除;官網建議使用Performance Schema

怎麼使用

profile預設關閉,生產環境中也建議關閉。

檢視當前環境的profile設定

mysql> show variables like '%profiling%';
+------------------------+-------+
| Variable_name   | Value |
+------------------------+-------+
| have_profiling   | YES |
| profiling    | OFF |
| profiling_history_size | 15 |
+------------------------+-------+

profiling off表示profile關閉,profiling_history_size 15表示儲存最近15條SQL的資源消耗情況。

開啟profile功能,可以使用命令

set global profiling = 1;

然後就可以使用下面命令

show profiles;

檢視最近15條SQL的情況;

如果要檢視某一條的具體情況,SQL格式為:

SHOW PROFILE [type [,type] ... ]
 [FOR QUERY n]
 [LIMIT row_count [OFFSET offset]]

type: {
 ALL
 | BLOCK IO
 | CONTEXT SWITCHES
 | CPU
 | IPC
 | MEMORY
 | PAGE FAULTS
 | SOURCE
 | SWAPS
}

官網對type中各個欄位的解釋為:

ALL displays all information

BLOCK IO displays counts for block input and output operations

CONTEXT SWITCHES displays counts for voluntary and involuntary context switches

CPU displays user and system CPU usage times

IPC displays counts for messages sent and received

MEMORY is not currently implemented

PAGE FAULTS displays counts for major and minor page faults

SOURCE displays the names of functions from the source code,together with the name and line number of the file in which the function occurs

SWAPS displays swap counts

profiling 對每個會話有效,當會話結束後,當前的profiling資訊就會丟失。

使用案例

mysql> show profiles;
+----------+------------+----------------------------+
| Query_ID | Duration | Query      |
+----------+------------+----------------------------+
|  1 | 0.00060275 | select * from customers |
|  2 | 0.00222450 | show tables    |
|  3 | 0.00567425 | select * from offices  |
|  4 | 0.00052050 | show tables    |
|  5 | 0.01123300 | select * from payments  |
|  6 | 0.00111675 | show tables    |
|  7 | 0.02049625 | select * from productlines |
+----------+------------+----------------------------+

在排查SQL執行情況,或者是哪條SQL執行非常慢,慢在哪裡;profile都是非常的輔助工具。

顯示一條SQL的具體花銷在哪裡

mysql> show profile for query 7;
+----------------------+----------+
| Status    | Duration |
+----------------------+----------+
| starting    | 0.000043 |
| checking permissions | 0.000005 |
| Opening tables  | 0.014552 |
| init     | 0.000025 |
| System lock   | 0.000009 |
| optimizing   | 0.000004 |
| statistics   | 0.000011 |
| preparing   | 0.000010 |
| executing   | 0.000003 |
| Sending data   | 0.005653 |
| end     | 0.000010 |
| query end   | 0.000009 |
| closing tables  | 0.000020 |
| freeing items  | 0.000121 |
| cleaning up   | 0.000023 |
+----------------------+----------+

資訊一目瞭然,這樣我就能對SQL執行情況有個大概的瞭解。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。