【问题标题】:Testing custom ORM solution performance overhead - how to?测试自定义 ORM 解决方案的性能开销 - 如何?
【发布时间】:2009-12-30 21:23:53
【问题描述】:

我使用面向方面的编程 (PostSHArp) 创建了一个自定义 ORM 工具的原型,并实现了持久性无知(在编译时之前)。现在我试图找出与使用纯 DataReader 和 ADO.NET 相比它引入了多少开销。我在 MS SQL Server 2008 和 MySQL Community Edition 中做了一个测试用例——插入、读取、删除数据(大约 1000 条记录)。我使用纯 ADO.NET 和我的自定义工具多次运行此测试。

我预计结果将取决于许多因素 - 内存、交换、CPU、其他进程,因此我运行了多次测试 (20-40)。但结果真的出乎意料。他们只是在这些案例之间差异太大。如果只有一些极端值,我可以忽略它们(可能会发生交换或类似的事情),但它们是如此不同,以至于我确信我不能相信这种测试。几乎有一半的时间,我的 ORM 的性能比纯 ADO.NET 好 10%,其他时候是 -10%。

有什么方法可以使这些测试可靠吗?我没有一台功能强大且内存充足的计算机,但也许我可以让 MS SQL 和 MySQL 或 ADO.NET 在这些测试中尽可能保持一致?那么记录计数呢?哪个更可靠,使用少量记录并运行更多次或其他方式?

【问题讨论】:

    标签: sql-server performance testing orm ado.net


    【解决方案1】:

    你见过ORMBattle.NET吗?请参阅FAQ there,有一些与测量特定 ORM 工具引入的性能开销相关的想法。测试套件是open source

    关于你的结果:

    • 一些 ORM 工具自动批处理语句序列(即一起发送多个 SQL 语句)。如果此功能在 ORM 中实现良好,如果 ADO.NET 测试不涉及批处理,则在 CRUD 操作上很容易击败普通 ADO.NET 2-4 倍。 ORMBattle.NET 上的测试测试了这两种情况。
    • 很大程度上取决于您如何在那里建立事务边界。详情请参考ORMBattle.NET FAQ
    • CRUD 测试根本不是最佳性能指标。一般来说,很容易获得 在这里可能达到最高性能,因为在这种情况下,通常 RDBMS 必须比 ORM 做更多的事情。

    附:我是 ORMBattle.NET 的作者之一,所以如果您对详细信息/可能的贡献感兴趣,可以直接与我联系(或加入 ORMBattle.NET Google Groups)。

    【讨论】:

      【解决方案2】:

      我会运行更长时间的测试并进行更多迭代,因为随着时间的推移,小的差异会平均化,您应该会得到更清晰的画面。此外,请确保消除任何可能影响测试的外部因素,例如正在运行的其他进程、可用内存不足、冷启动与热启动、网络使用情况等。

      此外,请确保您的数据库文件和日志文件已分配足够的可用空间,这样您就不会在某些测试期间等待数据库增大文件。

      【讨论】:

        【解决方案3】:

        首先,您需要找出差异来自何处。 ORM 层本身还是数据库?

        很多时候,这种差异的来源是数据库本身。数据库是非常复杂的系统,内部有许多可以与性能测量结果交互的活动进程。为了获得一些可重现的结果,您必须将您的数据库置于“实验室”条件下,并确保没有意外发生。这意味着什么取决于供应商,您需要了解一些非常高级的主题才能解决这样的问题。例如,在 SQL Server 数据库上,典型的变异来源是:

        • 冷缓存与热缓存(数据和过程)
        • 日志和数据库增长事件
        • 维护工作
        • 幽灵清理
        • 懒惰的作家
        • 检查点
        • 外部内存压力

        【讨论】:

        • 感谢您的提示。我发现 MySql 给出的结果比 MS SQL 不一致,所以我想我必须从测试中排除 MySQL。
        猜你喜欢
        • 2017-11-15
        • 2023-03-18
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 2011-03-31
        • 1970-01-01
        相关资源
        最近更新 更多