PostgreSQL 11生産環境共通パラメータ構成参照

4615 ワード

背景


構築日:20190327バージョン:Postgresql-11サーバー構成:8コアcpu 16 GBメモリ.※比較的小さいですが、以下の構成はこの基準を例にします.Postgresqlサービス状態:単機yumインストール、データTBレベルであるが、同時性は高くなく、主にデータ分析に用いられる.主従をしていない.

プロファイルメソッドの変更

  • デフォルトプロファイルpostgresql.conf.各行はパラメータを表し、#はコメントを表します.次の方法で上書きしない限り、PGにデフォルト値を指定します.
  • postgresql.auto.conf.手動で編集することはできません.ファイルにはAlter SYSTEMコマンドの設定が保存されています.優先度>postgresql.conf.
  • SQLコマンドパラメータを変更します.
  • ALTER SYSTEMコマンドは、プロファイルの変更と同様に、グローバルデフォルト値を変更します.
  • ALTER DATABASEコマンドを使用すると、データベースのグローバル設定を上書きできます.
  • ALTER ROLEコマンドでは、ユーザーが指定した値でグローバル設定とデータベース設定4を上書きし、セッションレベルのパラメータを変更できます.SHOW/SET
  • SHOW===current_setting(setting_name text)
  • SET ===set_config(setting_name, new_value, is_local)

  •  SET configuration_parameter TO DEFAULT;
      :
     UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter';
    

    プロファイルの再ロード

  • 変更プロファイルsudo-u postgres/usr/pgsql-11/bin/pg_を再起動しないctl reload -D $PGDATA
  • SQL関数pg_reload_conf()
  • 再起動サービスはSINGUP信号です.

  • 重点:生産パラメータ配置参考


    各パラメータのデフォルト値は、別の記事、デフォルトパラメータを参照できます.
    max_connections = 300
    データベースの最大同時接続数を決定します.
  • 参考値:物理メモリ(GB)*50を超えない.

  • shared_buffers =4GB
    データベース・サーバで使用する共有メモリ・バッファの量を設定します.デフォルトは通常128メガバイト(128 MB)
  • 参照値:1/4ホストメモリ
  • work_mem = 16MB
  • は、一時ディスクファイルに書き込む前に内部ソート操作およびハッシュテーブルで使用されるメモリ量を記述する.並べ替え、並べ替え、並べ替えには並べ替えが必要で、一時的なディスクへの落下を生成する前に、メモリに一部のスペースが消費されます.同じ時刻に、このパラメータに従ってメモリが割り当てられるソート作業が多い場合がありますので、この値はあまり大きくできません.文のソート操作が大きい場合は、セッションレベルでパラメータを設定し、set work_men=‘2 GB’で、実行速度を上げます.
  • 参照値:#1/4ホストメモリ/256(ワーク_memを256個同時に使用すると仮定)
  • maintenance_work_mem =1GB
    VACUM、CREATE INDEX、ALTER TABLE ADD FOREGNKEYなどのメンテナンス操作で使用するメモリの最大量を指定します.このような操作は頻繁ではないので、workよりもmenはずいぶん大きいです.
  • 参照メモリの1/4をautovacuum_で割るmax_workers数.システムメモリが32 Gを超える場合は、1 GBに設定することをお勧めします.64 GBを超える場合は、2 GBに設定することをお勧めします.128 GBを超える場合は、4 GBに設定することをお勧めします.主な役割は、データベース・ダンプのクリーンアップとリカバリのパフォーマンスを向上させ、autovacuum_を設定することです.max_workersマッチング値でいいです.

  • 次の3つのパラメータは、主に同時作業者の数を制御し、パフォーマンスに大きな影響を与えません。


    max_worker_processes = 32
    システムがサポートできるバックグラウンドプロセスの最大数は、多くのprocessesが取得する必要がある根源であるため、できるだけ十分なスレッド数を保証します.
    max_parallel_workers = 4
    パラレルワーカー数、max_worker_プロセス取得ですので、後者より大きくはできません.
  • 参照値:cpu-4
  • max_parallel_workers_per_gather=4
    各クエリーの並列作業者数は、上の2つより大きくできません.
  • 参照値:cpu-4
  • effective_cache_size
    プランナが単一のクエリーで使用可能な有効ディスクバッファサイズを設定すると、より高い値がインデックススキャンをより使用可能にし、より低い値がシーケンススキャンをより使用可能にします.推定の目的にのみ使用されます
  • 参照値:メモリ半分
  • ログ関連


    logging_collector = on
    ログコレクタの起動
    log_destination = ‘csvlog’
    stderr,csvlog,syslog,and eventlog(windows)ログ記録フォーマット、デフォルトはstderrです.csvlogはcsv形式で出力でき、分析しやすい.需要を分析していない場合は、個人的にデフォルトを推奨すればいいです.
    log_directory = ‘log’
    ログはPGDATAに出会った場所を格納します
    log_filename = ‘postgresql-%a.log’
    logログファイル名、ログ出力周波数を制御します.上は1週間保存し、毎日1つのlogログファイルです.

    SQL監査関連ログ


    log_min_duration_statement = 5s; (重要)
    スロークエリログレコードは、5 s以上実行される文がスロークエリとみなされます.業務状況に応じて設定する.
    log_duration = off
    各文の時間が記録されます.
    log_statement = ‘mod’
  • ddl=CREATE、ALTER、DROPなどのデータ定義文.
  • mod=ddl+データ修正文、例えばINSERT、UPDATE、DELETE、TRUNCATE、およびCOPY FROM.
  • all=すべての文ですが、構文エラーを含まない文
  • log_lock_waits = on
    セッションがdeadlockを超えるまでロックを取得するtimeoutの場合、ログを記録するかどうか.
    deadlock_timeout = 1s
    デッドロック検出前に1つのロックで待機していた合計時間.

    チェックポイント関連パラメータ


    checkpoint_warning=30 sチェックポイント周波数チェック
    チェックポイントが30 s未満の頻度でトリガーされると、logログにmax_を追加するように注意されます.wal_size.
  • リファレンス設定:ハードディスクのパフォーマンスが良好であれば小さく設定でき、ハードディスクのパフォーマンスが悪い場合は大きく設定できます.このパラメータは性能に影響しない.実際のcheckpointが発生する頻度をチェックするために使用されます.

  • checkpoint_timeout=30 minsチェックポイントトリガ間隔
    自動チェックポイントの出発時間は、このパラメータの値を大きくするとクラッシュリカバリに要する時間が増加します.ディスクのパフォーマンスが良ければ、適切に削減できます.この値を小さくすると、チェックポイントの周波数が増加し、パフォーマンスが低下します.
    max_wal_size = 8GB
  • 参照値:ホストメモリ1/2は自動WALチェックポイントでWALを最大サイズに成長させ、このサイズになるとチェックポイントが動作します.

  • min_wal_size = 1GB
    WALディスクの使用率はこの設定より低く、古いWALファイルの総数は回収され、WALの使用中のピークを処理するのに十分なWAL空間が確保されている.
  • 参照値:ホストメモリ1/8
  • ふろく


    log_duration=onとlog_min_duration_statement=0の違い前者はすべてのクエリー時間が記録され,後者はクエリー時間>0が記録される.一つの意味に聞こえる.
    違い:log_min_duration_statementはSQLテキストを強制的に記録し、log_durationはSQLテキストを記録しません.
    つまり、log_duration=on同時log_min_duration_statement=5 sの場合.
    すべての文は時間が記録されますが、クエリが5 sを超える文だけがSQL文が記録されます.
    個人的にはlog_durationは特殊なシーンでしか意味がない.log_min_duration_statementはもう十分です.
    本稿ではパラメータ設定を主に参考とし,現れないパラメータは設定を必要としないという意味ではない.パラメータの意味とどのように設定するか分からないパラメータを設定するときは、この文章を参考にすることができます.