7.23. チューニング

7.23.1. 概要

大きなデータベースを扱うためのチューニングパラメーターがいくつかあります。

7.23.2. 引数

このセクションではチューニングパラメーターについて説明します。

7.23.2.1. 1プロセスで開ける最大ファイル数

このパラメーターは大きなデータベースを扱うためのパラメーターです。

Groongaは1つのテーブル・カラムごとに1つ以上のファイルを作ります。もし、データベース内にたくさんのテーブル・カラムがある場合は、Groongaプロセスはたくさんのファイルを開く必要があります。

システムでは1プロセスごとに開ける最大ファイル数を制限しています。そのため、この制限を緩和する必要があります。

Groongaがどのくらいファイルを開くのかを計算する式は次の通りです。:

3 (for DB) +
  N tables +
  N columns (except index clumns) +
  (N index columns * 2) +
  X (the number of plugins etc.)

次のスキーマを例として考えます。:

table_create Entries TABLE_HASH_KEY ShortText
column_create Entries content COLUMN_SCALAR Text
column_create Entries n_likes COLUMN_SCALAR UInt32
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
column_create Terms entries_key_index COLUMN_INDEX|WITH_POSITION Entries _key
column_create Terms entries_content_index COLUMN_INDEX|WITH_POSITION Entries content

この例では少なくとも11ファイル開きます。:

3 +
  2 (Entries and Terms) +
  2 (Entries.content and Entries.n_likes) +
  4 (Terms.entries_key_index and Terms.entries_content_index) +
  X = 11 + X

7.23.2.2. メモリ使用量

このパラメーターは大きなデータベースを扱うためのパラメーターです。

Groongaはデータベースファイルをメモリー上にマップしてデータベース内のデータにアクセスします。Groongaはすべてのファイルをマップするわけではなく、そのファイルの内容が必要になった段階でマップします。

データベース内のすべてのデータにアクセスすると、データベースのすべてのファイルをメモリー上にマップします。もし、データベースファイルの総サイズが6GiBなら、Groongaプロセスも6GiBのメモリーを使います。

通常、データベースのすべてのファイルをメモリー上にマップすることはありません。しかし、マップすることもあります。たとえば、データベースの内容をダンプするときです。

通常、メモリーとスワップをあわせてデータベースのサイズより大きな量を用意する必要があります。Linuxにはメモリーとスワップの総量がデータベースサイズよりも小さくても動くようにできるチューニングパラメーターがあります。

7.23.3. Linux

このセクションではLinux上でパラメーターをカスタマイズする方法について説明します。

7.23.3.1. nofile

次の内容の /etc/security/limits.d/groonga.conf 設定ファイルを作ることで 1プロセスで開ける最大ファイル数 パラメーターの制限を緩和することができます。:

${USER} soft nofile ${MAX_VALUE}
${USER} hard nofile ${MAX_VALUE}

Groongaプロセスを groonga ユーザーで動かし、Groongaプロセスが10000以下のファイルを開くなら、次の設定を使います。:

groonga soft nofile 10000
groonga hard nofile 10000

この設定はGroongaサービスが再起動したあと、あるいは、 groonga ユーザーがログインし直したときに反映されます。

7.23.3.2. vm.overcommit_memory

これは メモリ使用量 関連のパラメーターです。 vm.overcommit_memory カーネルパラメーターを 1 に設定することで、メモリーとスワップの総量以上のサイズのデータベースを扱うことができます。 1 は「Groongaは常にデータベースファイルをメモリー上にマップできる」という意味です。Groongaはこの設定を推奨しています。

vm.overcommit_memory パラメーターの詳細は overcommitに関するLinuxカーネルのドキュメント を参照してください。

次の内容の /etc/sysctl.d/groonga.conf 設定ファイルを作成することでこの設定をすることができます。:

vm.overcommit_memory = 1

設定した内容はシステムを再起動するか、次のコマンドを実行することで反映されます。:

% sudo sysctl --system

7.23.3.3. vm.max_map_count

これは メモリ使用量 関連のパラメーターです。 vm.max_map_count カーネルパラメーターの値を増やすことで16GiB以上のサイズのデータベースを扱うことができます。このパラメーターはメモリーマップの回数を制限します。

このカーネルパラメーターのデフォルト値は 6553065536 です。Groongaは一度に256KiBずつメモリー上にマップします。データベースが16GiBよりも大きい場合、Groongaはこの制限に達します。( 256KiB * 65536 = 16GiB

16GiB以上のサイズのデータベースを扱う場合はこのカーネルパラメーターの値を増やす必要があります。たとえば、 65536 * 2 = 131072 まで増やすと32GiBくらいのデータベースを扱うことができます。次の内容の設定ファイルを /etc/sysctl.d/groonga.conf に置くとこの設定を適用できます。:

vm.max_map_count = 131072

すでに vm.overcommit_memory の設定があるはずなので、実際の設定ファイルの内容は次のようになることに注意してください。:

vm.overcommit_memory = 1
vm.max_map_count = 131072

設定した内容はシステムを再起動するか、次のコマンドを実行することで反映されます。:

% sudo sysctl -p

7.23.4. FreeBSD

このセクションではFreeBSD上で引数をカスタマイズする方法を説明します。

7.23.4.1. kern.maxfileperproc

TODO