BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

.NET平台的ORM分析工具

| 作者 Jonathan Allen 关注 595 他的粉丝 ,译者 王波 关注 0 他的粉丝 发布于 2009年11月20日. 估计阅读时间: 4 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

很不幸,“ORM”和“性能问题”常常一起出现。ORM通过对开发人员隐藏SQL细节可以大大的提高生产力。然而,它们很容易产生一些未被发现的荒谬查询。通常情况下,数据库管理员可以通过交叉引用有问题的存储过程来查找问题代码。但是,ORM依赖于动态生成的SQL,便很难这么做了。所以,我们要寻找一些更有效的ORM分析工具。

NHibernate

NHibernate分析器(NHProf)是我们期待的入门级产品。除了有完整的统计信息外,它还显示了最近完整的SQL调用列表,并使用堆栈来反向跟踪调用它的代码。NHProf的界面简洁并有加强的交叉引用功能,它能很轻松地从针对个别查询语句的检查,切换到该代码块所使用到的全部查询语句。

NHibernate分析器最重要的部分是预警功能。一些警报会显示当前数据库错误所产生的问题,或者在多个线程中使用同一个会话等意外情况。其他警报则会显示潜在的问题,比如本该批量操作的场景被拆分成大量单独执行的写操作。还有一些警告用来提示随后可能出现的问题,比如未绑定结果集

未绑定结果集即已执行查询但未明确使用NHibernate的SetMaxResults()抑或SQL的TOP和LIMIT语句来限定的返回记录。通常,这意味者应用程序假设该查询总是返回少量记录。在开发和测试过程中,这种做法很有效,但是,在生产环节中却是一个定时炸弹。

NHibernate分析器的另一面就是它的植入性。你不可以附加到一个正在运行的进程,必需提前配置好。虽然NHibernate分析器建议直接引用在你的程序中,log4net用户也可以通过设置app.config来激活该分析。

NHibernate Profiler是一个商业产品,起始价格是每用户300美元。

LINQ to SQL

开发人员在查找LINQ to SQL问题时,第一个便会想到去观察DataContext日志。DataContext对象有Log属性,它会将所有SQL路径输出至我们指定的TextWriter。这种做法简单且自由,但是对大量原生SQL进行处理是否适合于关键性应用仍旧是个疑问。

LINQ to SQL分析器(L2SProf)和NHibernate分析器由同一家公司出品,它们工作的方式比较类似。除了实时分析以外,我们可以配置它来写入日志文件作为后期分析。和NHProf相同,它的价格是每位用户300美元。当前它还处于Beta阶段。

Huagati查询分析器是另外一种植入式分析器。他们直白道:“这些运行时组件的设计目标,便是集成至使用Linq-to-SQL,或LLBLGen Pro来访问SQL Server的应用程序,并和他们一起部署。幸运的是,在运行的时候可以根据需要打开或关闭分析器。

Huagati的用户界面已经明显过时,占据半个显示器大小的表格显示着SQL语句和跟踪堆栈。它缺乏NHProf/ L2SProf的几乎所有优点,比如:预警和摘要显示,但它有一项面向专业开发人员的强大功能,即细节。

Huagati分析器不仅提供绝对的持续时间和行数,它深入挖掘SQL Server的所有可用信息。除了往返时间,我们还可以看到其他一些有价值的信息,比如:对一个查询进行编译及执行的时间对比。你甚至可以看到真实的执行计划及I/O状况。

Huagati查询分析器是一款商业产品,限制版的价格是50美元,完整版的价格是每位用户120美元。

ADO.NET Entity Framework

无话可说。首先,你无法像在LINQ to SQL那样获取到即便是最基本的SQL日志记录。因此,似乎没有人在为它编写分析器。

结论

还有很多.NET的ORM框架,但是它们的情况和ADO.NET Entity Framework十分类似。除了这里提到的两款分析工具外,几乎没有什么框架提供了这方面的支持——除非你使用数据库内置的分析器。

查看英文原文:ORM Profiling Tools for the .NET Platform

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

翻译的很好, 谢谢 by Wang Terrance

LINQ TO SQL 那段,
"但是对大量原生SQL进行处理是否适合于关键性应用仍旧是个疑问"
这句没理解, 处理什么呢, 不就是记录到日志文件吗?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT