Skip to content
VDS · データベース

ティアに合わせたデータベースメモリの設定

VDS-1…VDS-6 向けの PostgreSQL と MySQL の具体的なバッファ値、データベース・アプリケーション・システム間でメモリを配分するルールについて説明します。

更新日 2026年8月23日

データベースのデフォルト設定は、どこでも起動できるように設計されており、高速に動作するようには設計されていません。メモリ 8 GB の VDS-3 では、PostgreSQL は初期状態でキャッシュに 128 MB しか使用しません。つまり、メモリから読み込めるはずのデータも、ほとんどをディスクから読み込んでしまいます。

メモリ配分のルール

ティアのメモリは、おおよそ次のように分割します。

  • システムとサービスのプロセス — 10~15%
  • アプリケーション(PHP-FPM、Node、gunicorn) — ワーカー数に応じて
  • データベース — 残りすべて。ただし総メモリの 60~70% を超えないこと

データベースにメモリをすべて渡してはいけません。システムがスワップに陥り、NVMe でも助けにはなりません。レイテンシは数十倍に増加します。

現在の使用量を確認するには:

free -h
ps -eo pmem,rss,comm --sort=-rss | head

1 時間、1 日、1 週間、1 か月のメモリグラフは、パネルの /hosting/vds/m/<id> の「概要」で確認できます。現在の瞬間ではなく、実際のピークが表示されます。

PostgreSQL

/etc/postgresql/17/main/postgresql.conf:

ティアshared_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1(2 GB)384MB1GB8MB96MB40
VDS-2(4 GB)1GB2GB12MB256MB60
VDS-3(8 GB)2GB5GB16MB512MB100
VDS-4(16 GB)4GB10GB24MB1GB150
VDS-5(24 GB)6GB16GB32MB2GB200
VDS-6(32 GB)8GB22GB48MB2GB250

さらに、NVMe 向けの一般的な設定:

random_page_cost = 1.1
effective_io_concurrency = 200

work_mem は接続ごとではなく、ソート操作ごとに割り当てられます。複雑なソートを伴う 100 件の並列クエリでは、数百倍に膨れ上がります。高く設定しすぎないでください。

適用:systemctl restart postgresql(shared_buffers の変更には特に再起動が必要です)。

MySQL と MariaDB

ティアinnodb_buffer_pool_sizeinnodb_log_file_sizemax_connections
VDS-1512M128M60
VDS-21G256M100
VDS-33G512M150
VDS-48G1G200
VDS-512G1G250
VDS-618G2G300
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000

バッファプールが主要なパラメータです。これが作業データセットに収まれば、ディスクの読み込みはほとんど発生しません。

効果の確認

SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;

MySQL では、SHOW ENGINE INNODB STATUS と、Innodb_buffer_pool_reads 対 Innodb_buffer_pool_read_requests の比率を確認します。キャッシュヒット率が 95% を下回る場合、データベースのメモリが不足しています。

よくある間違い

症状原因
編集後にデータベースが起動しない利用可能なメモリを超える量を要求している — ジャーナルを確認してください
プロセスが OOM で強制終了されたデータベース、アプリケーション、システムの合計がティアのメモリを超えている
「最適化」後に遅くなったwork_mem が高すぎる設定になっており、マシンがスワップしている
ディスクの読み込みが絶えないバッファが小さすぎて、作業セットが収まっていない

メモリを調整してもなお限界に達する場合、問題は設定ではなくデータ量です。できるのはプランのアップグレードのみで、支払い済み期間の残り日数分は日割りで計算されます。ダウングレードはできないため、次のティアは慎重に選んでください。