跳至内容

如何为我的 Amazon RDS for PostgreSQL 数据库实例启用查询日志记录?

2 分钟阅读
0

我想为我的 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 数据库实例启用查询日志记录。

简短描述

根据要记录的查询,启用 log_statementlog_min_duration_statement。有关详细信息,请参阅 PostgreSQL 网站上的 log_min_duration_statementlog_statement。您无需修改这两个参数即可在 Amazon RDS for PostgreSQL 中启用日志记录。

要查看需要一定时间才能完成的查询的日志,请在阈值范围内以毫秒为单位修改 log_min_duration_statement 参数。例如,如果将参数值设置为 500,则 Amazon RDS 会记录需要超过半秒才能完成的所有查询。如果将参数值设置为 -1,则会禁用此参数。Amazon RDS 不会根据完成时间来记录查询。如果将参数值设置为 0,则 Amazon RDS 会记录所有查询。

要控制要记录的 SQL 语句,您可以修改 log_statement 参数的以下值:

  • ddl 会记录所有数据定义语言 (DDL) 语句,例如 CREATEALTERDROP
  • mod 会记录所有 DDL 和数据修改语言 (DML) 语句,例如 INSERTUPDATEDELETE
  • all 会记录所有查询,无论运行时间如何。

**注意:**log_statement 参数的默认值为 none

无论您为 log_min_duration_statementlog_statement 设置何值,Amazon RDS 都会将查询写入日志一次。但是,修改参数时,数据库实例的卷可能需要更多空间。为最大限度地减少存储使用量,请勿将参数设置为会生成大量日志记录的值,例如将 log_statement 设置为 all,将 log_min_duration_statement 设置为 0

由于卷存储空间已满时数据库实例不可用,因此最佳做法是修改 rds.log_retention_period 参数以删除不必要的日志。另一种最佳做法是使用 FreeStorageSpace Amazon CloudWatch 指标持续监控您的存储使用情况。如果存储空间接近已满状态,您可以增加存储空间,以便数据库实例始终可用。

解决方法

修改自定义参数组以启用日志记录

完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 创建自定义参数组,然后将其与您的数据库实例关联
    **注意:**如果您选择 Apply immediately(立即应用),则数据库实例会暂时不可用。
  3. 在导航窗格中,选择 Parameter group(参数组)。
  4. 选择您的自定义参数组。
  5. 选择 Edit Parameter(编辑参数)。
  6. Filter parameters(筛选参数)字段中,输入 log_statementlog_min_duration_statement
  7. 选择参数,然后进行修改。例如,您可以将 log_statement 更改为 ddl,或将 log_min_duration_statement 更改为 1000(1 秒)。
  8. 选择 Save changes(保存更改)。
    **注意:**由于参数是动态的,因此您无需重启数据库实例即可使参数更改生效。

参数组状态将更改为 Applying(正在应用)。参数组修改完成后,状态将更改为 In-sync(同步中)。

确认您已启用日志记录

完成以下步骤:

  1. 连接到数据库实例
  2. 运行以下命令:
    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;
    **注意:**请将示例值替换为您的值。

上述示例命令的输出会显示所有 DDL 语句以及执行时间超过 1 秒的查询。

查看查询日志

完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择您的数据库实例。
  4. 选择 Logs & Events(日志和事件)选项卡。
  5. Logs(日志)部分中,选择最新的日志,然后选择 View(查看)。
    日志示例:
    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;

相关信息

RDS for PostgreSQL 数据库日志文件