Mroonga は、全文検索エンジン Groonga をベースとした MySQL のストレージエンジンです。
Mroonga を利用した自作ツールを実行した際に、メモリマッピングに関するエラーが発生するようになったので、その対処方法について記録しておきます。
0. 前提条件
- CentOS 6.8(32bit)
- MySQL 5.7.14 (Mroonga プラグイン有効)
- データベースの総容量は 42GB 程度
- Mroonga にそれほど長けている訳でもないので、以下の記述に誤りがあるかもしれない。
1. 現象
MySQL を使用した自作ツールを実行すると、以下のようなエラーが発生することがある。
1
|
|
メモリのマッピングに失敗しているようだ。
2. 原因
大きなデータベースを扱うための Groonga のパラメータが適切に設定されていないため。(おそらく)
3. 対策
「7.22. チューニング — Groonga v6.0.7ドキュメント」を参考に、 “/etc/sysctl.conf” に vm.overcommit_memory
と vm.max_map_count
の設定を記述する。
まず、現在値を確認してみる。
1 2 3 4 |
|
vm.overcommit_memory
は未設定で、 vm.max_map_count
には 262144
が設定されている。
Groonga は一度に 256KiB ずつメモリー上にマップするようなので、上記の場合は、 262,144 * 256(KiB) = 67,108,864(KiB) = 65536(MiB) = 64(GiB) となり、データベースのサイズが 64GiB までは問題ないはず。
vm.overcommit_memory
が未設定なのが問題のようなので、設定しておく。
1 2 |
|
逆に、vm.overcommit_memory
が設定済みにも関わらずエラーとなる場合は、 vm.max_map_count
の値を確認してみる。
“/etc/sysctl.conf” を編集し終えたら、以下を実行して設定を有効化する。
1 2 3 4 5 6 |
|
これで、様子を見てみる。
4. 参考サイト
Mroonga 導入後に忘れがちな作業なので、記録しておいた次第です。
以上。