各デザインドキュメントは一つのインデクサにマップされるので、インデクサが実行されているとき、対応するデザインドキュメントで定義されているすべてのビューが更新されます。インデックス作成はリソース(CPU、ディスクIO、メモリ)を使用するので、そのためCouchbase Serverは、並行して実行することができるインデクサの最大数を制限します。通常のインデクサ(メイン/アクティブ)と、レプリカのインデクサ(後のセクションでこれについての詳細があります)の制限を指定する2つの設定パラメータがあります。前者のデフォルトは4で、後者は2です。このように問い合わせることができます。
shell> curl -s 'http://Administrator:asdasd@localhost:9000/settings/maxParallelIndexers' {"globalValue":4,"nodes":{"n_0@192.168.1.80":4}}
maxParallelIndexers
はメインインデックスのためであり、maxParallelReplicaIndexers
はレプリカのインデックスのためのものです。maxParallelIndexersよりもデザインドキュメント(インデクサ)がある場合、いくつかのインデクサは、空きスロットができるまでブロックされ、その処理順序の規則は先着順(first-come-first-served)というような簡単なものです。これらのスロットはひとつはメインインデックス用、もうひとつはレプリカインデックス用という2つの障壁プロセスよって制御されます。現在の状態は_active_tasks
(ノードあたり)で確認でき、例えばインデックス処理の問題がないとき:
shell> curl -s 'http://localhost:9500/_active_tasks' | json_xs [ { "waiting" : 0, "started_on" : 1345642656, "pid" : "<0.234.0>", "type" : "couch_main_index_barrier", "running" : 0, "limit" : 4, "updated_on" : 1345642656 }, { "waiting" : 0, "started_on" : 1345642656, "pid" : "<0.235.0>", "type" : "couch_replica_index_barrier", "running" : 0, "limit" : 2, "updated_on" : 1345642656 } ]
waiting
フィールドには、いくつのインデクサがブロックされ、実行する順番を待っているかが示されています。stale=false
を使用したクエリは(もしまだ開始していないなら)インデクサが開始され、ブロック解除されるのを待って、完了する必要があり、システム内に多くのデザインドキュメントが存在する場合、クエリ実行に長時間を要することがあります。特定のデザインドキュメントのインデクサがあるノードでは実行中であっても、他のノードではブロックされている可能性を考慮してください (ブロックされる場合でも全てのノードで必ずブロックされるわけではなく、実行中でも全てのノードで必ず実行中であるとは限らない)。これを確認するには、各ノードに対して_active_tasksを照会します (このAPIはユーザが直接利用するものでなく、開発者だけのもので、デバッグ/トラブルシューティングを行います)。
_active_tasks
を通して(ノードごとであり、クラスタ内のすべてのノードに対して確認することを忘れないでください)、どのインデクサが実行されていて、ブロックされているかを見ることができます。ここでは、5つのデザインドキュメント(インデクサ)があり、>maxParallelIndexers
が4である例を次に示します。
shell> curl -s 'http://localhost:9500/_active_tasks' | json_xs [ { "waiting" : 1, "started_on" : 1345644651, "pid" : "<0.234.0>", "type" : "couch_main_index_barrier", "running" : 4, "limit" : 4, "updated_on" : 1345644923 }, { "waiting" : 0, "started_on" : 1345644651, "pid" : "<0.235.0>", "type" : "couch_replica_index_barrier", "running" : 0, "limit" : 2, "updated_on" : 1345644651 }, { "indexer_type" : "main", "started_on" : 1345644923, "updated_on" : 1345644923, "design_documents" : [ "_design/test" ], "pid" : "<0.4706.0>", "signature" : "4995c136d926bdaf94fbe183dbf5d5aa", "type" : "blocked_indexer", "set" : "default" }, { "indexer_type" : "main", "started_on" : 1345644923, "progress" : 0, "initial_build" : true, "updated_on" : 1345644923, "total_changes" : 250000, "design_documents" : [ "_design/test4" ], "pid" : "<0.4715.0>", "changes_done" : 0, "signature" : "15e1f576bc85e3e321e28dc883c90077", "type" : "indexer", "set" : "default" }, { "indexer_type" : "main", "started_on" : 1345644923, "progress" : 0, "initial_build" : true, "updated_on" : 1345644923, "total_changes" : 250000, "design_documents" : [ "_design/test3" ], "pid" : "<0.4719.0>", "changes_done" : 0, "signature" : "018b83ca22e53e14d723ea858ba97168", "type" : "indexer", "set" : "default" }, { "indexer_type" : "main", "started_on" : 1345644923, "progress" : 0, "initial_build" : true, "updated_on" : 1345644923, "total_changes" : 250000, "design_documents" : [ "_design/test2" ], "pid" : "<0.4722.0>", "changes_done" : 0, "signature" : "440b0b3ded9d68abb559d58b9fda3e0a", "type" : "indexer", "set" : "default" }, { "indexer_type" : "main", "started_on" : 1345644923, "progress" : 0, "initial_build" : true, "updated_on" : 1345644923, "total_changes" : 250000, "design_documents" : [ "_design/test7" ], "pid" : "<0.4725.0>", "changes_done" : 0, "signature" : "fd2bdf6191e61af6e801e3137e2f1102", "type" : "indexer", "set" : "default" } ]
_design/testっというデザインドキュメントのインデクサがblocked_indexer
のtype
フィールドのタスクとして表されている一方、他のインデクサは、実行中を意味するindexer
タイプのタスクを持っています。couch_main_index_barrier
タイプのタスクでは、現在4つのインデクサが実行され、1つが順番を待っているということを確認できます。インデインデクサが割り当てられると、blocked_indexer
タイプで動作しているタスクがindexer
タイプでの新しいものに置き換えられます。