Setting sysctl values#
デフォルトでは、TPAはターゲットインスタンスにさまざまなsysctl値を設定し、それらを/etc/sysctl.conf
に含めて、リブート後も持続するようにします。
オプションでsysctl_values に独自の値を指定できます。
cluster_vars:
sysctl_values:
kernel.core_pattern: core.%e.%p.%t
vm.dirty_bytes: 4294967296
vm.zone_reclaim_mode: 0
指定した値は、その変数のTPAのデフォルト値がある場合より優先されます。設定は最初にsysctl.conf
行ごとに追加され、最後にsysctl -p でロードされます。
Dockerおよびlxdインスタンスはsysctlの設定をサポートしていないため、TPAはこれらのプラットフォームでこの手順を完全にスキップします。
Hugepages#
デフォルトでは、TPAはPostgresがshared_buffers
に使用するアーキテクチャのデフォルトサイズx86_64で2MBのhugeページを予約します。これは、
hugepages=N をカーネルコマンドラインに追加し、
vm.nr_hugepages = N から/etc/sysctl.conf
に書き込むことにより実行されます。
Postgresでより大きなヒュージページサイズ通常x86_64で1GBを使用したい場合は、
huge_page_size をPostgresスタイルのメモリ文字列に設定します。
instances:
- Name: primary
vars:
huge_page_size: 1GB
huge_page_size が設定されている場合、TPAは次のことを行います。
カーネルコマンドラインでそのサイズのページを予約します。例
hugepagesz=1G hugepages=N;/etc/sysctl.confからvm.nr_hugepagesを省略しますそのsysctlはアーキテクチャのデフォルトサイズのプールにのみ適用され、他のサイズにはサイレントに無効です。そしてPostgresが選択したプールからのページを使用するように、
postgresql.confでhuge_page_sizeGUCを設定します。
cluster_vars
ではなく、個々のPostgresインスタンスでhuge_page_size
を設定するのがほとんどの場合、正しいです。カーネルコマンドラインで行われた予約は、ブート時に通常のメモリから取得されるため、同じクラスター内のBarmanサーバーまたは他の非PostgresインスタンスはPostgresノードと同じ割り当てが必要です。
デフォルトでは、TPAはshared_buffers
プラス合計RAMの3%を巨大ページサイズで割ったものとして、予約する巨大ページ数を計算します。
nr_hugepages
を直接設定することにより、この計算をオーバーライドできます。
instances:
- Name: primary
vars:
huge_page_size: 1GB
nr_hugepages: 16
注釈
下位互換性のため、 nr_hugepages が明示的に設定されていない場合、既存の`sysctl_values['vm.nr_hugepages']` がページ数として受け入れられます。
デフォルトでは、TPAはカーネルコマンドラインでtransparent_hugepageを「never」に設定し、スクリプト/etc/tpa/rc.local
をインストールして、sys
ファイルシステムを介してブート時に設定します。別の設定を使用するには、インスタンスvars
またはcluster_vars でtransparent_hugepage をalways
またはmadvise に設定して、すべてのインスタンスを制御します。