環境をセットアップしたら、環境変数からその環境に含まれるディレクトリを確認します。
export PGHOME=/usr/local/pgsql/
export PGUSER=postgres
export PGPORT=5432
export PGDATA=/app/pgsql/data
export PGLOG=/app/pgsql/log/postgres.log
export PATH=$PGHOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
PATH=/usr/local/pgsql/bin:$PATH
export PATH
ディレクトリ構造と機能
ソフトウェアのインストールディレクトリ
/usr/local/pgsql/
Oracle の /app/oracle ソフトウェア インストール ディレクトリに相当し、psql、pg_ctl などのソフトウェアで実行できるコマンドの一部を以下に示します。
[postgres@yuan ~]$ cd /usr/local/pgsql/
[postgres@yuan pgsql]$ ll
total 16
drwxr-xr-x 2 root root 4096 Jul 9 17:54 bin
drwxr-xr-x 6 root root 4096 Jul 9 17:54 include
drwxr-xr-x 4 root root 4096 Jul 9 17:54 lib
lrwxrwxrwx 1 root root 26 Jul 9 17:56 postgresql-12.4 -> /usr/local/postgresql-12.4
drwxr-xr-x 6 root root 4096 Jul 9 17:54 share
[postgres@yuan pgsql]$ cd bin
[postgres@yuan bin]$ ll
total 12348
-rwxr-xr-x 1 root root 73808 Jul 9 17:54 clusterdb
-rwxr-xr-x 1 root root 73552 Jul 9 17:54 createdb
-rwxr-xr-x 1 root root 78416 Jul 9 17:54 createuser
-rwxr-xr-x 1 root root 68944 Jul 9 17:54 dropdb
-rwxr-xr-x 1 root root 68920 Jul 9 17:54 dropuser
-rwxr-xr-x 1 root root 975928 Jul 9 17:54 ecpg
-rwxr-xr-x 1 root root 142520 Jul 9 17:54 initdb
-rwxr-xr-x 1 root root 44344 Jul 9 17:54 pg_archivecleanup
-rwxr-xr-x 1 root root 130528 Jul 9 17:54 pg_basebackup
-rwxr-xr-x 1 root root 172512 Jul 9 17:54 pgbench
-rwxr-xr-x 1 root root 66984 Jul 9 17:54 pg_checksums
-rwxr-xr-x 1 root root 42880 Jul 9 17:54 pg_config
-rwxr-xr-x 1 root root 61376 Jul 9 17:54 pg_controldata
-rwxr-xr-x 1 root root 76888 Jul 9 17:54 pg_ctl
-rwxr-xr-x 1 root root 422888 Jul 9 17:54 pg_dump
-rwxr-xr-x 1 root root 109376 Jul 9 17:54 pg_dumpall
-rwxr-xr-x 1 root root 73064 Jul 9 17:54 pg_isready
-rwxr-xr-x 1 root root 93208 Jul 9 17:54 pg_receivewal
-rwxr-xr-x 1 root root 93832 Jul 9 17:54 pg_recvlogical
-rwxr-xr-x 1 root root 71256 Jul 9 17:54 pg_resetwal
-rwxr-xr-x 1 root root 187840 Jul 9 17:54 pg_restore
-rwxr-xr-x 1 root root 109784 Jul 9 17:54 pg_rewind
-rwxr-xr-x 1 root root 49216 Jul 9 17:54 pg_test_fsync
-rwxr-xr-x 1 root root 39152 Jul 9 17:54 pg_test_timing
-rwxr-xr-x 1 root root 148952 Jul 9 17:54 pg_upgrade
-rwxr-xr-x 1 root root 103904 Jul 9 17:54 pg_waldump
-rwxr-xr-x 1 root root 8227064 Jul 9 17:53 postgres
lrwxrwxrwx 1 root root 8 Jul 9 17:53 postmaster -> postgres
-rwxr-xr-x 1 root root 615376 Jul 9 17:54 psql
-rwxr-xr-x 1 root root 78032 Jul 9 17:54 reindexdb
-rwxr-xr-x 1 root root 86968 Jul 9 17:54 vacuumdb
データディレクトリ
/app/pgsql/data
Oracleがデータベース構築時に指定するデータディレクトリに相当し、データベースに必要なパラメータファイルおよびデータファイルは以下のとおりです。
[postgres@yuan include]$ cd /app/pgsql/data
[postgres@yuan data]$ ll
total 60
drwx------ 5 postgres postgres 41 Jul 9 18:02 base
drwx------ 2 postgres postgres 4096 Jul 9 18:06 global
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_commit_ts
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_dynshmem
-rw------- 1 postgres postgres 4789 Jul 9 18:03 pg_hba.conf
-rw------- 1 postgres postgres 1636 Jul 9 18:02 pg_ident.conf
drwx------ 4 postgres postgres 68 Jul 9 18:10 pg_logical
drwx------ 4 postgres postgres 36 Jul 9 18:02 pg_multixact
drwx------ 2 postgres postgres 18 Jul 9 18:05 pg_notify
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_replslot
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_serial
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_snapshots
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_stat
drwx------ 2 postgres postgres 63 Jul 9 20:50 pg_stat_tmp
drwx------ 2 postgres postgres 18 Jul 9 18:02 pg_subtrans
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_tblspc
drwx------ 2 postgres postgres 6 Jul 9 18:02 pg_twophase
-rw------- 1 postgres postgres 3 Jul 9 18:02 PG_VERSION
drwx------ 3 postgres postgres 60 Jul 9 18:02 pg_wal
drwx------ 2 postgres postgres 18 Jul 9 18:02 pg_xact
-rw------- 1 postgres postgres 88 Jul 9 18:02 postgresql.auto.conf
-rw------- 1 postgres postgres 26659 Jul 9 18:03 postgresql.conf
-rw------- 1 postgres postgres 53 Jul 9 18:05 postmaster.opts
-rw------- 1 postgres postgres 74 Jul 9 18:05 postmaster.pid
ファイルとディレクトリの説明:
pg_hba.conf:#认证配置文件,配置了允许哪些IP访问数据库,及认证方式等信息。
pg_ident.conf:#"ident"认证方式的用户映射文件。
PG_VERSION:#记录了数据库版本号信息。
postgresql.auto.conf:#作用同 postgresql.conf ,优先级高于 postgresql.conf,在数据库中通过alter命令更改的参数记录在此文件中。
postgresql.conf:#数据库实例主配置文件,基本上所有的数据库参数配置都在此文件中。
postmaster.opts:#记录数据库启动命令。
postmaster.pid:#数据库进程文件,数据库启动时被创建,关闭时消失。
base:#该目录包含数据库用户所创建的各个数据库,同时也包括postgres、template0和template1的pg_defaulttablespace。
global:#该目录包含集群范围的各个表和相关视图。(pg_database、pg_tablespace)
pg_dynshmem:#该目录包含动态共享内存子系统使用的文件。
pg_commit_ts:#该目录包含已提交事务的时间。
pg_logical:#该目录包含逻辑解码的状态数据。
pg_multixact:#该目录包含多事务状态数据。(等待锁定的并发事务)
pg_notify:#该目录包含LISTEN/NOTIFY状态数据。
pg_replslot:#该目录包含复制槽数据。
pg_snapshots:#该目录包含导出的快照。
pg_stat:#该目录包含统计子系统的永久文件。
pg_stat_tmp:#该目录包含统计子系统的临时文件。
pg_subtrans:#该目录包含子事务状态数据。
pg_tblspc:#该目录包含表空间的符号链接。
pg_twophase:#该目录包含预备事务的状态文件。
pg_wal:#该目录包含wal日志。
pg_xact:#该目录包含事务提交状态数据。
ログディレクトリ
/app/pgsql/log/ パスはカスタマイズされています。ここでデータベースのさまざまなログを構成できます。この環境では、データベースの起動ログとシャットダウン ログのみが構成されます。
[postgres@yuan log]$ cd /app/pgsql/log/
[postgres@yuan log]$ ll
total 4
-rw------- 1 postgres postgres 1006 Jul 9 21:21 postgres.log
以上がディレクトリ構造とその機能の紹介です。
設定ファイルpostgresql.confの詳細説明
PostgreSqlの初期化が完了すると、 PGDATA 配下に設定ファイルが生成されますので postgresql.conf
、何も変更せずに初期化完了後スムーズにデータベースを起動することができます 設定ファイルを見ると、設定パラメータのほとんどがコメントアウトされていることがわかりますデフォルトでデータベースに組み込まれており、残りのいくつかのパラメータだけがコメントアウトされておらず、システムによって書き換えられています(データベースのバージョンが異なると、書き換えパラメータが異なる場合があります)。たとえば、次のパラメータは書き換えられています。 12.4ページにあります。テスト環境ではデフォルトのパラメータを使用できますが、運用環境で使用する場合は、デフォルトパラメータの最適化と設定が必要です。Alibaba Cloud の最良の実験と pg 公式マニュアルを参照して、運用環境で使用できる設定を学習および整理してください。本番環境。
max_connections = 100
shared_buffers = 128MB
dynamic_shared_memory_type = posix
max_wal_size = 1GB
min_wal_size = 80MB
log_timezone = 'PRC'
datestyle = 'iso, mdy'
timezone = 'PRC'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
配置脚本
shared_buffers
次のスクリプトでは、実際のeffective_cache_size
環境に応じていくつかのパラメータを変更するだけです log_directory
。
#connection control
listen_addresses = '*'
max_connections = 2000
superuser_reserved_connections = 10
tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 10
password_encryption = md5
#memory management
shared_buffers = 16GB #推荐操作系统物理内存的1/4
max_prepared_transactions = 2000
work_mem = 8MB
maintenance_work_mem = 2GB
autovacuum_work_mem = 1GB
dynamic_shared_memory_type = posix
max_files_per_process = 24800
effective_cache_size = 32GB #推荐操作系统物理内存的1/2
#write optimization
bgwriter_delay = 10ms
bgwriter_lru_maxpages = 1000
bgwriter_lru_multiplier = 10.0
bgwriter_flush_after = 512kB
effective_io_concurrency = 0
max_worker_processes = 256
max_parallel_maintenance_workers = 6
max_parallel_workers_per_gather = 0
max_parallel_workers = 28
#wal optimization
synchronous_commit = remote_write
full_page_writes = on
wal_compression = on
wal_writer_delay = 10ms
wal_writer_flush_after = 1MB
commit_delay = 10
commit_siblings = 5
checkpoint_timeout = 30min
max_wal_size = 32GB
min_wal_size = 16GB
archive_mode = on
max_wal_senders = 64
wal_keep_segments = 15
wal_sender_timeout = 60s
max_replication_slots = 64
hot_standby_feedback = off
#log optimization
log_destination = 'csvlog'
logging_collector = on
log_directory = '/pg12.4/logs' # 日志存放路径,提前规划在系统上创建好
log_filename = 'postgresql-%a.log'
log_file_mode = 0600
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 1GB
#audit settings
log_min_duration_statement = 5s
log_checkpoints = on
log_connections = on
log_disconnections = on
log_error_verbosity = verbose
log_line_prefix = '%m [%p] %q %u %d %a %r %e '
log_statement = 'ddl'
log_timezone = 'PRC'
track_io_timing = on
track_activity_query_size = 2048
#autovacuum
autovacuum = on
vacuum_cost_delay = 0
old_snapshot_threshold = 6h
log_autovacuum_min_duration = 0
autovacuum_max_workers = 8
autovacuum_vacuum_scale_factor = 0.02
autovacuum_analyze_scale_factor = 0.01
autovacuum_freeze_max_age = 1200000000
autovacuum_multixact_freeze_max_age = 1250000000
autovacuum_vacuum_cost_delay = 0ms
#system environment
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'
詳細な説明
接続設定
- listen_addresses: サーバーがクライアント接続をリッスンする TCP/IP アドレスを指定します。デフォルト値は localhost で、ローカル接続のみが許可されます。
- max_connections: データベースの同時接続の最大数を決定します。デフォルト値は通常 100 接続です。カーネル設定がサポートしていない場合 (initdb 中に決定)、この数よりも少なくなる可能性があります。
- superuser_reserved_connections: スーパー ユーザー用に予約されている接続の数。デフォルトは 3 であり、これより少なくすることはできません
max_connections
。
メモリ設定
shared_buffers: データベース サーバーが使用する共有メモリ。デフォルトは通常 128M です。カーネル設定がサポートしていない場合 (initdb 中に決定)、それよりも小さくなる可能性があります。この設定は少なくとも 128 キロバイトである必要があります。shared_buffers の推奨値はシステム メモリの 25% です。PostgreSQL はオペレーティング システムの高速バッファにも依存しているため、shared_buffers をシステム メモリよりも 40% 多く設定すると、負荷が高くなる可能性があります。
max_prepared_transactions: 同時に「準備済み」状態にできるトランザクションの最大数を設定します。このパラメータをゼロ (デフォルト設定) に設定すると、準備済みトランザクション機能が無効になります。準備されたトランザクションを使用するには、max_prepared_transactions を少なくとも max_connections と同じ大きさに設定します。
work_mem: 単一のクエリ操作 (並べ替えやハッシュ テーブルなど) で使用できる最大メモリ。デフォルト値は 4MB です。ORDER BY、DISTINCT、マージ結合はすべて、並べ替え操作、ハッシュ結合、ハッシュベースの集計、ハッシュを使用します。 -based aggregation. ハッシュ テーブルは、ハッシュ IN サブクエリ処理で使用されます。
maintenance_work_mem: メンテナンス操作 (VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY など) で使用される最大メモリ。デフォルト値は 64M です。設定を大きくすると、データベース ダンプのクリーニングと復元のパフォーマンスが向上します。
autovacuum_work_mem: 各 autovacuum ワーカー プロセスが使用できるメモリの最大量。デフォルト値は -1 で、代わりに maintenance_work_mem の値が使用されることを意味します。maintenance_work_mem によって割り当てられたリソースはインデックスの構築やその他の操作にも使用されるため、個別に割り当てることをお勧めします。
Dynamic_shared_memory_type: サーバーによって使用されるメモリ管理方法。可能な値は、posix (shm_open を使用して割り当てられた POSIX 共有メモリの場合)、sysv (shmget を介して割り当てられた System V 共有メモリの場合)、windows (Windows 共有メモリの場合)、mmap (データ ディレクトリに格納されている共有メモリの場合) です。マップされたファイルは共有メモリをシミュレートします)。すべての値がすべてのプラットフォームでサポートされているわけではありません。プラットフォームで最初にサポートされるオプションがそのデフォルト値です。mmap オプションはどのプラットフォームでもデフォルトではありません。また、オペレーティング システムが変更されたページを繰り返しディスクに書き戻すため、システムの I/O 負荷が増加するため、通常はその使用は推奨されません。ただし、pg_dynshmem ディレクトリが RAM ディスクに保存されている場合、または他の共有メモリ機能が利用できない場合に便利です。
Effective_cache_size: 単一のクエリで使用できる有効なディスク バッファ サイズのプランナの推定値。値が大きいほどインデックス スキャンが使用される可能性が高く、値が小さいほど順次スキャンが使用される可能性が高くなります。このパラメータは、PostgreSQL によって割り当てられる共有メモリのサイズには影響せず、カーネル ディスク バッファリングも保持しません。推定目的のみに使用されます。デフォルト値は 4GB で、推奨値はシステム メモリの 50% 以上です。
IO設定
bgwriter_delay: バックグラウンド ライター アクティビティのラウンド間の遅延。各ラウンドで、ライターは一定数のダーティ バッファに対して書き込みを発行し、その後 bgwriter_lay の間スリープして繰り返します。バッファ プールにダーティ バッファがない場合、bgwriter_lay に関係なくスリープ時間が長くなります (デフォルト値は 200ms)。
bgwriter_lru_maxpages: 各ラウンドでバックグラウンド ライターによってこの数を超えるバッファは書き出されません。このパラメータをゼロに設定すると、バックグラウンド書き込みが無効になります。デフォルト値は 100 バッファです。
bgwriter_lru_multiplier: 最近必要なバッファーの平均数に bgwriter_lru_multiplier を掛けた値を使用して、次のラウンドで必要となるバッファーの数を推定できます。ダーティ バッファは、クリーンで再利用可能なバッファが多数存在するまで書き出されます (ただし、各ラウンドで書き出されるバッファの数は bgwriter_lru_maxpages を超えません)。したがって、1.0 の設定は、予測値に一致するバッファの数だけを書き込む「十分な」戦略を表します。値を大きくすると、ピーク時の需要からある程度のバッファリングを提供できます。デフォルト値は 2.0 です。
効果的_io_concurrency: この値が設定されている場合、ディスク先読みは無効になります。シーケンシャル スキャンとインデックス スキャンの両方でディスク先読みを使用できます。オフにすることをお勧めします。デフォルト値は 1 です。
max_worker_processes: システムがサポートできるバックグラウンド プロセスの最大数。デフォルト値は 8 です。この値を変更する場合は、max_Parallel_workers、max_Parallel_maintenance_workers、max_Parallel_workers_per_gather も調整することを検討してください。
max_Parallel_workers: システムでサポートされる並列処理の最大数を設定します。デフォルト値は 8 です。並列ワーカー プロセスは max_worker_processes によって確立されたワーカー プロセス プールから取得されるため、この値を max_worker_processes より大きく設定しても効果がないことに注意してください。
max_Parallel_maintenance_workers: 1 つのユーティリティ コマンドで開始できる並列の最大数。現在パラレル ワーカーの使用をサポートしているユーティリティ コマンドは CREATE INDEX であり、B ツリー インデックスをパラレルに構築する場合にのみサポートされており、VACUUM には FULL オプションがありません。並列ワーカーは、max_worker_processes によって作成されたプロセス プールから取得され、その数は max_Parallel_workers によって制御され、デフォルト値は 2 です。
max_Parallel_workers_per_gather: 許可される並列クエリの最大数を設定します。並列クエリは、非並列クエリよりも多くのリソースを消費する可能性があります。この値を 0 に設定すると、並列クエリの実行が無効になります。デフォルト値は 2 です。
wal_compression: このパラメータが on の場合、full_page_writes が on (デフォルト値は on) の場合、または基本バックアップ中に、PostgreSQL サーバーは WAL に書き込まれるフル ページ イメージを圧縮します。圧縮されたページ画像は、WAL の再生中に解凍されます。デフォルト値はオフです。この設定を変更できるのはスーパーユーザーのみです。このパラメータをオンにすると、回復不能なデータ破損の危険を冒さずに WAL が占有するスペースを減らすことができますが、WAL の記録中および WAL の再生中に圧縮のための追加の CPU オーバーヘッドが発生します。
wal_writer_delay: WAL ライターが WAL をフラッシュする頻度を時間単位で指定します。WAL をフラッシュした後、非同期にコミットされたトランザクションによって早期にウェイクアップされない限り、ライターは wal_writer_delay で指定された時間スリープします。最新のフラッシュが wal_writer_lay より前に発生し、wal_writer_flush_after WAL の値より小さい場合、WAL はオペレーティング システムにのみ書き込まれ、ディスクにはフラッシュされません。デフォルト値は 200 ミリ秒です。
commit_delay: commit_delay は、WAL フラッシュが開始される前に時間遅延を追加します。システム負荷が十分に高く、特定の間隔内で追加のトランザクションをコミットできる場合は、1 回の WAL フラッシュでより多くのトランザクションをコミットできるようにすることで、グループ コミットのスループットを向上させることができます。ただし、各 WAL フラッシュの遅延も最大 commit_lay まで増加します。他にコミットする準備ができているトランザクションがない場合は遅延が無駄になるため、フラッシュが開始される直前に他のアクティブなトランザクションが少なくとも commit_siblings (デフォルトは 5) ある場合にのみ遅延が実行されます。さらに、fsync が無効になっている場合、遅延は実行されません。
Checkpoint_timeout: 自動 WAL チェックポイント間の最大時間。適切な範囲は 30 秒から 1 日の間です。デフォルトは 5 分です。このパラメータの値を増やすと、クラッシュからの回復に必要な時間が長くなります。
max_wal_size: 自動 WAL チェックポイント間で WAL が拡張できる最大サイズ。これはソフト制限であり、高負荷、archive_command の失敗、wal_keep_size の設定が高いなどの特別な状況下では、WAL サイズが max_wal_size を超えることがあります。デフォルトは 1 GB です。このパラメータを増やすと、クラッシュからの回復に必要な時間が長くなる可能性があります。
min_wal_size: WAL ディスク使用量がこの設定を下回っている限り、古い WAL ファイルは直接削除されるのではなく、将来のチェックポイントでの使用のために常にリサイクルされます。これを使用すると、大規模なバッチ ジョブの実行など、WAL 使用量のピークに対処するために十分な WAL スペースを確保できます。値を単位なしで指定した場合、メガバイト単位で指定され、デフォルトは 80 MB になります。
archive_mode: archive_mode が有効な場合、archive_command コマンドを設定することで、完了した WAL セグメントをアーカイブ ストレージに送信できます。無効にする off に加えて、on と always の 2 つのモードがあります。通常の操作では、2 つのモードに違いはありませんが、always に設定すると、WAL アーカイバはアーカイブ リカバリ モードまたはフォールバック モードでも有効になります。常時モードでは、アーカイブから復元されたファイル、またはストリーミング コピーによって転送されたすべてのファイルが (再度) アーカイブされます。wal_level が最小に設定されている場合、archive_mode を有効にすることはできません。
max_replication_slots: サーバーがサポートできるレプリケーション スロットの最大数。デフォルト値は 10 です。これを、現在利用可能なレプリケーション スロットよりも少ない値に設定すると、サーバーは起動できなくなります。さらに、レプリカ スロットの使用を許可するには、wal_level をレプリカ以上に設定する必要があります。
synchronous_commit パラメータの説明
オプションは 5 つあります: on、off、local、remote_write、remote_apply。
単一インスタンス環境:
on: データベースがトランザクションをコミットするとき、wal は最初に wal バッファに書き込み、次に wal ログ ファイルに書き込みます。これを on に設定すると、トランザクションを送信するときに、ローカル wal が wal ログに書き込む前に待機する必要があることを意味しますクライアントに成功を返します。オンがデフォルト設定であり、データベースは非常に安全ですが、パフォーマンスは低下します。
local: local の意味は on と似ており、トランザクションを送信するときに、クライアントに成功を返す前にローカル wal が書き込まれるのを待つ必要があることを意味します。
off: データベースがトランザクションをコミットするとき、ローカルの wal バッファが wal ログに書き込まれるのを待つ必要はなく、クライアントに成功を返します。これを off に設定すると、データベースにいくつかのリスクが生じます。データベースがダウンしてデータベースが再起動されると、最後に送信されたトランザクションの数が失われる可能性があります。後で、これらのトランザクションは異常終了したとみなされ、ロールバックされます。データベースの精度を必要とせず、データベースのパフォーマンスを追求するシナリオに適しています。
ストリーミングレプリケーション環境:
on: ストリーミング レプリケーション マスター データベースがトランザクションを送信するときに、クライアントに成功を返す前に、スタンバイ データベースがプライマリ データベースから送信された wal ログ ストリームを受信し、それを wal ファイルに書き込むまで待機する必要があることを示します。 on は、ローカルの WAL がディスク上に配置され、スタンバイ データベースもディスク上に配置されていることを意味します。永続的な WAL は 2 つありますが、現時点ではバックアップ データベースは再実行されていません。このオプションを選択すると、トランザクションの応答時間が長くなります。
Remote_write: ストリーミング レプリケーション マスター データベースがトランザクションを送信するときに、スタンバイ データベースがプライマリ データベースから送信された wal ログ ストリームを受信し、それをスタンバイ ノードのオペレーティング システム キャッシュに書き込むまで待機する必要があることを示します。その後、マスター データベースに成功を返します。この場合、スタンバイ データベースは異常にシャットダウンされます。転送された wal ログが失われるリスクはありませんが、スタンバイ オペレーティング システムが異常クラッシュした場合、転送された wal が失われるリスクがあります。このとき、wal は可能性があります。簡単に言えば、remote_write はローカルを意味します。wal はディスク上に配置されており、スタンバイ データベースの wal はまだスタンバイ オペレーティング システムのキャッシュ内にあります。 1つの永続的な壁。このオプションを選択すると、トランザクションの応答時間が短縮されます。
Remote_apply: ストリーミング レプリケーション マスター データベースがトランザクションを送信するときに、スタンバイ データベースがプライマリ データベースから送信された wal ストリームを受信し、それを wal ファイルに書き込むまで待機する必要があることを示します。同時に、スタンバイ データベースは完了します。クライアントに成功を返す前にやり直します。簡単に言うと、remote_apply は、ローカル WAL がディスク上に配置され、スタンバイ データベース WAL がディスク上に配置されて再実行されたことを意味します。この設定により、永続的な WAL コピーが 2 つ存在することが保証され、スタンバイデータベースも再実行されました。このオプションを選択すると、トランザクション応答時間が最も長くなります。
ログ設定
log_destination: stderr、csvlog、syslog の 3 つの出力方法があり、Windows ではイベントログもサポートされています。デフォルトは stderr です。csvlog を使用する場合は、logging_collector を有効にする必要があります。csvlog と stderr を同時に使用することもでき、両方の形式でログが記録されます。
logging_collector: ログ コレクター。標準エラー出力に送信されたログ メッセージをキャプチャし、これらのメッセージをログ ファイルにリダイレクトするバックグラウンド プロセスです。デフォルトは OFF です。
log_directory: ログ保存パスlogging_collector が有効な場合、このパラメータはログ ファイルが作成されるディレクトリを決定します。
log_filename: ログ名の形式、デフォルトは ですpostgresql-%Y-%m-%d_%H%M%S.log
。
log_file_mode: デフォルトの権限は 0600 で、サーバー所有者のみがログ ファイルの読み取りまたは書き込みができることを意味します。その他の一般的に使用される設定は 0640 で、所有者のグループのメンバーがファイルを読み取ることができます。ただし、この設定を利用するには、log_directory を変更してクラスター データ ディレクトリの外部にファイルを保存する必要があることに注意してください。いずれにしても、ログ ファイルには機密データが含まれている可能性があるため、ログ ファイルを誰でも読み取れるようにするのは賢明ではありません。
log_truncate_on_rotation:logging_collector が有効な場合、このパラメータにより PostgreSQL は同じ名前の既存のログ ファイルを切り詰めます (追加ではなく上書きします)。ただし、切り捨ては、サイズベースのローテーションではなく時間ベースのローテーションにより、新しいファイルを開いたときにのみ発生します。閉じた場合、どのような場合でも、以前に存在していたファイルが追加されます。
log_rotation_age:logging_collector が有効な場合、このパラメータは、新しいログ ファイルが作成されるまでに 1 つのログ ファイルが使用される最大時間を決定します。デフォルトは 24 時間です。このパラメータをゼロに設定すると、新しいログ ファイルの時間ベースの作成が無効になります。
log_rotation_size:logging_collector が有効な場合、このパラメータは個々のログ ファイルの最大サイズを決定します。この量のデータがログ ファイルに送信されると、新しいログ ファイルが作成されます (デフォルト値は 10M)。新しいログ ファイルのサイズベースの作成を無効にするには、0 に設定します。
log_min_duration_statement: 遅い SQL を記録するための時間しきい値。この時間を超える SQL はログに記録されます。デフォルト値は -1 で、遅い SQL は記録されません。
log_checkpoints: チェックポイントと再起動ポイントをサーバー ログに記録するかどうかを制御します。バッファに書き込まれたデータや書き込みにかかった時間など、一部の統計もログ メッセージに含まれます。デフォルト値はオフです。
log_connections: 接続情報をログに記録するかどうかを制御します。サーバーへの接続試行がログに記録され、クライアント認証の正常な完了もログに記録されます。セッション中に変更することはできません。デフォルトはオフです。
log_disconnections: セッションの終了をログに記録するかどうかを制御します。ログ出力は、log_connections と同様の情報を提供しますが、セッション中に加えてセッション期間も表示されます。この情報はセッション中に変更できず、デフォルトはオフです。
log_error_verbosity: 有効な値は、TERSE、DEFAULT、および VERBOSE です。TERSE では、DETAIL、HINT、QUERY、および CONTEXT エラー メッセージのロギングが除外されます。VERBOSE 出力には、SQLSTATE エラー コード、ソース コード ファイル名、関数名、エラーが発生した行番号が含まれます。デフォルトはデフォルトです。
log_line_prefix: ログの内容を設定します。デフォルト値は、’%m [%p] '
タイムスタンプとプロセス ID を記録することです。
log_statement: どの SQL ステートメントをログに記録するかを制御します。有効な値は none (off)、ddl、mod、および all (すべてのステートメント) です。mod はすべての ddl ステートメントに加えて、INSERT、UPDATE、DELETE、TRUNCATE、COPY FROM などのデータ変更ステートメントをログに記録します。PREPARE、EXECUTE、および EXPLAIN ANALYZE にも、適切なタイプのコマンドが含まれている場合はログに記録されます。デフォルトはなしです。
log_timezone: サーバー ログに書き込まれるタイムスタンプのタイム ゾーンを設定します。デフォルト値は GMT です。
log_filename 形式の文字の説明
%a #星期的英文单词的缩写:如星期一, 则返回 Mon
%A #星期的英文单词的全拼:如星期一,返回 Monday
%b #月份的英文单词的缩写:如一月, 则返回 Jan
%B #月份的引文单词的缩写:如一月, 则返回 January
%c #返回datetime的字符串表示,如03/08/15 23:01:26
%d #返回的是当前时间是当前月的第几天
%f #微秒的表示: 范围: [0,999999]
%H #以24小时制表示当前小时
%I #以12小时制表示当前小时
%j #返回 当天是当年的第几天 范围[001,366]
%m #返回月份 范围[0,12]
%M #返回分钟数 范围 [0,59]
%P #返回是上午还是下午–AM or PM
%S #返回秒数 范围 [0,61]。。。手册说明的
%U #返回当周是当年的第几周 以周日为第一天
%W #返回当周是当年的第几周 以周一为第一天
%w #当天在当周的天数,范围为[0, 6],6表示星期天
%x #日期的字符串表示 :03/08/15
%X #时间的字符串表示 :23:22:08
%y #两个数字表示的年份 15
%Y #四个数字表示的年份 2015
%z #与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z #时区名称(如果是本地时间,返回空字符串)
log_line_prefix 形式の文字の説明
%a #应用名
%u #用户名
%d #数据库名
%r #远程主机名或 IP 地址,以及远程端口
%h #远程主机名或 IP 地址
%b #后端类型
%p #进程 ID
%t #无毫秒的时间戳
%m #带毫秒的时间戳
%n #带毫秒的时间戳(作为 Unix 时代)
%i #命令标签:会话当前命令的类型
%e #SQLSTATE 错误代码
%c #会话 ID:见下文
%l #对每个会话或进程的日志行号,从 1 开始
%s #进程开始的时间戳
%v #虚拟事务 ID (backendID/localXID)
%x #事务 ID (如果未分配则为 0)
%q #不产生输出,但是告诉非会话进程在字符串的这一点停止;会话进程忽略
%% #纯文字%
自動バキューム設定
autovacuum: サーバーが自動クリーニング ランチャー バックグラウンド プロセスを実行するかどうかを制御します。デフォルトはオンですが、自動クリーニングが適切に機能するには、track_counts を有効にする必要があります (デフォルトで有効)。このパラメータは、postgresql.conf ファイルまたはサーバー コマンド ラインでのみ設定できます。テーブル ストレージ パラメータを変更することで、テーブルの自動クリーニングを無効にできます。このパラメータが無効になっている場合でも、システムはトランザクション ID のロールバックを防ぐために必要に応じてクリーンアップ プロセスを開始することに注意してください。
old_snapshot_threshold: スナップショット使用時の「スナップショットが古すぎる」エラーのリスクを回避するために、クエリ スナップショットを使用できる最小時間を設定します。このしきい値時間を超えたデータはクリアされ、長期的なスナップショットの使用を防ぐことができます。スナップショットのインフレ、デフォルト値は -1 (この機能を無効にする) で、実質的にスナップショットの有効期間制限を無限に設定します。
log_autovacuum_min_duration: この時間しきい値を超える自動クリーニング アクションがログに記録されます。このパラメータを 0 に設定すると、すべての自動クリーニング アクションが記録されます。デフォルト値は -1 (自動クリーニング アクションの記録を無効にします)。さらに、このパラメータが -1 以外の値に設定されている場合、ロック違反または同時削除により自動クリーンアップ アクションがスキップされると、これに関するメッセージがログに記録されます。このパラメータをオンにすると、自動クリーンアップ アクティビティを追跡するのに便利ですが、テーブルのストレージ パラメータを変更することで、個々のテーブルのこの設定をオーバーライドできます。
autovacuum_max_workers: 同時に実行できる autovacuum プロセス (autovacuum イニシエーターを除く) の最大数を設定します。デフォルト値は 3 です。
autovacuum_vacuum_scale_factor: バキューム自動クリーニング操作をトリガーする dml の割合。デフォルト値は 0.2 です。テーブルの dml 操作がテーブル データ ボリュームの 20% を占めると、バキューム自動クリーニング操作がトリガーされます。テーブルのサイズが小さいことを防ぐため、データ ボリュームが頻繁にクリーンアップされないようにするには、autovacuum_vacuum_threshold に関連します (パラメータのデフォルト値を 50 に変更します。バキューム自動クリーニングは、テーブル内の少なくとも 50 個のデータが dml 操作に送信された場合にのみトリガーされます)。共に働く。
autovacuum_analyze_scale_factor: 自動バキューム分析操作をトリガーする DML 比率。デフォルト値は 0.1 です。テーブルの DML 操作がテーブル データ ボリュームの 10% を占めると、自動バキューム分析操作がトリガーされます。テーブルのサイズが小さいことを防ぐため、データ ボリュームが頻繁に分析されるのを防ぐには、autovacuum_analyze_threshold (パラメーターのデフォルト値を 50 に変更します。バキューム (自動分析) は、テーブル内の少なくとも 50 個のデータが dml 操作に送信された場合にのみトリガーされます。パラメータは連携して機能します。
autovacuum_freeze_max_age: テーブルの pg_class.relfrozenxid の最大値。この値を超えると、xid はリセットされます。デフォルト値は 2 億です。自動クリーニングが無効になっている場合でも、システムは自動クリーニング プロセスを開始することに注意してください。ロールバックを防ぎます。
autovacuum_multixact_freeze_max_age: テーブルの pg_class.relminmxid の最大値。この値を超えると、xid はリセットされます。デフォルト値は 4 億です。自動クリーニングが無効になっている場合でも、システムは自動クリーニング プロセスを開始することに注意してください。ロールバックを防ぎます。
autovacuum_vacuum_cost_lay: 自動 VACUUM 操作で使用されるコスト遅延値を指定します。-1 (デフォルト値) が指定された場合は、vacuum_cost_lay 値 (デフォルト値 2ms) が使用されます。
追加情報
本番環境の各ビジネステーブルは機能、使用頻度、「デッドタプル」の増加率などが異なるため、重要な本番ビジネステーブルについてはビジネス状況に応じてパラメータ値を個別に設定することをお勧めします。
-
特に頻繁に DML 操作を行うテーブルの場合は、次のような設定を行います。
ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.01);
-
特に頻繁に DML 操作を行うインデックス フィールドとテーブルの場合は、次のような設定を行います。
ALTER TABLE mytable SET (fillfactor=80);
-
データベース テーブルに挿入し、次のような設定を行うだけです。
ALTER TABLE mytable SET (autovacuum_freeze_max_age = 10000000);
システム環境の設定
datestyle: 日付と時刻の値の表示形式と、あいまいな日付入力値を解釈するためのルールを設定します。歴史的な理由から、この変数には、出力形式宣言 (ISO、Postgres、SQL、またはドイツ語) と入力/出力の年/月/日の順序 (DMY、MDY、または YMD) という 2 つの別々の部分が含まれています。これらは個別に設定することも、一緒に設定することもできます。キーワード Euro および European は DMY の同義語であり、キーワード US、NonEuro および NonEuropean は MDY の同義語です。組み込みのデフォルトは ISO、MDY ですが、initdb は、選択された lc_time ゾーンの動作に対応する設定で構成ファイルを初期化します。
timezone: タイムスタンプの表示と解釈に使用するタイムゾーンを設定します。組み込みのデフォルトは GMT ですが、これは通常 postgresql.conf で上書きされ、initdb はそのシステム環境に対応する設定をインストールします。
lc_messages: メッセージ表示の言語を設定します。許容される値はシステムに依存します。この変数が空の文字列 (デフォルト) に設定されている場合、値はシステムに依存する方法でサーバーの実行環境から継承されます。
一部のシステムでは、このゾーン分類が存在しません。この変数は引き続き設定できますが、効果はありません。同様に、目的の言語の翻訳メッセージが存在しない場合もあります。この場合、引き続き英語のメッセージが表示されます。
この設定を変更できるのはスーパーユーザーのみです。これは、サーバー ログとクライアントに送信されるメッセージの両方に影響するためです。値が正しくないと、サーバー ログの読みやすさが低下する可能性があります。
lc_monetary: to_char 関数ファミリーを使用するなど、金額の書式設定に使用される領域を設定します。許容される値はシステムに依存します。この変数が空の文字列 (デフォルト) に設定されている場合、値はシステムに依存する方法でサーバーの実行環境から継承されます。
lc_numeric: to_char 関数ファミリーを使用するなど、数値の書式設定に使用される領域を設定します。許容される値はシステムに依存します。この変数が空の文字列 (デフォルト) に設定されている場合、値はシステムに依存する方法でサーバーの実行環境から継承されます。
lc_time: to_char 関数ファミリーを使用するなど、日付と時刻の書式設定に使用される領域を設定します。許容される値はシステムに依存します。この変数が空の文字列 (デフォルト) に設定されている場合、値はシステムに依存する方法でサーバーの実行環境から継承されます。
default_text_search_config: 構成を指定するための明示的なパラメータを持たないテキスト検索関数バリアントによって使用されるテキスト検索構成を選択します。組み込みのデフォルトは pg_catalog.simple ですが、一致する領域が識別できる場合、initdb はその構成を使用します選択した lc_ctype 地域設定初期化構成ファイルに対応します。