【问题标题】:RavenDB: Error reading RavenJArray from JsonReaderRavenDB:从 JsonReader 读取 RavenJArray 时出错
【发布时间】:2012-01-12 16:44:21
【问题描述】:

我在 IIS 7.5 上运行最新的 RavenDB(以前是“稳定的”,但现在正在尝试最新的“不稳定”构建)。我们有 50 万个文档,并且由于我们需要相当频繁地更新这些文档,因此写了很多文章。

我们经常在 Raven Studio 中看到以下错误(以及在循环中插入批处理时“对象引用未设置为对象的实例。”)。在对大量文档执行补丁请求时也会发生同样的情况。我们之前有大型 map/reduce 索引,导致了类似的问题。

我们可以做些什么(也许通过 IIS 来处理)更好地阻止数据库性能下降或变得无法使用?下面是bug吗?

我还注意到我们的 ESENT“数据”文件已经变大(10+Gb),可能(不明智地)由于之前存储了很多相当大的文档。有什么办法可以“缩小”它并使其更小?

(注意:稍后我可能会编辑此 Q 并进行总结)。

从 JsonReader 读取 RavenJArray 时出错。 System.Exception:从 JsonReader 读取 RavenJArray 时出错。 在 Raven.Json.Linq.RavenJArray.Load(JsonReader 阅读器) 在 Raven.Json.Linq.RavenJArray.Parse(字符串 json) 在 Raven.Client.Silverlight.Connection.Async.AsyncServerClient.b__22(任务`1 任务) 在 System.Threading.Tasks.Task`1.c__DisplayClass1a`1.b__19() 在 System.Threading.Tasks.Task`1.InvokeFuture(对象 futureAsObj) 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() 内部堆栈跟踪: 在 Raven.Studio.Infrastructure.InvocationExtensions.Catch(任务父项,Action`1 操作) 在 Raven.Studio.Infrastructure.InvocationExtensions.Catch(任务父) 在 Raven.Studio.Infrastructure.Model.TimerTicked() 在 Raven.Studio.Infrastructure.View.b__7(模型模型) 在 Raven.Studio.Infrastructure.View.InvokeOnModel(对象 ctx,Action`1 动作) 在 Raven.Studio.Infrastructure.View.InvokeTimerTicked(对象 ctx) 在 Raven.Studio.Infrastructure.View.DispatcherTimerOnTick(对象发送者,EventArgs eventArgs) 在 MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex,委托 handlerDelegate,对象发送者,对象参数) 在 MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,字符串 eventName) 无法解析 json: System.InvalidOperationException:无法解析 json: ---> System.Exception:从 JsonReader 读取 RavenJObject 时出错。 在 Raven.Json.Linq.RavenJObject.Load(JsonReader 阅读器) 在 Raven.Json.Linq.RavenJObject.Parse(字符串 json) --- 内部异常堆栈跟踪结束 --- 在 Raven.Json.Linq.RavenJObject.Parse(字符串 json) 在 Raven.Client.Silverlight.Connection.Async.AsyncServerClient.b__58(任务`1 任务) 在 System.Threading.Tasks.Task`1.c__DisplayClass1a`1.b__19() 在 System.Threading.Tasks.Task`1.InvokeFuture(对象 futureAsObj) 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() 内部堆栈跟踪: 在 Raven.Studio.Infrastructure.InvocationExtensions.Catch(任务父项,Action`1 操作) 在 Raven.Studio.Infrastructure.InvocationExtensions.Catch(任务父) 在 Raven.Studio.Infrastructure.Model.TimerTicked() 在 Raven.Studio.Infrastructure.View.b__7(模型模型) 在 Raven.Studio.Infrastructure.View.InvokeOnModel(对象 ctx,Action`1 动作) 在 Raven.Studio.Infrastructure.View.InvokeTimerTicked(对象 ctx) 在 Raven.Studio.Infrastructure.View.DispatcherTimerOnTick(对象发送者,EventArgs eventArgs) 在 MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex,委托 handlerDelegate,对象发送者,对象参数) 在 MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,字符串 eventName)

【问题讨论】:

    标签: iis ravendb


    【解决方案1】:

    你能更新你的 ravendb 版本吗?我们添加了额外的错误报告,可以帮助追踪。 db 的大小可以被截断,但只能离线。 它的工作方式是,我们从不将空间还给操作系统,而是保留给我们自己使用。

    【讨论】:

    • 我已更新为构建 #599(错误可能会有点不那么频繁和/或更快地赶上索引)虽然我仍然收到错误(尽管如上所述略有更新)。我分批插入 1024 条。有没有一些具体的日志要我提供。
    • 我还使用了 ESENTITL 的“碎片整理:ESENTUTL /d [options]”,它非常适合离线数据库压缩。谢谢!
    • 我启用了日志记录并更新为构建 #601。服务器上的“仅错误”下没有出现错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多