我想為 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 資料庫執行個體開啟查詢記錄。
簡短描述
若要在 PostgreSQL 上開啟查詢記錄,請修改下列與自訂參數群組的資料庫執行個體關聯的參數:
修改日誌參數時,資料庫執行個體的磁碟區可能需要更多空間。如果磁碟區的儲存空間已滿,則資料庫執行個體無法使用。最佳實務是修改 rds.log_retention_period 參數以清理不必要的日誌。使用 Amazon CloudWatch 指標 FreeStorageSpace 持續監控儲存空間的消耗也是最佳實務。當您看到儲存空間幾乎已滿時,可以增加儲存空間,以使資料庫執行個體始終可用。
解決方法
根據您要記錄的查詢,開啟 log_statement 或 log_min_duration_statement。無需修改兩個參數即可開啟記錄。
修改 log_min_duration_statement,以毫秒為單位設定閾值。這可讓您記錄所有需要時間超過設定的參數值的查詢。例如,假設您將 log_min_duration_statement 值設定為 500。發生這種情況時,Amazon RDS 會記錄所有需要超過半秒才能完成的查詢。如果將此參數的值設定為 2,000,Amazon RDS 會記錄所有需要超過兩秒才能完成的查詢。如果將參數值設定為 -1,則會關閉參數。Amazon RDS 不會根據完成時間記錄任何查詢。如果將參數值設定為 0,Amazon RDS 會記錄所有查詢。
**注意:**log_min_duration_statement 參數不依賴或干擾 log_statement 參數。
修改 log_statement 以控制記錄的 SQL 陳述式。預設值為無。您可以修改此參數的下列值:
- ddl 記錄所有資料定義語言 (DDL) 陳述式,例如 CREATE、ALTER 和 DROP。
- mod 記錄所有 DDL 和資料修改語言 (DML) 陳述式,例如 INSERT,UPDATE 和 DELETE。
- all 記錄所有查詢 (無論執行時間為何)。
**注意:**無論您為 log_statement 和 log_min_duration_statement 設定的值為何,查詢都會寫入日誌一次。
在 PostgreSQL 上開啟查詢記錄
完成下列步驟,在 PostgreSQL 上開啟查詢記錄:
**注意:**下列範例參數修改會記錄所有需要超過一秒的查詢,並記錄所有結構描述變更。
- 開啟 Amazon RDS 主控台,然後從導覽窗格中選擇資料庫。
- 選擇要記錄查詢的資料庫執行個體。
- 選擇組態檢視,以查看資料庫執行個體的詳細資訊,以及查看與資料庫執行個體關聯的參數群組。
**注意:**建立資料庫執行個體時,資料庫執行個體會與預設資料庫參數群組關聯。由於您無法修改此群組,因此請建立自訂參數群組業以修改參數群組。變更資料庫執行個體參數群組 (從預設至自訂群組) 時,必須重新啟動資料庫執行個體。
- 從執行個體組態窗格中選擇參數群組,然後選擇要修改的參數群組。
- 選擇編輯參數。
- 在篩選參數欄位中,選取您要變更的參數。例如:
輸入 log_statement,然後將值變更為 ddl。
輸入 log_min_duration_statement,然後將值變更為 1,000(此值以毫秒為單位,等於一秒)。
- 選擇儲存變更。
**注意:**這些參數是動態的。如果您的資料庫執行個體具有自訂參數群組,則無需重新啟動資料庫執行個體便可使這些參數生效。
確認記錄已開啟
儲存與資料庫執行個體關聯的參數群組之後,狀態會設定為套用中。在資料庫執行個體中設定參數群組之後,狀態將設定為同步中。若要確認記錄已開啟,請連接至資料庫執行個體。在此範例中,請確認日誌包含所有 DDL 陳述式以及所有需要超過一秒的查詢。然後,執行類似下列內容的命令:
CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;
SELECT pg_sleep(2);
SELECT generate_series(1,10000000) as test;
檢視查詢日誌
請完成下列步驟來檢視日誌:
1. 開啟 Amazon RDS 主控台。
2. 在導覽窗格中,選擇資料庫。
3. 選擇您的資料庫執行個體,然後選擇日誌檢視。
4. 在日誌與事件標籤中,選擇最近的日誌,然後選擇檢視日誌以查看日誌的內容。例如:
2018-12-19 11:05:32 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: statement: CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;
2018-12-19 11:10:36 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2010.247 ms statement: select pg_sleep(2);
2018-12-19 11:11:25 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2159.838 ms statement: SELECT generate_series(1,10000000) as test;
注意: 請確定您沒有將先前的參數設定為會產生廣泛記錄的值。例如,將 log_statement 設定為所有或將 log_min_duration_statement 設定為 0 會產生大量的記錄資訊。這會影響您的儲存空間消耗。若要將參數設定為這些值,請確定僅在短時間內執行此操作,以便進行疑難排解。進行疑難排解時密切監控儲存空間。
相關資訊
RDS for PostgreSQL 資料庫日誌檔案