我正在使用 RavenDB 888 版。
我的客户端应用程序将数十万个文档插入 RavenDB。它工作正常。插入后,我的应用程序将从我预定义的静态索引中查询一些数据。我不想要过时的结果,所以我的应用程序会定期查询并等到索引是最新的。
不幸的是,今天我发现我的应用程序挂起(更准确地说,是一次又一次地查询 RavenDB),因为服务器总是告诉它索引仍然是陈旧的。这有点奇怪,因为上次插入很久以前就完成了——理论上服务器应该已经完成了索引。
我查看了管理工作室并检查了我最简单的索引,该索引对我的一种文档集合进行了一些计数。有趣的是,索引给出的计数是最新的(与我在管理工作室的“收藏”选项卡中看到的数字相同),但状态是“陈旧”。它的最后一次更新显示“6 小时前”。总而言之,我的索引中有一半是这样陈旧的,但根据工作室的说法,另一半是新鲜的。
我不知道为什么 RavenDB 会让它们变得陈旧,以及 RavenDB 现在在做什么。它的 CPU 使用率不高。如何调试场景?
更新:
我想我发现了一件事可能有助于找到根本原因。在将我的非陈旧索引与总是陈旧的索引进行比较之后,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
}
这是我的索引定义之一:
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 reduce keys in 00:00:03.5535907 with 493666 results for index SNRTotalByteSizeIndex, 2012-04-07 17:35:21.1888,Raven .Database.Indexing.WorkContext,Debug,"未找到工作,workerWorkCounter: 5, for: ReducingExecuter, 将等待额外工作", 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, 将等待额外的工作”,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, 将等待额外工作", 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, 将等待额外工作", 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, 将等待额外的工作” ,
但是当我今晚通过 Management Studio 查询 RavenDB 以查看有多少陈旧索引时,服务器开始执行 map/reduce!是的,下午和今晚之间没有插入,但是服务器在工作室查询后发现与索引有关...
2012-04-07 21:23:16.9357,Raven.Database.Tasks.ReduceTask,Debug,Read 1 reduce keys in 00:03:05.6481176 with 505406 results for index InternalPageCountIndex,
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 为减少键的 InternalPageCountIndex 生成 1 个条目:batchs/1, 2012-04-07 21:23:19.6797,Raven .Database.Tasks.ReduceTask,Debug,Indexed 00:00:02.7426449 中的 1 个减少键,索引 InternalPageCountIndex 的结果为 505406,
根据工作室查询,服务器仍然告诉我一半的索引是陈旧的:(