PostgreSQLを初めて使用する場合、直面する最も一般的な課題は、データベース環境を調整する方法です。
PostgreSQLをインストールすると、基本的なpostgresql.confファイルが自動的に生成されます。この構成ファイルは通常、使用しているオペレーティングシステムに応じて、データディレクトリ内に保持されます。たとえば、Ubuntuでは、PostgreSQLは構成(pg_hba.conf、postgresql.conf、pg_ident.conf)を/ etc/postgresqlディレクトリ内に配置します。 PostgreSQLデータベースを調整する前に、まずpostgresql.confファイルを見つける必要があります。
しかし、使用する適切な設定は何ですか?そして、最初に設定された値は何ですか? PGTuneなどの外部ツール(およびClusterControlなどの代替ツール)を使用すると、この特定の問題を解決するのに役立ちます。
PGTuneとは何ですか?
PGTuneは、2ndQuadrantのGregSmithによって最初に作成された構成ウィザードです。これは、残念ながらサポートされなくなったPythonスクリプトに基づいています。 (新しいバージョンのPostgreSQLはサポートされていません。)その後、pgtune.leopard.in.ua(元のPGTuneに基づく)に移行し、PGデータベースの構成設定に使用できる構成ウィザードになりました。
>PGTuneは、特定のハードウェア構成の最大パフォーマンスに基づいてPostgreSQLの構成パラメーターを計算するために使用されます。ただし、多くの設定はハードウェア構成だけでなく、データベースのサイズ、クライアントの数、およびクエリの複雑さにも依存するため、これは特効薬ではありません。
PGTuneの使用方法
古いバージョンのPGTuneは、シェルコマンド(Ubuntuを使用)から呼び出すことができるPythonスクリプトに基づいていました:
[email protected]:~/pgtune-master# $PWD/pgtune -L -T Mixed -i /etc/postgresql/9.1/main/postgresql.conf | sed -e '/#.*/d' | sed '/^$/N;/^\n/D'
stats_temp_directory = '/var/run/postgresql/9.1-main.pg_stat_tmp'
datestyle = 'iso, mdy'
default_text_search_config = 'pg_catalog.english'
default_statistics_target = 100
maintenance_work_mem = 120MB
checkpoint_completion_target = 0.9
effective_cache_size = 1408MB
work_mem = 9MB
wal_buffers = 16MB
checkpoint_segments = 32
shared_buffers = 480MB
しかし、ブラウザからアクセスするだけなので、新しいものの方がはるかに簡単で便利です。 https://pgtune.leopard.in.ua/にアクセスしてください。良い例は次のようなものです:
必要なのは、以下のフィールドを指定することだけです。
>- DBバージョン -PostgreSQLのバージョン。 9.2、9.3、9.4、9.5、9.6、10、11、および12のバージョンのPostgreSQLをサポートします。
- OSタイプ -OSの種類(Linux、OS X、Windows)
- DBタイプ -主にデータベースが処理するトランザクション処理の種類であるデータベースタイプ(Webアプリケーション、OLTP、データウェアハウス、デスクトップアプリケーション、混合タイプのアプリケーション)
- トータルメモリ(RAM) -PGインスタンスが処理する合計メモリ。 GiBで指定する必要があります。
- CPUの数 -PostgreSQLが使用できるCPUの数CPU=コアあたりのスレッド数*ソケットあたりのコア数*ソケット
- 接続数 -PostgreSQLクライアント接続の最大数
- データストレージ -SSD、HDD、またはSANベースのストレージから選択できるデータストレージデバイスのタイプ。
次に、[生成]ボタンを押します。または、postgresql.auto.confを生成するALTER SYSTEMステートメントを実行することもできますが、PostgreSQLを再起動するまで実行されません。
このツールのアルゴリズムは、基本的にここconfiguration.jsにあります。ここでpgtune#L477から始まる古いPGTuneと同じアルゴリズムを共有します。たとえば、PostgreSQL <9.5のバージョンはcheckpoint_segmentsをサポートしますが、PG>=9.5はmin_wal_sizeとmax_wal_sizeを使用します。
checkpoint_segmentsまたはmin_wal_size/max_wal_sizeの設定は、PostgreSQLバージョンのタイプとデータベースアプリケーショントランザクションのDBタイプによって異なります。以下のスニペットでその方法をご覧ください:
if (dbVersion < 9.5) {
return [
{
key: 'checkpoint_segments',
value: ({
[DB_TYPE_WEB]: 32,
[DB_TYPE_OLTP]: 64,
[DB_TYPE_DW]: 128,
[DB_TYPE_DESKTOP]: 3,
[DB_TYPE_MIXED]: 32
}[dbType])
}
]
} else {
return [
{
key: 'min_wal_size',
value: ({
[DB_TYPE_WEB]: (1024 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_OLTP]: (2048 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_DW]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_DESKTOP]: (100 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_MIXED]: (1024 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB'])
}[dbType])
},
{
key: 'max_wal_size',
value: ({
[DB_TYPE_WEB]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_OLTP]: (8192 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_DW]: (16384 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_DESKTOP]: (2048 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB']),
[DB_TYPE_MIXED]: (4096 * SIZE_UNIT_MAP['MB'] / SIZE_UNIT_MAP['KB'])
}[dbType])
}
]
}
簡単に説明すると、dbVersion <9.5かどうかを検出し、WebUIフォームで設定されたdbType値のタイプに基づいて変数checkpoint_segmentsまたはmin_wal_size/max_wal_sizeの推奨値を決定します。
>基本的に、このスクリプトconfiguration.jsを見ると、アルゴリズムが値を提案する方法を決定する方法について詳しく知ることができます。
ClusterControlを使用したPostgreSQL構成の調整
ClusterControlを使用してクラスターを作成、構築、またはインポートしている場合、指定されたハードウェア仕様に基づいて自動的に初期調整が行われます。たとえば、以下のジョブ仕様でクラスターを作成します。
{
"command": "create_cluster",
"group_id": 1,
"group_name": "admins",
"job_data": {
"api_id": 1,
"cluster_name": "pg_11",
"cluster_type": "postgresql_single",
"company_id": "1",
"datadir": "/var/lib/postgresql/11/",
"db_password": "dbapgadmin",
"db_user": "dbapgadmin",
"disable_firewall": true,
"disable_selinux": true,
"generate_token": true,
"install_software": true,
"nodes": [
{
"hostname": "192.168.30.40",
"hostname_data": "192.168.30.40",
"hostname_internal": "",
"port": "5432"
},
{
"hostname": "192.168.30.50",
"hostname_data": "192.168.30.50",
"hostname_internal": "",
"port": "5432",
"synchronous": false
}
],
"port": "5432",
"ssh_keyfile": "/home/vagrant/.ssh/id_rsa",
"ssh_port": "22",
"ssh_user": "vagrant",
"sudo_password": "",
"user_id": 1,
"vendor": "default",
"version": "11"
},
"user_id": 1,
"user_name": "[email protected]"
}
[[email protected] ~]# s9s job --log --job-id 84919 | sed -n '/stat_statements/,/Writing/p'
192.168.30.40:5432: Enabling stat_statements plugin.
192.168.30.40:5432: Setting wal options.
192.168.30.40:5432: Performance tuning.
192.168.30.40: Detected memory: 1999MB.
192.168.30.40:5432: Selected workload type: mixed
Using the following fine-tuning options:
checkpoint_completion_target: 0.9
effective_cache_size: 1535985kB
maintenance_work_mem: 127998kB
max_connections: 100
shared_buffers: 511995kB
wal_keep_segments: 32
work_mem: 10239kB
Writing file '192.168.30.40:/etc/postgresql/11/main/postgresql.conf'.
192.168.30.50:5432: Enabling stat_statements plugin.
192.168.30.50:5432: Setting wal options.
192.168.30.50:5432: Performance tuning.
192.168.30.50: Detected memory: 1999MB.
192.168.30.50:5432: Selected workload type: mixed
Using the following fine-tuning options:
checkpoint_completion_target: 0.9
effective_cache_size: 1535985kB
maintenance_work_mem: 127998kB
max_connections: 100
shared_buffers: 511995kB
wal_keep_segments: 32
work_mem: 10239kB
Writing file '192.168.30.50:/etc/postgresql/11/main/postgresql.conf'.
さらに、システムまたはカーネルパラメータ(
など)も調整します。192.168.30.50:5432: Tuning OS parameters.
192.168.30.50:5432: Setting vm.swappiness = 1.
ClusterControlのチューニングパラメータも、pgtune#L477で共有されているアルゴリズムに基づいています。派手ではありませんが、好きな値に変更できます。これらの設定値を使用すると、最初に指定された値に基づいて本番負荷を処理するのに十分な準備ができている生の開始を行うことができます。