log_connections |
Tham số chỉ định log thông tin khi kết nối. |
Mặc định tham số này là off, tức là ko log khi kết nối. Thực tế khi tham số này on thì mỗi lần kết nối dung lượng log cũng không xuất ra nhiều (2 dòng), ta nên để on để phân tích log dễ dàng hơn. Tham số này chỉ chỉ định được trước khi bắt đầu session.
$ psql -c "show log_connections"
log_connections
-----------------
on
(1 row)
$ tail $PGDATA/log/postgresql-Wed.log | grep -A1 "connection received"
2018-05-16 07:51:12.137 JST [22714] LOG: connection received: host=[local]
2018-05-16 07:51:12.138 JST [22714] LOG: connection authorized: user=postgres database=postgres
|
log_disconnections |
Tham số chỉ định log thông tin khi dữ liệu ngừng kết nối |
Mặc định tham số này là off. Giống như log_connections, tham số này cũng nên thiết lập on để phân tích log dễ dàng hơn.
$ psql -c "show log_disconnections"
log_disconnections
--------------------
on
(1 row)
$ tail -1 $PGDATA/log/postgresql-Wed.log
2018-05-16 07:53:49.485 JST [22754] LOG: disconnection: session time: 0:00:00.003 user=postgres database=postgres host=[local]
|
log_error_verbosity |
Tham số chỉ định lượng log chi tiết xuất ra cho mỗi messages |
Giá trị có thể thiết lập là, TERSE, DEFAULT, và VERBOSE. Ở thiết lập TERSE, những thông tin DETAIL, HINT, QUERY và CONTEXT không được xuất. VERBOSE ngoài việc xuất những thông tin này ra, vị trí dòng code, tên hàm, tên file source code cũng được hiện thị. Những hệ thống có workload nhỏ có thể thiết lập lên VERBOSE để phân tích log dễ dàng hơn |
log_duration |
Tham số cho phép xuất thời gian đã thực thi của mỗi câu lệnh SQL |
Mặc định tham số này là off và chỉ có super user mới thay đổi được
postgres=# set log_duration to on;
SET
postgres=# set client_min_messages to log;
LOG: duration: 0.075 ms
SET
postgres=# select pg_sleep(1);
LOG: duration: 1002.341 ms
pg_sleep
----------
(1 row)
postgres=#
|
log_line_prefix |
Tham số chỉ định tiền tố cho mỗi log messages |
Tham số này có thể chỉ định theo ký tự % cho các thông tin khác nhau, cụ thể bạn có thể xem tại đây. Từ phiên bản 10 mặc định cho tham số này là '%m [%p] ', tức là thông tin về thời gian bao gồm cả mili giây(%m) và ID của tiến trình thực hiện log(%p). Thông thường để phân tích log khi có sự cố, ta thường thêm các thông tin như %d: truy cập cơ sở dữ liệu nào, %h: truy cập từ IP address nào, %u: truy cập bằng user nào, %x: trong transaction ID nào.
[postgres@localhost ~]$ psql -c "show log_line_prefix"
log_line_prefix
---------------------------------------------------------
[%m host:%h database:%d user:%u PID:%p TransactionID:%x]
(1 row)
[postgres@localhost ~]$ tail -1 $PGDATA/log/postgresql-Wed.log
[2018-05-16 07:57:33.815 JST host:[local] database:postgres user:postgres PID:22817 TransactionID:0] LOG: disconnection: session time: 0:00:00.003 user=postgres database=postgres host=[local]
[postgres@localhost ~]$
|
log_statement |
Tham số cho phép log các lệnh SQL thực thi theo từng chủng loại chỉ định |
Giá trị cho phép là off(mặc định), ddl: các câu lệnh SQL liên quan tới định nghĩa (CREATE, ALTER, DROP), mod: các câu lệnh SQL liên quan tới thay đổi dữ liệu(INSERT, UPDATE, DELETE, TRUNCATE,...), all: tất cả các câu lệnh SQL. Lưu ý thiết lập all cho tham số này có ý nghĩa tương tự như thiết lập tham số log_min_duration_statement = 0, nhưng log_min_duration_statement xuất các câu lệnh SQL khi đã thực thi xong còn log_statement log khi câu lệnh vừa được chạy(có thể chưa hoặc kết thúc). Tùy vào yêu cầu về mornitoring hệ thống, ta có thể kết hợp tham số này với log_duration hoặc chỉ sử dụng log_min_duration_statement để theo dõi các câu lệnh SQL thực thi
postgres=# set log_statement to 'ddl';
SET
postgres=# set client_min_messages to log;
SET
postgres=# create table testtbl(id integer);
LOG: statement: create table testtbl(id integer);
CREATE TABLE
postgres=# insert into testtbl values(1);
INSERT 0 1
postgres=# drop table testtbl ;
LOG: statement: drop table testtbl ;
DROP TABLE
postgres=#
|
log_temp_files |
Cho phép log khi có file tạm xuất ra tùy thuộc vào dung lượng file chỉ định |
Đối với xử lý như hashjoin hay sort, PostgreSQL sử dụng bộ nhớ chỉ định trong tham số work_mem(cho mỗi process) để chứa dữ liệu tạm thời. Khi dữ liệu tạm thời vượt quá work_mem, PostgreSQL sẽ thực hiện sort/hashjoin trên đĩa cứng. Khi dung lượng file tạm sử dụng cho sort/hashjoin trên đĩa cứng lớn hơn log_temp_files, logger process sẽ xuất thông tin đó ra log file.
postgres=# set log_temp_files to 0;
SET
postgres=# set work_mem to 64;
SET
postgres=# show work_mem ;
work_mem
----------
64kB
(1 row)
postgres=# explain analyze select * from pg_class order by relname desc;
QUERY PLAN
----------------------------------------------------------------------------------------------------
-----------
Sort (cost=75.31..76.17 rows=342 width=262) (actual time=0.636..0.720 rows=343 loops=1)
Sort Key: relname DESC
Sort Method: external merge Disk: 64kB
-> Seq Scan on pg_class (cost=0.00..15.42 rows=342 width=262) (actual time=0.010..0.067 rows=34
3 loops=1)
Planning Time: 0.862 ms
Execution Time: 1.025 ms
(6 rows)
postgres=# \! tail -2 $PGDATA/log/postgresql-Wed.log
2018-05-16 08:10:36.530 JST [23134] LOG: temporary file: path "base/pgsql_tmp/pgsql_tmp23134.0", size 65536
2018-05-16 08:10:36.530 JST [23134] STATEMENT: explain analyze select * from pg_class order by relname desc;
postgres=#
|
log_checkpoints |
Cho phép log thông tin CHECKPOINT khi chức năng này thực thi |
Mặc định cho tham số này là off. Tham số này cần thiết khi tinh chỉnh hệ thống liên quan tới bộ nhớ đệm và tần xuất lưu lượng mỗi CHECKPOINT. Bạn có thể tham khảm thêm ở bài viết checkpoint |
log_lock_waits |
Tham số chỉ định xuất log liên quan khi lock wait cho session đó vượt quá thời gian chỉ định trong deadlock_timeout |
Mặc định cho tham số này là off. Nếu on PostgreSQL sẽ xuất log liên quan cho phiên đó khi quá thời gian deadlock_timeout(mặc định 1 giây) mà chưa thực thi được lock. Trong các hệ thống có work load (bạn có thể hiểu là tần xuất thực thi SQL) lớn, tham số này rất hữu ích cho việc tìm hiểu nguyên nhân slow query do lock wait hoặc phát hiện deadlock. Bạn có thể tham khảo thêm ở bài viết về lock |