VCIで使用するメモリの見積り式について説明します。
使用メモリ量の概算は、次の式で見積もってください。
VCIで使用するメモリ量 = データをメモリに格納するために必要なメモリ量 + 各種処理に必要なメモリ量
データをメモリに格納するために必要なメモリ量
以下の式で見積もった容量を、ステーブルバッファ(shared_buffersの一部)上に確保してください。
データをメモリに格納するために必要なメモリ容量 = (テーブル行数) × (一行あたりのバイト数) + (WOSサイズ)
一行あたりのバイト数 = (19 + (CREATE INDEX時に指定した列数) / 8 + (指定した列の行あたりのバイト数)) × 1.1
備考) 端数は切り上げてください。
WOSサイズ = (WOSの行数) / 185 × 8096
WOSの行数はINSERT, DELETEで1行ずつ、UPDATEで2行ずつ増えます。一方で、ROS制御デーモンによるROSへの変換時に52万行以下まで減ります。
各種処理に必要なメモリ量
各種処理に必要なメモリ容量 = 検索時にクエリごとに消費されるメモリ量 + VCIのメンテナンス時に消費されるメモリ量 + CREATE INDEX時に消費されるメモリ量
並列検索時
検索時に消費されるメモリ量 = vci.shared_work_mem + (並列ワーカ数 + 1) × vci.maintenance_work_mem
備考)インスタンス全体で、VCIが同時に利用する並列ワーカ数は、vci.max_parallel_degree以下になります。
非並列検索時
検索時に消費されるメモリ量 = vci.max_local_ros + vci.maintenance_work_mem
注意
vci.shared_work_mem, vci.max_local_ros はLocal ROSの作成に利用します。Local ROSがこれらのサイズを超える場合はVCIを利用しない従来のプランによってクエリを実行します。
vci.maintenance_work_memは動的に確保するメモリです。設定値を超える場合はディスクの一時ファイルを利用して動作します。
VCIのメンテナンス時に消費されるメモリ = vci.maintenance_work_mem × vci.control_max_workers
CREATE INDEX時に消費されるメモリ = vci.maintenance_work_mem
注意
vci.maintenance_work_memは動的に確保するメモリです。設定値を超える場合はディスクの一時ファイルを利用して動作します。