7.3.2. 並列実行#
7.3.2.1. 概要#
Groongaはデフォルトでは逐次的に実行しますが、オプションで並列数を指定することで並列実行することもできます。
次のセクションでは並列実行するための設定方法を説明します。その後に注意点も記載しているので合わせてご確認の上でご利用ください。
7.3.2.2. 使い方#
7.3.2.2.1. Groongaコマンドごとに設定する#
実行するGroongaコマンドでのみ有効です。
7.3.2.2.1.1. Groongaコマンドの--n_workers
オプションで指定する#
Groongaコマンド例:
load --table Data --n_workers -1
[
{"_key", "value"}
]
7.3.2.2.2. デフォルト値を設定する#
デフォルト値を設定するとGroongaコマンドごとに指定する必要はありません。すべてのGroongaコマンドでデフォルト値が利用されます。
7.3.2.2.2.1. groonga
実行ファイルの--default-n-workers
オプションで指定する#
Execution example:
$ groonga --default-n-workers -1 DB_PATH status
7.3.2.2.2.2. 環境変数GRN_N_WORKERS_DEFAULT
で指定する#
Execution example:
$ GRN_N_WORKERS_DEFAULT=-1 groonga DB_PATH status
7.3.2.2.3. 設定できる値#
並列数を設定することができ、-1
または 2
以上を指定すると並列で実行します。
n_workers |
挙動 |
---|---|
|
並列実行しません。 |
|
指定したスレッド数以下で並列実行します。 |
|
CPUのコア数以下のスレッドで並列実行します。 |
7.3.2.3. 設定の確認#
statusコマンドのn_workers
とdefault_n_workers
の値で確認できます。
Execution example:
status
# [
# [
# 0,
# 1337566253.89858,
# 0.000355720520019531
# ],
# {
# "alloc_count": 29,
# "starttime": 1696558618,
# "start_time": 1696558618,
# "uptime": 1,
# "version": "2.9.1",
# "n_queries": 0,
# "cache_hit_rate": 0.0,
# "command_version": 1,
# "default_command_version": 1,
# "max_command_version": 3,
# "n_jobs": 0,
# "features": {
# "nfkc": true,
# "mecab": true,
# "message_pack": true,
# "mruby": true,
# "onigmo": true,
# "zlib": true,
# "lz4": true,
# "zstandard": true,
# "kqueue": false,
# "epoll": true,
# "poll": false,
# "rapidjson": false,
# "apache_arrow": true,
# "xxhash": true,
# "blosc": true,
# "bfloat16": true,
# "h3": true,
# "simdjson": true,
# "llama.cpp": true,
# "back_trace": true,
# "reference_count": false
# },
# "apache_arrow": {
# "version_major": 2,
# "version_minor": 9,
# "version_patch": 1,
# "version": "2.9.1"
# },
# "memory_map_size": 2929,
# "n_workers": 0,
# "default_n_workers": 0,
# "os": "Linux",
# "cpu": "x86_64"
# }
# ]
n_workers
はGroongaコマンドごとに使われる値、default_n_workers
はデフォルト値です。
7.3.2.4. 注意点#
7.3.2.4.1. Apache Arrowが必須#
Apache Arrow が有効である必要があります。
パッケージの提供元によりApache Arrowが有効かどうかは異なります。
Apache Arrow が有効かどうかは、status コマンドの結果でapache_arrow
がtrue
かどうかで確認することができます。
7.3.2.4.2. 常駐プロセスで利用する場合#
たとえば、CPUが6個のシステムでGroonga HTTPサーバー を使うケースを考えます。
Groonga HTTPサーバーは各リクエストごとに1スレッド(= 1 CPU)を割り当てて処理します。
平均同時接続数が6のとき、CPUを既に6つ使用しているのでCPUのリソースに空きはありません。各リクエストを処理するためにすべてのCPUが使われているからです。
平均同時接続数が2のとき、リクエストを処理するためにはCPUを2つしか使用していないので、4つ空きがあります。n_workers
に2
を指定すると、リクエストを処理するためのスレッドを含んで最大で3つのCPUを使用します。そのため、n_workers
に2
を指定したGroongaプロセスに同時に2つリクエストがあると、合計で最大で6つのCPUを使用することになりリソースをすべて使って高速に処理できます。 2
より大きな値を指定すると、CPUのリソースよりも高い並列度になってしまうので、かえって実行が遅くなる可能性があります。