RavenDB バージョン 888 を使用しています。
私のクライアント アプリケーションは、数十万のドキュメントを RavenDB に挿入します。それは正常に動作します。挿入後、私のアプリは、事前定義した静的インデックスからいくつかのデータをクエリします。古い結果が欲しくないので、アプリは定期的にクエリを実行し、インデックスが最新になるまで待ちます。
残念ながら、今日、サーバーが常にインデックスがまだ古いことを通知するため、アプリがハングします (より正確には、RavenDB を何度もクエリし続けます)。最後の挿入がかなり前に終了したため、少し奇妙です。理論的には、サーバーはインデックス作成を終了しているはずです。
私は管理スタジオを調べて、ドキュメント コレクションの 1 つのタイプに依存する最も単純なインデックスを確認しました。興味深いことに、インデックスによって与えられたカウントは最新ですが (管理スタジオの [コレクション] タブで見た数と同じです)、ステータスは「古い」です。そして、その最終更新は「6時間前」を示しています。全体として、私のインデックスの半分はこのように古くなっていますが、残りの半分はスタジオによると新鮮です。
RavenDB が古いままにしておく理由と、RavenDB が現在何をしているのかはわかりません。CPU 使用率が高くありません。シナリオをデバッグするにはどうすればよいですか?
アップデート:
根本的な原因を見つけるのに役立つ可能性のあることを 1 つ見つけたと思います。古くないインデックスと常に古くなったインデックスを比較した後、reduce の結果が重要であるように思われます。古いインデックスは reduce の結果に大きな Value プロパティを持ち、最新のインデックスには小さな Value プロパティがあります。
public class ReduceResult
{
public string ID { get; set; }
public string Key { get; set; }
public long Value { get; set; } //This field seems to matter
}
これが私のインデックス定義の1つです:
public class InternalPageCountIndex : AbstractIndexCreationTask<InternalPage, ReduceResult>
{
public InternalPageCountIndex()
{
Map = posts => from post in posts
select new
{
Key = post.BatchID,
Value = 1
};
Reduce = results => from result in results
group result by result.Key
into g
select new
{
Key = g.Key,
Value = g.Sum(c => c.Value)
};
}
}
ところで、サーバーログも興味深いようです。今日の午後、サーバーはやるべき仕事がないと考えました:
2012-04-07 16:36:44.6725、Raven.Database.Tasks.ReduceTask、Debug、Indexed 65 は 00:00:03.5535907 のキーを減らし、インデックス SNRTotalByteSizeIndex の 493666 の結果、2012-04-07 17:35:21.1888、Raven .Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: ReducingExecuter, will wait for additional work", 2012-04-07 17:35:21.1888,Raven.Database.Indexing.WorkContext,Debug ,"作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待ちます", 2012-04-07 18:35:39.4759,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter : 5, for: ReducingExecuter, 追加の作業を待ちます", 2012-04-07 18:35:39.4759,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: IndexingExecuter, will追加の作業を待ちます",2012-04-07 19:35:56.5994、Raven.Database.Indexing.WorkContext、Debug、「作業が見つかりませんでした。workerWorkCounter: 5、for: ReducingExecuter、追加の作業を待ちます」、2012-04-07 19:35 :56.5994,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: IndexingExecuter, 追加の作業を待ちます", 2012-04-07 20:36:12.3345,Raven.Database.Indexing .WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: ReducingExecuter, 追加の作業を待ちます", 2012-04-07 20:36:12.3345,Raven.Database.Indexing.WorkContext,Debug,"作業がありませんが見つかりました, workerWorkCounter: 5, for: IndexingExecuter, 追加の作業を待ちます",追加の作業を待ちます」、2012-04-07 19:35:56.5994、Raven.Database.Indexing.WorkContext、Debug、「作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待ちます」、2012 -04-07 20:36:12.3345,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: ReducingExecuter, will wait for additional work", 2012-04-07 20:36: 12.3345,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待ちます",追加の作業を待ちます」、2012-04-07 19:35:56.5994、Raven.Database.Indexing.WorkContext、Debug、「作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待ちます」、2012 -04-07 20:36:12.3345,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした, workerWorkCounter: 5, for: ReducingExecuter, will wait for additional work", 2012-04-07 20:36: 12.3345,Raven.Database.Indexing.WorkContext,Debug,"作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待ちます",ReducingExecuter、追加の作業を待機します"、2012-04-07 20:36:12.3345、Raven.Database.Indexing.WorkContext、Debug、"作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待機します" 、ReducingExecuter、追加の作業を待機します"、2012-04-07 20:36:12.3345、Raven.Database.Indexing.WorkContext、Debug、"作業が見つかりませんでした。workerWorkCounter: 5、for: IndexingExecuter、追加の作業を待機します" 、
しかし、RavenDB にクエリを実行して、Management Studio を介して今夜古いインデックスがいくつあるかを確認すると、サーバーはマップ/リデュースを開始します! はい、午後と今夜の間に挿入はありませんが、サーバーはスタジオのクエリの後にインデックスに関係するものを見つけます...
2012-04-07 21:23:16.9357,Raven.Database.Tasks.ReduceTask,Debug,Read 1 は 00:03:05.6481176 のキーを減らし、インデックス InternalPageCountIndex の結果は 505406 です。
2012-04-07 21:23:19.5103、Raven.Database.Indexing.Index.Indexing、Debug、"バッチ/1 のインデックス作成により、インデックス PageCountMissingDescriptionIndex がドキュメントに与えられました: __reduce_key I-: バッチ/1 キー IS: バッチ/1 値IS: 505406 Value_Range IS: 505406",
2012-04-07 21:23:19.6797、Raven.Database.Indexing.Index.Indexing、Debug、Reduce の結果、reduce キーの InternalPageCountIndex に 1 つのエントリが発生しました: batches/1、2012-04-07 21:23:19.6797、Raven .Database.Tasks.ReduceTask,Debug,Indexed 1 は 00:00:02.7426449 のキーを減らし、インデックス InternalPageCountIndex の結果は 505406 です。
スタジオのクエリによると、サーバーはまだインデックスの半分が古いと言っています:(