.NET平台的ORM分析工具

2009 年 11 月 19 日

很不幸,“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

2009 年 11 月 19 日 11:063417
用户头像

发布了 87 篇内容, 共 16.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

【架构师训练营】第九期作业

云064

学习总结(训练营第九课)

看山是山

9-1垃圾回收原理和秒杀系统

burner

Week 09 学习总结

Jeremy

一文教会你嵌入式网络模块的联网操作

良知犹存

物联网 网络 嵌入式

未来云原生世界的“领头羊”:容器批量计算项目Volcano 1.0版本发布

华为云开发者社区

Kubernetes 容器 华为云 Volcano 元原生

充分释放数据价值:安全、可信6到飞起

华为云开发者社区

区块链 数据共享 华为云 可信安全计算 数据价值

第九周学习总结

菲尼克斯

架构师训练营-week09 作业

GunShotPanda

换一种方式构建镜像

北漂码农有话说

《RabbitMQ》如何保证消息不被重复消费

Java旅途

RabbitMQ 消息队列

架构师培训 -08 总结 JVM、秒杀

刘敏

架构师训练营 第九周 总结

CR

如何保存我们的资产

不在调上

架构师训练营第九周

WW

女博士年薪156万入职华为!网友:实力演绎美貌与智慧并存

程序员生活志

华为 少年天才

Week 09 命题作业

Jeremy

JVM系列之:从汇编角度分析NullCheck

程序那些事

Java JVM JIT

《深度工作》学习笔记(5)

石云升

读书笔记 专注 深度工作

week9 学习总结

任小龙

浙江上线市场监管区块链电子取证平台,武汉出台“区块链八条”,

CECBC区块链专委会

区块链 行业资讯 产业落地

「查缺补漏」巩固你的Redis知识体系

Kerwin

Java redis

中国四大银行正在大规模内测数字货币APP|可凭手机号完成转账

CECBC区块链专委会

数字货币 DCEP 中国人民银行

8.5小结

朱月俊

第九周总结

Jam

9-2 秒杀系统的挑战和问题

burner

架构师训练营 -week09 学习总结

GunShotPanda

获得高手的精英思维,从写作开始。

叶小鍵

高手 万维钢 得到精英日课

架构师0期第九周命题作业

何伟敏

产品经理【三句半】,说清你的【酸甜苦辣】

HPioneer

产品经理 产品设计

NIO的组成有哪些——奈学

古月木易

nio

.NET平台的ORM分析工具-InfoQ