全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL General log常見問題

更新時間:Oct 16, 2025

當開啟general log後,該檔案會記錄使用者的所有操作,包括每條SQL語句的執行細節。當訪問量大或者長時間不清理general log檔案時,會佔用大量的儲存空間,導致儲存空間耗盡。本文為您列舉general log相關的常見問題和解決方案。

背景資訊

基於以下原因,RDS MySQL選擇TABLE作為general log的預設儲存格式:

  1. 儲存為FILE格式使用者無法進行查詢和直接下載,因為使用者無法直接存取RDS MySQL的檔案。

  2. general log和slow log同時受log_output參數影響,RDS MySQL在採集slow log時使用了rotate的機制,需要儲存為TABLE格式。

General log佔據大量儲存空間

問題描述

RDS MySQL執行個體儲存空間已滿。查看執行個體儲存空間使用量,如果發現general_log_size過大,可判斷是general log檔案過大的問題。

問題原因

當RDS MySQL開啟了general log後,該檔案記錄了使用者的所有操作,包括每條SQL語句的執行細節,無論是查詢、插入、更新還是刪除操作。當業務訪問量較大或長期未清理general log檔案時,該檔案將持續增長。若不及時處理,最終將耗盡執行個體儲存空間。

General log導致效能問題

問題描述

串連數上升,CPU使用率升高。通過SHOW PROCESSLIST或者查看innodb_trx表等方式,可見大量串連處於Waiting for table level lock狀態。

問題原因

RDS MySQL選擇TABLE作為general log的預設儲存格式,各線程串列寫入general log,而寫入general log時需擷取中繼資料鎖(MDL)和表級鎖,該表級鎖導致了“Waiting for table level lock”狀態的出現。

General log導致RTO變長

問題描述

執行個體崩潰恢復變長,在此期間執行個體處於無法串連狀態。

問題原因

執行個體非正常Shutdown,general log的Crash標記位會被置為true,導致執行個體重啟後進入到自動回復的邏輯,當表很大時,恢復很長,此過程中執行個體無法串連。

解決方案

清理general log檔案

  1. 關閉general log(運行參數值設為OFF),以防止產生新的日誌。詳情請參見設定執行個體參數

  2. 使用高許可權帳號串連RDS MySQL執行個體,執行如下語句清理general log檔案,等待一段時間後,可以在執行個體監控處查看general log佔用情況。

    說明

    RDS MySQL 5.6版本執行個體不支援通過TRUNCATE命令清理general log檔案。如需進行清理,請聯絡我們

    TRUNCATE TABLE mysql.general_log;

建議您在日常使用資料庫的過程中關閉general log,僅在調試或跟蹤問題時臨時開啟general log,使用完成後及時清理與關閉,以防資料庫訪問量大或長時間不清理general log導致檔案堆積,佔滿執行個體儲存空間。如您需要查看與分析SQL語句執行詳情,可以選擇以下兩種方式:

  • (推薦)開啟SQL洞察和審計:系統自動記錄與分析執行的SQL語句,相關洞察與審計資料存放區在資料庫自治服務DAS中,不佔用RDS執行個體儲存空間且不影響執行個體效能。

  • 臨時開啟general log:您可以臨時開啟general log調試或跟蹤問題,通過以下命令查詢SQL語句執行情況,在調試完成後關閉並清理general log檔案。

    SELECT * FROM mysql.general_log;

後續維護

您可以手動擴容執行個體儲存空間,也可以開啟儲存空間自動擴容功能,在執行個體儲存空間達到設定的閾值時,系統會自動擴容儲存空間。