Fujitsu Enterprise Postgresのpostgresql.confファイルに設定するパラメータについて説明します。
postgresql.confファイルは、データ格納先に配置されています。
参考
4バイト符号付き整数の最大値は、OSにより異なります。使用するOSの定義に従ってください。
コアファイルを出力するディレクトリを指定します。本パラメータを指定しない場合は、データ格納先のディレクトリを指定したものとみなされます。本パラメータは、インスタンス起動時にパラメータ指定することでのみ設定できます。インスタンス起動中に動的変更することはできません。
コアファイルに含める内容を指定します。
full:サーバプロセスのメモリの内容をすべてコアファイルに出力します。
none:コアファイルを出力しません。
minimum:サーバプロセスのうち、共有メモリ以外の内容をコアファイルに出力します。コアファイルのサイズは小さくなります。ただし、場合によってはコアファイルが出力された原因の調査に必要な情報が十分に得られないことがあります。
本パラメータを指定しない場合は、“minimum”を指定したものとみなされます。本パラメータは、インスタンス起動時にパラメータ指定することでのみ設定できます。インスタンス起動中に動的変更することはできません。
キーストアのファイルを格納するディレクトリを指定します。他のデータベースクラスタとは異なる場所を指定してください。本パラメータは、インスタンス起動時にパラメータ指定することでのみ設定できます。インスタンス起動中に動的変更することはできません。
tde_kms.kms_conninfo_fileパラメータと同時に指定することはできません。
プラグインを使用して鍵管理システムに接続する場合に、プラグインを格納するディレクトリを絶対パスで指定します。このディレクトリにはデータベース管理者だけがプラグインを格納できるようにしてください。インスタンス起動時にパラメータ指定することでのみ設定できます。
tde_kms.enable_shared_dek(論理型)
透過的データ暗号化における暗号化テーブル空間ごとのデータ暗号化キーをバックエンドプロセス間で共有することを有効もしくは無効にします。デフォルトはoffです。インスタンス起動時にパラメータ指定することでのみ設定できます。
tde_kms.max_shared_dek(数値)
透過的データ暗号化においてテーブル空間ごとのデータ暗号化キーを共有する場合の共有されるデータ暗号化キーの最大数を指定します。デフォルトは1000です。インスタンス起動時にパラメータ指定することでのみ設定できます。
tde_kms.kms_conninfo_file(文字列)
鍵管理サービスをキーストアとして使用する場合に、鍵管理システムの接続情報を記述したファイルを指定します。keystore_locationパラメータと同時に指定することはできません。
鍵管理システムの接続情報ファイルは以下のいずれかの形式で作成してください。
kmip kms-name address port auth-method [auth-options]
custom kms-name plugin-name [plugin-options] [extra-args]
鍵管理システムに接続する方法として以下のいずれかを指定します。
kmip
この鍵管理システムにKMIPプロトコルを使用してアクセスします。この鍵管理システムにある暗号化キーを持ち出して使用します。
custom
プラグインモジュールを利用して鍵管理システムにアクセスします。暗号化/復号処理はプラグイン内、または鍵管理システム内で行われます。Fujitsu Enterprise Postgresは暗号鍵を直接的には使用しません。
kms-name
鍵管理システムに付けた鍵管理システム名で、マスタ暗号化キーの宣言やキーストアのオープン時に指定します。鍵管理システムの名称はこのファイル内で一意である必要があります。鍵管理システム名は、a-zで始まりa-z、数字(0-9)およびアンダースコアから構成される63文字以下の文字列でなければなりません。大文字と小文字は同一視されます。
address
鍵管理サービスのホスト名またはIPアドレスを指定します。
port
鍵管理サービスがサービスを待ち受けるポート番号を指定します。
auth-method
鍵管理サービスにおける認証方式を指定します。
auth-options
auth-methodに応じて、そのあとに認証方式のオプションを指定します。オプションはname=value形式のフィールドで複数指定することができます。
証明書を使用してKMIPサーバとクライアントであるFujitsu Enterprise Postgres側の相互を認証します。auth-optionsに以下を指定できます。
sslcert
クライアント証明書のファイル名を指定します。対応するフォーマットはPEM形式です。
sslkey
クライアント証明書に対して使用される秘密化キーのファイル名を指定します。対応するフォーマットはPEM形式です。ファイルをパスフレーズで暗号化する場合は、最大1023バイト以下のパスフレーズを使用してください。
sslkeypassphrase-obf
sslkeyで指定した秘密化キーファイルの難読化されたパスフレーズが格納されるファイルを指定します。このオプションを指定することで、サーバ起動時にキーストアを自動でオープンできるようになります。難読化されたファイルの作成はpgx_keystoreコマンドで行います。省略できます。
sslrootcert
SSL認証局の証明書のファイル名を指定します。対応するフォーマットはPEM形式です。接続先のサーバ証明書を検証するために利用されます。
例
kmip mykmipsvr mykmipsvr.example.com 5696 cert sslcert=postgres.crt sslkey=postgres.key sslrootcert=root.crt
注意
cert認証では、接続先のサーバが接続しようとしているサーバと同一かどうかを確認しません。sslrootcertで指定する認証局の証明書で署名されているサーバ証明書が使われているサーバであれば、正しい接続先と見なします。この動作による問題を回避するためには、KMIPサーバは独自CAまたは自己署名証明書を利用することを検討してください。
kms-name
鍵管理システムに付けた鍵管理システム名で、マスタ暗号化キーの宣言やキーストアのオープン時に指定します。鍵管理システムの名称はこのファイル内で一意である必要があります。鍵管理システム名は、a-zで始まりa-z、数字(0-9)およびアンダースコアから構成される63文字以下の文字列でなければなりません。大文字と小文字は同一視されます。
plugin-name
プラグインの名称を指定します。tde_kms.plugin_pathで指定したディレクトリにあるプラグインの名称と同じ名前の実行可能ファイルをプラグインモジュールとして使用します。
plugin-options
プラグインのその他のオプションを指定します。オプションはname=value形式のフィールドで複数指定することができます。以下のオプション名を指定できます。
kms-secret-obf
透過的データ暗号化を利用してキーストアの自動オープンを有効化する場合に、難読化されたKMSシークレットが格納されたファイルを指定します。難読化されたファイルの作成はpgx_keystoreコマンドで行います。難読化されたファイルの内容はFujitsu Enterprise Postgresが復号しプラグインに渡されます。透過的データ暗号化を利用してキーストアの自動オープンを有効にしない場合は省略できます。
extra-args
指定したシェルコマンドに渡す追加の引数を、arg=value形式で指定します。複数のextra-argsを指定した場合、その順序でvalueがシェルコマンドに渡されます。
例
custom mykms mykms arg=--profile arg=user1
tablespace_encryption_algorithm(文字列)
作成するテーブル空間の暗号化アルゴリズムを指定します。有効な値は AES128、 AES256、または none です。noneを指定した場合、暗号化は行いません。デフォルト値は none です。暗号化を行う場合、AES256の指定を推奨します。スーパーユーザーのみこの設定を変更できます。
pgx_dmpallコマンドがバックアップデータを格納するディレクトリを絶対パスで指定します。他のデータベースクラスタとは異なる場所を指定してください。本パラメータは、インスタンス起動時にパラメータ指定することでのみ設定できます。インスタンス起動中に動的変更することはできません。
このディレクトリは、バックアップするデータ格納先のディレクトリ、テーブル空間ディレクトリ、およびトランザクションログ格納先のディレクトリの外に配置してください。このディレクトリの内容はデータベースシステムが管理するため、利用者は任意のファイルを格納しないように注意してください。
Oracleデータベース互換のSUBSTR関数を利用する場合は、“search_path”パラメータに、“oracle”および“pg_catalog”を設定してください。“oracle”は、“pg_catalog”よりも前に指定する必要があります。
例
search_path = '"$user", public, oracle, pg_catalog'
参考
search_pathは、スキーマ検索パスの優先順位を指定する機能です。Oracleデータベース版のSUBSTR関数はoracleスキーマに定義されます。
search_pathについては、“PostgreSQL Documentation”の“Server Administration”の“Statement Behavior”を参照してください。
pgx_stat_lwlockおよびpgx_stat_latchに対し、統計情報の収集を有効にします。
on:統計情報の収集を有効にします。
off:統計情報の収集を無効にします。
本パラメータを指定しない場合は、“on”を指定したものとみなされます。
スーパーユーザーのみ、この設定を変更できます。
pgx_stat_sqlに対し、統計情報の収集を有効にします。
on:統計情報の収集を有効にします。
off:統計情報の収集を無効にします。
本パラメータを指定しない場合は、“on”を指定したものとみなされます。
スーパーユーザーのみ、この設定を変更できます。
ステーブルバッファテーブルに使用する共有メモリの割合をパーセンテージで指定します。
最小値:0
最大値:80
本パラメータを指定しない場合は、0を指定したものとみなされます。
VCIを利用した実行計画を選択する最も低いコストです。VCIを利用しない最良の実行計画のコスト値がこの値より低い場合には、そのVCIを利用しない実行計画を選択します。
最小値:0
最大値:4バイト符号付き整数の最大値
範囲外の値が指定された場合は、18000が設定されます。
本パラメータを指定しない場合は、18000を指定したものとみなされます。
VCIを管理するバックグラウンドワーカー数を指定します。インスタンス全体のワーカ数はmax_worker_processesにより制限されるため、max_worker_processesにここで設定した値を足してください。
最小値:1
最大値:8388607
範囲外の値が指定された場合は、8が設定されます。
本パラメータを指定しない場合は、8を指定したものとみなされます。
VCIの有効、または無効を指定します。
on:VCIを有効にします。
off:VCIを無効にします。
本パラメータを指定しない場合は、“on”を指定したものとみなされます。
vci.max_local_rosで指定したメモリが不足したことでVCI利用ができなかった場合の、ログ出力の有効、または無効を指定します。
on:ログ出力を有効にします。
off:ログ出力を無効にします。
本パラメータを指定しない場合は、“off”を指定したものとみなされます。
vci.maintenance_work_mem (数値)
CREATE INDEXなどのVCIのメンテナンス時に使用するメモリの最大サイズを指定します。
最小値:1MB
最大値:4バイト符号付き整数の最大値
範囲外の値が指定された場合は、256MBが設定されます。
本パラメータを指定しない場合は、256MBを指定したものとみなされます。
VCI検索時に使用するメモリの最大サイズを指定します。
最小値:64MB
最大値:4バイト符号付き整数の最大値
範囲外の値が指定された場合は、64MBが設定されます。
本パラメータを指定しない場合は、64MBを指定したものとみなされます。
並列検索で使用するバックグラウンドワーカーの最大数を指定します。インスタンス全体のワーカ数はmax_worker_processesにより制限されるため、max_worker_processesにここで設定した値を足してください。
並列検索で使用するバックグラウンドワーカーの最大数は、-8388607~8388607の範囲で指定可能です。
1以上の整数:指定した並列度で検索処理を実施します。
0:並列検索処理を停止します。
負数:環境から取得した最大CPU数から指定値を引いた並列度で、検索処理を実施します。
範囲外の値が指定された場合は、0が設定されます。
本パラメータを指定しない場合は、0を指定したものとみなされます。
vci.shared_work_mem (数値)
VCI並列検索時に使用するメモリの最大サイズを指定します。
最小値:32MB
最大値:4バイト符号付き整数の最大値
範囲外の値が指定された場合は、1GBが設定されます。
本パラメータを指定しない場合は、1GBを指定したものとみなされます。
GMC領域のメモリサイズを指定します。
次の計算式で算出された値を指定してください。
算出された値よりも小さい値を指定しても動作しますが、メタキャッシュがGMC領域に入りきらなくなるかもしれません。
その場合にはシステムが不要だと思ったメタキャッシュを破棄しますが、再度そのメタキャッシュが必要な場合にはメタキャッシュを展開する必要があるので、十分な性能を発揮できなくなります。
10MBよりも小さい値で、かつ、機能を無効にする0以外の値ではGlobal Meta Cache機能が動作できないためにデータベースの起動が失敗します。
0を設定するとGlobal Meta Cache機能は無効になります。デフォルトは0です。
この設定を変更するときはデータベースの再起動が必要です。
GMC領域のメモリサイズ = Max(10MB, (全ユーザーテーブル個数 × 0.4 KB + 全ユーザーインデックス個数 × 0.3 KB + 全ユーザーカラム数 × 0.8 KB)× 1.5(注)) 注) 安全係数(1.5) テーブル定義変更やシステムカタログの行が変更された場合に、一時的に変更前のGMCと変更後のGMCが共有メモリ上に存在する場合を考慮した値です。
pgx_stat_gmcに対し、統計情報の収集を有効にします。
on:統計情報の収集を有効にします。
off:統計情報の収集を無効にします。
本パラメータを指定しない場合は、“on”を指定したものとみなされます。
スーパーユーザーのみ、この設定を変更できます。
pgx_catalog_cache_max_size(数値)
バックエンドプロセスがカタログキャッシュとして使用するメモリ量の上限値を指定します。
8KB以上に設定することでカタログキャッシュ削除を有効にできます。
0を設定するとカタログキャッシュ削除は無効となります。デフォルト値は0です。
単位を指定しない場合はKBとして扱われます。
最小値:8KB
最大値:4バイト符号付き整数の最大値
パラメータ設定のための計算をする際、キャッシュサイズを決める要因を、テーブル数、インデックス数、カラム数として計算します。カタログキャッシュやリレーションキャッシュとして保持されるものには、データベース、ロール、あるいは、プロシジャなどのオブジェクトも含まれますが、これらの影響は上記の要因と比べて小さいためです。また、与えられたメモリをカタログキャッシュとリレーションキャッシュとで分配するので、pgx_relacion_cache_max_sizeの計算方法も含んでいます。
注意
ここでの計算方法は、どのバックエンドも同じようなアクセスをし、そのトランザクションも同程度の数の資源にアクセスすることを前提としています。特異的なバックエンドやトランザクションが少数ある場合には、それを誤差として除外して考えてください。
あるバックエンドプロセスが使用できるメモリ量を決めます。搭載メモリからデータベースキャッシュなどのシステム全体が必要とするメモリサイズを引いて、残りをコネクション数で除算するなどして決めてください。
最も良い性能が得られる値として、バックエンドが、その寿命の中でアクセスする全て資源についてのカタログキャッシュを保持したときのカタログキャッシュの総メモリサイズを以下の計算式で計算します。
Global Meta Cacheの有効/無効により、メモリ量は変わります。Global Meta Cacheを有効にしていると、キャッシュの大部分が共有メモリ上に配置されるので、必要とされるメモリ量が小さくなります。
Global Meta Cache有効時: (アクセスするテーブル数 + アクセスするインデックス数 + アクセスするカラム数) × 0.1KB × 1.5 (注) Global Meta Cache無効時: {アクセスするテーブル数 × 0.5KB(pg_classのタプルサイズ) + アクセスするインデックス数 × 0.5KB(pg_indexのタプルサイズ) + アクセスするカラム数 × 1.0KB(pg_statisticのタプルサイズ)} × 1.5 (注) 注) 安全係数(1.5) システムカタログには、可変長の型を持つカラムがあります。例えば、テーブル数に乗算している定数値はpg_classのタプルサイズですが、pg_classのrelnameは可変長データです。 すべての定義について、細かに計算することは現実的ではないので、上記の式に50%を上乗せしています。
2.と同様に、リレーションキャッシュについて以下の計算式で計算します。
(1.4KB × アクセスするテーブル数 + 2.4KB × アクセスするインデックス数) × 1.5 (注) 注) 安全係数(1.5) リレーションキャッシュは、テーブルやインデックスの定義を利用しやすいように構造化したものであり、様々なオブジェクトへのポインタを保持しており、それらのオブジェクトも含めてサイズが計上されます。また、テーブル定義によってメモリ割り当てされるオブジェクトの種類やその大きさが変わるため、可変長となります。 すべての定義に対応して計算することは現実的ではないため、50%を上乗せしています。
もし、1.の値 ≧ 2.の値 + 3.の値ならば、バックエンドプロセスは、許容された範囲ですべてのキャッシュを保持することが可能なので、キャッシュを制限する必要はありません。安全のためにキャップをしたいならば、2.の値をpgx_catalog_cache_max_sizeに設定し、3.の値をpgx_relation_cache_max_sizeに設定します。
1.の値 < 2.の値 + 3.の値ならば、キャッシュを制限する必要があります。しかし、1つのトランザクションが使用するキャッシュのサイズをこのパラメータで制限することはできません。したがって、以降のステップを踏んでください。
あるトランザクションが使用するカタログキャッシュを2.の計算式で計算します。
あるトランザクションが使用するリレーションキャッシュを3.の計算式で計算します。
1.の値 < 6.の値 + 7.の値ならば、1.の値を大きくする必要があります。つまり、場合によっては、搭載メモリを増やしたり、コネクション数を少なくする必要があります。
1.の値 ≧ 6.の値 + 7.の値ならば、本パラメータでキャッシュを制限することで1.の条件を満たせます。1.の値を、2.と3.の比で分配して、パラメータに設定します。2.に分配した値をpgx_catalog_cache_max_sizeに設定し、3.に分配した値をpgx_relation_cache_max_sizeに設定します。
9.で算出した値は、暫定的な値です。もし、目標の性能を満たすことができないならば、リレーションキャッシュに配分の重点を移すことを最初に試みてください。SQLを実行するときには、カタログキャッシュを元にして生成したリレーションキャッシュを主に参照するので、リレーションキャッシュを多く残しておいた方が有利だからです。それでも性能を満たすことができなければ、“14.1.4 Local Meta Cache制限機能の性能への影響とパラメータ調整”を参照しながら、パラメータを調整してください。
注意
テーブルをパーティショニングしている場合には、注意が必要です。
SQL文で親テーブルを指定するか、子テーブルを指定するかでキャッシュされる定義が変わります。特に、親テーブルを指定した場合には、すべての子テーブルの定義がキャッシュされることに注意してください。なぜなら、SQL文で親テーブルを指定する場合には、目的のデータが格納される子テーブルを決定するために、すべての子テーブルの定義を知る必要があるからです。なお、親テーブルのカラム情報は、キャッシュされません。
親テーブルを指定する場合:
アクセスするテーブル数 = アクセスする親テーブル数 + 定義された子テーブル数 カラム数 = 定義されたカラム数 × 定義された子テーブル数
子テーブルを直接指定する場合:
アクセスするテーブル数 = 実際にアクセスする子テーブル数 カラム数 = 定義されたカラム数 × 実際にアクセスする子テーブル数
例)
親テーブルT(インデックス数1、カラム数3)が子テーブルT1~T5(それぞれインデックス数1、カラム数3)に分割されているとします。SQLに親テーブルTを指定し、クエリの対象となるデータが存在する子テーブルがT1とT2に限定されていて、データアクセス時にT1とT2上に定義されたインデックスを使用した場合には、以下のように計算します。
テーブル数 = 1(親テーブル) + 5(子テーブル) = 6 インデックス数 = 2(アクセスするインデックス) カラム数 = 3(カラム数) × 5(子テーブル) = 15
SQLに子テーブルT1とT2を指定し、データアクセス時にT1とT2上に定義されたインデックスを使用した場合には、以下のように計算します。
テーブル数 = 2(子テーブル) インデックス数 = 2(アクセスするインデックス) カラム数 = 3(カラム数) × 2(子テーブル) = 6
pgx_relation_cache_max_size(数値)
バックエンドプロセスがリレーションキャッシュとして使用するメモリ量の上限値を指定します。
8KB以上に設定することでリレーションキャッシュ削除を有効にできます。
0を設定するとリレーションキャッシュ削除は無効となります。デフォルト値は0です。
単位を指定しない場合はKBとして扱われます。
最小値:8KB
最大値:4バイト符号付き整数の最大値
パラメータ設定のための計算方法は、pgx_catalog_cache_max_sizeの計算方法を参照してください。
pgx_cache_hit_log_interval(数値)
バックエンドプロセスごとのキャッシュ参照状況を表すメッセージを出力する時間間隔を指定します。
トランザクションが終了した時に、前にメッセージを出力してから、本パラメータに設定した時間を経過していたならば、メッセージを出力します。
0を設定するとトランザクションが終了するたびにメッセージを出力します。
-1を設定すると出力は無効となります。デフォルト値は10minです。
単位を指定しない場合はmsとして扱われます。
pgx_catalog_cache_max_size、pgx_relation_cache_max_sizeが無効に設定されている場合も、対応するキャッシュのメッセージ出力は無効となります。
サーバーに接続した直後には、ユーザー認証などのために、ユーザーアプリケーションからのリクエストの前に、小さなトランザクションが発生します。これらについてのヒット率を知ることには意味がないので、サーバーに接続してから、本パラメータに設定した時間が経過した後に開始したトランザクションの終了時にメッセージを出力します。
同じ理由で、0のような小さい値を設定すると、このような小さなトランザクションの終了に伴ってメッセージが出力されることがあります。
メッセージがどのトランザクションに対応しているかは、先頭に出力される情報から確認できます。
この情報は、パラメータlog_line_prefixの設定により変わります。
最小値:0
最大値:2147483647ms
参照
上記以外のpostgresql.confのパラメータについては、“PostgreSQL Documentation”の“Server Administration”の“Server Configuration”を参照してください。