Turning on query logging for your Aurora PostgreSQL DB cluster
You can collect more detailed information about your database activities, including queries, queries waiting for locks, checkpoints, and many other details by setting some of the parameters listed in the following table. This topic focuses on logging queries.
Parameter | Default | Description |
---|---|---|
log_connections | – | Logs each successful connection. To learn how to use this parameter
with |
log_disconnections | – | Logs the end of each session and its duration. To learn how to use this parameter
with |
log_checkpoints | – | Not applicable for Aurora PostgreSQL |
log_lock_waits | – | Logs long lock waits. By default, this parameter isn't set. |
log_min_duration_sample | – | (ms) Sets the minimum execution time above which a sample of statements is logged. Sample size
is set using the log_statement_sample_rate parameter. |
log_min_duration_statement | – | Any SQL statement that runs atleast for the specified amount of time or longer gets logged. By default, this parameter isn't set. Turning on this parameter can help you find unoptimized queries. |
log_statement | – | Sets the type of statements logged. By default, this parameter isn't set, but you can
change it to |
log_statement_sample_rate | – | The percentage of
statements exceeding the time specified in |
log_statement_stats | – | Writes cumulative performance statistics to the server log. |
Using logging to find slow performing queries
You can log SQL statements and queries to help find slow performing
queries. You turn on this capability by modifying the settings in the
log_statement
and log_min_duration
parameters as
outlined in this section. Before turning on query logging for your Aurora PostgreSQL DB cluster,
you should be
aware of possible password exposure in the logs and how to mitigate the risks. For
more information, see Mitigating risk of password exposure when using query logging.
Following, you can find reference information about the log_statement
and
log_min_duration
parameters.
log_statement
This parameter specifies the type of SQL statements that should get sent to the log. The
default value is none
. If you change this parameter to
all
, ddl
, or mod
, be sure to apply
recommended actions to mitigate the risk of exposing passwords in the logs. For
more information, see Mitigating risk of password exposure when using query logging.
- all
-
Logs all statements. This setting is recommended for debugging purposes.
- ddl
-
Logs all data definition language (DDL) statements, such as CREATE, ALTER, DROP, and so on.
- mod
-
Logs all DDL statements and data manipulation language (DML) statements, such as INSERT, UPDATE, and DELETE, which modify the data.
- none
-
No SQL statements get logged. We recommend this setting to avoid the risk of exposing passwords in the logs.
log_min_duration_statement
Any SQL statement that runs atleast for the specified amount of time or longer gets logged. By default, this parameter isn't set. Turning on this parameter can help you find unoptimized queries.
- –1–2147483647
-
The number of milliseconds (ms) of runtime over which a statement gets logged.
To set up query logging
These steps assume that your Aurora PostgreSQL DB cluster uses a custom DB cluster parameter group.
Set the
log_statement
parameter toall
. The following example shows the information that is written to thepostgresql.log
file with this parameter setting.2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
Set the
log_min_duration_statement
parameter. The following example shows the information that is written to thepostgresql.log
file when the parameter is set to1
.Queries that exceed the duration specified in the
log_min_duration_statement
parameter are logged. The following shows an example. You can view the log file for your Aurora PostgreSQL DB cluster in the Amazon RDS Console.2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------
Mitigating risk of password exposure when using query logging
We recommend that you keep log_statement
set to none
to avoid exposing
passwords. If you set log_statement
to all
, ddl
, or mod
,
we recommend that you take one or more of the following steps.
-
For the client, encrypt sensitive information. For more information, see Encryption Options
in the PostgreSQL documentation. Use the ENCRYPTED
(andUNENCRYPTED
) options of theCREATE
andALTER
statements. For more information, see CREATE USERin the PostgreSQL documentation. For your Aurora PostgreSQL DB cluster, set up and use the PostgreSQL Auditing (pgAudit) extension. This extension redacts sensitive information in CREATE and ALTER statements sent to the log. For more information, see Using pgAudit to log database activity.
-
Restrict access to the CloudWatch logs.
-
Use stronger authentication mechanisms such as IAM.