show profile 和 show profiles 命令用於展示SQL語句的資源使用情況,包括CPU的使用,CPU上下文切換,IO等待,內存使用等,這個命令對於分析某個SQL的性能瓶頸非常有幫助,藉助於show profile的輸出信息,能讓我們知道一個SQL在哪個階段耗時最長,消耗資源最多,從而為SQL優化,提高SQL性能提供重要的依據。
然而,這個命令很快將成為歷史了,因為MySQL 5.7 版本將會逐漸廢棄這個功能,取而代之的是使用Performance Schema,在廢棄之前,先熟悉一下這個功能的用法。
啟用profiling:
使用show profile之前,先啟用profiling, profiling是session級變量,session關閉,該session的profiling信息也會丟失。
mysql> set profiling = 1;
show profiles:
開啟profiling之後,執行幾條SQL,然後執行 show profiles 展示最近執行的多個SQL的執行耗時情況,具體能收集多少個SQL,由參數 profiling_history_size決定,默認值為15,最大值為100。如果設置為0,等同於關閉profiling。show profiles展示的是簡要的耗時信息,如果想了解某個SQL的具體耗時情況,執行show profile 查看。
show profile:
show profile 展示一個SQL語句的執行耗時細節,如果不加 for query {n} 子句,默認展示最新的一次SQL的執行情況,加了for query {n},表示展示第n個 SQL的執行情況。比如看第8個SQL,執行show profile for query 8;
在執行show profile時,可以加上類型子句,比如CPU,IPC等,查看具體某類資源的消耗情況,例如:show profile cpu,ipc for query 8;
show profile 和 show profiles 除了這兩個語句之外,可以展示所有的SQL語句的執行情況,包括有語法錯誤的SQL也會被監測到。比如上面看到了一個show table; 這個SQL有語法錯誤,但仍然被記錄到了show profiles;列表中。
show profile具體語法:
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 }