1. 是什么? 是MySQL提供的可以用來分析當(dāng)前會(huì)話中語句執(zhí)行的資源消耗情況的工具,可以用于sql調(diào)優(yōu)的測量。默認(rèn)是處于關(guān)閉狀態(tài)的,會(huì)保存最近15次的運(yùn)行結(jié)果。 2. 查看狀態(tài): 執(zhí)行如下命令即可查看profile的狀態(tài):
![]() 可以看到,現(xiàn)在是關(guān)閉的。 3. 開啟功能: 可以執(zhí)行如下語句將其開啟:
4. 運(yùn)行sql: 因?yàn)樯厦嫖覀円呀?jīng)開啟了profile,所以執(zhí)行的sql都會(huì)被記錄到相關(guān)文件中,下面我們隨便執(zhí)行幾段sql。
5. show profile: 執(zhí)行了sql之后,來查看show profile的結(jié)果:
![]() 查出來可以看到,執(zhí)行過的sql這里都有記錄,前面有對(duì)應(yīng)的id。然后我們可以根據(jù)id,查出該條sql執(zhí)行時(shí)的cpu、io等情況,比如我要查看id為14的這條sql執(zhí)行情況,那么就執(zhí)行:
![]() 可以看到,查出來的結(jié)果就涵蓋了sql執(zhí)行過程中的整個(gè)生命周期,從校驗(yàn)權(quán)限、打開表開始,一直到查詢結(jié)束,cleaning up。每個(gè)過程的cpu和io情況都對(duì)應(yīng)的展示出來了。上面我們查詢的字段是cpu和block io,那還有其他的嗎?當(dāng)然有,如下表:
查出來之后,我們要怎么知道生命周期中的哪個(gè)步驟有貓病呢?主要觀察如下四個(gè):
如果查出來的status列包含了上述四個(gè)中的一個(gè),都是會(huì)拖慢sql的執(zhí)行速度的。 6. 全局查詢?nèi)罩荆?/strong> 這個(gè)主要是用于開發(fā)、測試環(huán)境用來排查問題的,永遠(yuǎn)不要在生產(chǎn)環(huán)境中開啟此功能,因?yàn)槿罩緯?huì)非常非常多。 啟用方式有兩種:
執(zhí)行完之后,此后所執(zhí)行的sql都會(huì)保存到mysql庫的general_log表里。 掃描二維碼 |
|