如何使用 Amazon RDS for PostgreSQL 启用查询日志记录?

上次更新时间:2020 年 6 月 24 日

如何为 PostgreSQL 数据库实例启用 Amazon Relational Database Service (Amazon RDS) 的查询日志记录? 

简短描述

要在 PostgreSQL 上启用查询日志记录,请修改与数据库实例关联的自定义参数组,更改以下参数的值:

修改日志参数时,可能需要占用数据库实例卷的更多空间。如果该卷的存储空间已满,则此数据库实例将不可用。最好是相应地修改 rds.log_retention_period 参数以清除旧的日志。使用 Amazon CloudWatch 指标 FreeStorageSpace 持续监控存储消耗也是一种最佳做法,如果需要,可以增加它。

解决方法

您可以启用 log_statementlog_min_duration_statement,具体取决于您要记录的查询。您无需修改上述两个参数即可启用日志记录。

修改 log_min_duration_statement 可设置一个以毫秒为单位的阈值,这样您可以记录花费时间超过所设参数值的所有查询。例如,如果您将 log_min_duration_statement 值设为 500,则 Amazon RDS 会记录完成时间超时 0.5 秒的所有查询(无论查询类型如何)。同样,如果您将此参数的值设为 2000,则 Amazon RDS 会记录完成时间超时 2 秒的所有查询。如果将参数值设置为 -1,则会禁用该参数,并且 Amazon RDS 不会根据完成时间记录任何查询。如果将参数值设置为 0,则 Amazon RDS 会记录所有查询。
注意:log_min_duration_statement 参数不会依赖或干扰 log_statement 参数。

修改 log_statement 可控制需要记录的 SQL 语句。默认值为 none,并且您可以修改此参数的值,如下所示:

  • ddl 记录所有数据定义语言 (DDL) 语句,例如 CREATE、ALTER 和 DROP。
  • mod 记录所有 DDL 和数据修改语言 (DML) 语句,例如 INSERT、UPDATE 和 DELETE。
  • all 记录所有查询(不管执行时间如何)。

注意:不管您将 log_statementlog_min_duration_statement 设为何值,查询都不会两次写入日志。

在 PostreSQL 上启用查询日志记录

要在 PostgreSQL 上启用查询日志记录,请按以下步骤操作:

注意:以下示例参数修改会记录以下内容:花费时间超过 1 秒的所有查询(不管查询类型如何)以及所有架构更改(DDL 语句,不论完成时间如何)。

  1. 打开 Amazon RDS 控制台,然后从导航窗格中选择数据库
  2. 选择要记录其查询的数据库实例。
  3. 选择配置视图可查看数据库实例的详细信息,以及哪些参数组与此数据库实例相关联。
    注意:在您创建数据库实例之后,该数据库实例会与默认数据库参数组关联。由于您无法修改此组,因此请创建一个自定义参数组来修改此参数组。更改此数据库实例参数组(从默认到自定义组)时,您必须重启此数据库实例
  4. 实例配置窗格中选择参数组,然后选择您要修改的参数组。
  5. 选择编辑参数
  6. 筛选参数字段中,选择您要更改的参数。例如:
    输入 log_statement,然后将其值更改为 ddl
    输入 log_min_duration_statement,然后将其值更改为 1000。(此值以毫秒为单位,因此 1000 等于 1 秒)。
  7. 选择保存更改
    注意:这些参数是动态的。如果您的数据库实例已有一个自定义参数组,则您不需要重启数据库实例,即可使这些参数生效。

确认已启用日志记录

保存与您的数据库实例关联的参数组之后,状态为适用。在您的数据库实例中设置此参数组之后,状态为同步。要确认日志记录已启用(在本示例中,所有 DDL 语句以及花费时间超过 1 秒的所有查询),请连接到数据库实例。然后,运行类似以下内容的命令:

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. 日志和事件选项卡中,选择最新的日志,然后选择查看日志即可查看日志内容。例如:
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 设置为 all 或将 log_min_duration_statement 设置为 0 或非常小的数字会生成大量的日志记录信息。这会影响您的存储消耗。如果需要将参数设置为这些值,请确保仅出于故障排除的目的在短时间内这样做,并在整个过程中密切监控存储空间。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?