如何使用 Amazon RDS 開啟 PostgreSQL 的查詢記錄?

2 分的閱讀內容
0

我想為 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 資料庫執行個體開啟查詢記錄。

簡短描述

若要在 PostgreSQL 上開啟查詢記錄,請修改下列與自訂參數群組的資料庫執行個體關聯的參數:

修改日誌參數時,資料庫執行個體的磁碟區可能需要更多空間。如果磁碟區的儲存空間已滿,則資料庫執行個體無法使用。最佳實務是修改 rds.log_retention_period 參數以清理不必要的日誌。使用 Amazon CloudWatch 指標 FreeStorageSpace 持續監控儲存空間的消耗也是最佳實務。當您看到儲存空間幾乎已滿時,可以增加儲存空間,以使資料庫執行個體始終可用。

解決方法

根據您要記錄的查詢,開啟 log_statementlog_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_statementlog_min_duration_statement 設定的值為何,查詢都會寫入日誌一次。

在 PostgreSQL 上開啟查詢記錄

完成下列步驟,在 PostgreSQL 上開啟查詢記錄:

**注意:**下列範例參數修改會記錄所有需要超過一秒的查詢,並記錄所有結構描述變更。

  1. 開啟 Amazon RDS 主控台,然後從導覽窗格中選擇資料庫
  2. 選擇要記錄查詢的資料庫執行個體。
  3. 選擇組態檢視,以查看資料庫執行個體的詳細資訊,以及查看與資料庫執行個體關聯的參數群組。
    **注意:**建立資料庫執行個體時,資料庫執行個體會與預設資料庫參數群組關聯。由於您無法修改此群組,因此請建立自訂參數群組業以修改參數群組。變更資料庫執行個體參數群組 (從預設至自訂群組) 時,必須重新啟動資料庫執行個體
  4. 執行個體組態窗格中選擇參數群組,然後選擇要修改的參數群組。
  5. 選擇編輯參數
  6. 篩選參數欄位中,選取您要變更的參數。例如:
    輸入 log_statement,然後將值變更為 ddl
    輸入 log_min_duration_statement,然後將值變更為 1,000(此值以毫秒為單位,等於一秒)。
  7. 選擇儲存變更
    **注意:**這些參數是動態的。如果您的資料庫執行個體具有自訂參數群組,則無需重新啟動資料庫執行個體便可使這些參數生效。

確認記錄已開啟

儲存與資料庫執行個體關聯的參數群組之後,狀態會設定為套用中。在資料庫執行個體中設定參數群組之後,狀態將設定為同步中。若要確認記錄已開啟,請連接至資料庫執行個體。在此範例中,請確認日誌包含所有 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 資料庫日誌檔案