我该如何在生产环境中高效支持Entity Framework的SQL日志记录?

4
我们正在使用Entity Framework 4.0。当我们在生产环境遇到问题时,我们希望能够临时启用所有SQL语句的日志记录。我们没有足够的权限在生产SQL服务器上运行SQL Profiler。
是否有一个良好的日志记录选项,可以通过配置文件设置开启和关闭,并且在关闭时不会增加显着的开销?
我已经阅读了Tracing and Caching Provider Wrappers for Entity Framework。这听起来不错...但它只是示例代码,不受官方支持。因此,我不确定它是否适合生产环境。我也不知道即使在关闭日志记录时,包装器是否会增加太多开销。有人对这些包装器有好的经验吗?
感谢您的帮助, Richard

1
我们在生产SQL Server上没有足够的权限来运行SQL Profiler。- 你有请求更改TRACE的权限吗?这是一个冒险,大多数DBA不会给予,但关闭它很容易... - Mitch Wheat
可能是Entity Framework和查询的SQL日志记录的重复问题。 - Mitch Wheat
跟踪提供程序包装器并不是官方支持的,但它就像任何其他代码一样。如果您想要记录日志,您可以使用它,或者您可以自己编写相同的代码,它仍然是“不受支持的”。 - Ladislav Mrnka
谢谢 Mitch - 我会和我们的 DBA 谈论 ALTER TRACE 权限。 - Richard Beier
你说得没错,Ladislav。我不质疑代码的质量……问题更多是:(a) 性能开销是否适用于生产环境,或仅适用于开发/测试环境;(b) 如果我们遇到问题,是否有办法寻求帮助?如果所需代码太多,则自行编写并不是一个选项。我们需要在使用包装器或每次需要监视时通过数据库管理员(DBA)设置分析器跟踪之间做出选择。 - Richard Beier
我们决定不使用提供程序包装器,因为没有足够的关于在生产中使用它的信息。我们将在必要时通过我们的数据库管理员设置SQL Profiler跟踪。 - Richard Beier
1个回答

3
代码示例已经 发布在 NuGet 包中。它已经稍微修改以连接到内置的 .NET 跟踪系统(使用 TraceSource 而不仅仅是文件/控制台日志记录)。
我已经在几个不同的项目中使用它,并发现它很有帮助。它可以像任何其他 TraceSource 一样从 app.config/web.config 中启用/禁用。
我没有遇到任何性能问题,但我只在单用户场景中使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接