Search:

Search all manuals
Search this manual
Manual
Couchbase Server マニュアル 2.0
Community Wiki and Resources
Couchbase Server 2.0をダウンロード
Couchbase 開発者ガイド 2.0
クライアントライブラリ
Couchbase Server フォーラム
Additional Resources
Community Wiki
Community Forums
Couchbase SDKs
Parent Section
D ビューのトラブルシューティング(技術的背景)
Chapter Sections
Chapters

D.2. インデクサのブロックによる長時間の処理滞留

各デザインドキュメントは一つのインデクサにマップされるので、インデクサが実行されているとき、対応するデザインドキュメントで定義されているすべてのビューが更新されます。インデックス作成はリソース(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_indexertypeフィールドのタスクとして表されている一方、他のインデクサは、実行中を意味するindexerタイプのタスクを持っています。couch_main_index_barrierタイプのタスクでは、現在4つのインデクサが実行され、1つが順番を待っているということを確認できます。インデインデクサが割り当てられると、blocked_indexerタイプで動作しているタスクがindexerタイプでの新しいものに置き換えられます。