Jika Anda baru mengenal PostgreSQL, tantangan paling umum yang Anda hadapi adalah tentang cara menyetel lingkungan basis data Anda.
Ketika PostgreSQL diinstal, secara otomatis menghasilkan file postgresql.conf dasar. File konfigurasi ini biasanya disimpan di dalam direktori data tergantung pada sistem operasi yang Anda gunakan. Misalnya, di Ubuntu PostgreSQL menempatkan konfigurasi (pg_hba.conf, postgresql.conf, pg_ident.conf) di dalam direktori /etc/postgresql. Sebelum Anda dapat menyetel database PostgreSQL, Anda harus terlebih dahulu menemukan file postgresql.conf.
Tapi apa pengaturan yang tepat untuk digunakan? dan apa nilai yang ditetapkan pada awalnya? Menggunakan alat eksternal seperti PGTune (dan alat alternatif seperti ClusterControl) akan membantu Anda memecahkan masalah khusus ini.
Apa itu PGTune?
PGTune adalah wizard konfigurasi yang awalnya dibuat oleh Greg Smith dari 2ndQuadrant. Ini didasarkan pada skrip Python yang, sayangnya, tidak lagi didukung. (Ini tidak mendukung versi PostgreSQL yang lebih baru.) Kemudian dialihkan ke pgtune.leopard.in.ua (yang didasarkan pada PGTune asli) dan sekarang menjadi wizard konfigurasi yang dapat Anda gunakan untuk pengaturan konfigurasi database PG Anda.
PGTune digunakan untuk menghitung parameter konfigurasi untuk PostgreSQL berdasarkan kinerja maksimum untuk konfigurasi perangkat keras tertentu. Ini bukan peluru perak, karena banyak pengaturan tidak hanya bergantung pada konfigurasi perangkat keras, tetapi juga pada ukuran database, jumlah klien, dan kompleksitas kueri.
Cara Menggunakan PGTune
Versi lama PGTune didasarkan pada skrip python yang dapat Anda panggil melalui perintah shell (menggunakan Ubuntu):
[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
Tapi yang baru ini jauh lebih mudah dan nyaman karena Anda cukup mengaksesnya melalui browser. Cukup buka https://pgtune.leopard.in.ua/. Contoh yang bagus seperti di bawah ini:
Yang perlu Anda lakukan hanyalah menentukan bidang berikut di bawah ini:
- versi DB - versi PostgreSQL Anda. Ini mendukung versi PostgreSQL dari 9.2, 9.3, 9.4, 9.5, 9.6, 10, 11, dan 12.
- Jenis OS - jenis OS (Linux, OS X, Windows)
- Jenis DB - jenis basis data yang terutama merupakan jenis pemrosesan transaksional yang akan ditangani basis data Anda (Aplikasi Web, OLTP, Data Warehousing, Aplikasi Desktop, Jenis Aplikasi Campuran)
- Total Memori (RAM) - Total memori yang akan ditangani oleh instans PG Anda. Perlu menentukannya di GiB.
- Jumlah CPU - Jumlah CPU, yang dapat digunakan PostgreSQL CPU =thread per core * core per socket * socket
- Jumlah Koneksi - Jumlah maksimum koneksi klien PostgreSQL
- Penyimpanan Data - Jenis perangkat penyimpanan data yang dapat Anda pilih dari penyimpanan berbasis SSD, HDD, atau SAN.
Kemudian tekan tombol Hasilkan. Atau, Anda juga dapat menjalankan pernyataan ALTER SYSTEM yang menghasilkan postgresql.auto.conf, tetapi itu tidak akan memakan waktu sampai Anda menekan restart PostgreSQL.
Bagaimana Menetapkan Nilai
Algoritme untuk alat ini pada dasarnya dapat ditemukan di sini di configuration.js. Itu memang berbagi algoritma yang sama dari PGTune lama mulai dari sini pgtune#L477. Misalnya, versi PostgreSQL <9.5 mendukung checkpoint_segments, tetapi PG>=9.5 menggunakan min_wal_size dan max_wal_size.
Menyetel checkpoint_segments atau min_wal_size/max_wal_size bergantung pada tipe versi PostgreSQL dan tipe DB dari transaksi aplikasi database. Lihat caranya dalam cuplikan di bawah ini:
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])
}
]
}
Singkatnya, ia mendeteksi jika dbVersion <9.5, kemudian menentukan nilai yang disarankan untuk variabel checkpoint_segments atau min_wal_size/max_wal_size berdasarkan jenis nilai dbType yang ditetapkan selama formulir UI web.
Pada dasarnya, Anda dapat mempelajari lebih lanjut tentang algoritme tentang cara memutuskan untuk menyarankan nilai dengan melihat skrip ini configuration.js.
Penyesuaian Konfigurasi PostgreSQL dengan ClusterControl
Jika Anda menggunakan ClusterControl untuk membuat, membangun, atau mengimpor cluster, ClusterControl secara otomatis melakukan penyetelan awal berdasarkan spesifikasi perangkat keras yang diberikan. Misalnya, membuat cluster dengan spesifikasi pekerjaan berikut di bawah ini,
{
"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]"
}
Menyediakan penyetelan berikut seperti yang ditunjukkan di bawah ini:
[[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'.
Selain itu, ini juga menyetel parameter sistem atau kernel Anda seperti,
192.168.30.50:5432: Tuning OS parameters.
192.168.30.50:5432: Setting vm.swappiness = 1.
Kesimpulan
Parameter penyetelan ClusterControl juga didasarkan pada algoritme yang dibagikan di pgtune#L477. Ini tidak mewah, tetapi Anda dapat mengubahnya ke nilai apa pun yang Anda inginkan. Dengan nilai pengaturan ini, memungkinkan Anda untuk memulai mentah yang cukup siap untuk menangani beban produksi berdasarkan nilai awal yang diberikan.