如何使用 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 会记录需要超过半秒才能完成的所有查询。如果将此参数的值设置为 2000,则 Amazon RDS 会记录需要超过两秒才能完成的所有查询。如果将参数值设置为 -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 设置的值如何,查询都会写入到日志中一次。

在 PostgreSQL 上启用查询日志记录

完成以下步骤来在 PostgreSQL 上启用查询日志记录:

**注意:**以下示例参数修改会记录花费超过一秒的所有查询,还会记录所有架构更改。

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

确认日志记录已启用

保存与数据库实例关联的参数组后,状态设置为正在应用。在数据库实例中设置参数组后,状态设置为 in-sync。要确认日志记录已启用,请连接到数据库实例。在此示例中,确认日志包含所有 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 设置为 all 或将 log_min_duration_statement 设置为 0 会生成大量日志记录信息。这会消耗您的存储。要将参数设置为这些值,请确保仅在短时间内执行此操作以进行故障排除。在进行故障排除时,请密切监视存储空间。

相关信息

RDS for PostgreSQL 数据库日志文件