【问题标题】:how to measure hibernate performance?如何衡量休眠性能?
【发布时间】:2010-05-03 05:22:26
【问题描述】:

如何衡量休眠中的性能?我想知道hibernate执行一个查询需要多少时间?

【问题讨论】:

    标签: hibernate jprofiler performance


    【解决方案1】:

    JProfiler 7.1 有一个 JPA/Hibernate 探针:

    http://www.ej-technologies.com/products/jprofiler/whatsnew71.html

    这是一个展示其工作原理的屏幕截图:

    http://blog.ej-technologies.com/2012/01/profiling-jpahibernate.html

    热点视图如下所示:

    免责声明:我公司开发JProfiler

    【讨论】:

      【解决方案2】:

      我会推荐以下一种或几种选择:

      【讨论】:

        【解决方案3】:

        当我使用 Spring Hibernate 进行开发时 我通常使用以下属性
        在我的 application.properties 文件中查看 查询执行时间和查询执行方式:

        spring.jpa.properties.hibernate.show_sql=true
        spring.jpa.properties.hibernate.use_sql_comments=true
        spring.jpa.properties.hibernate.format_sql=true
        spring.jpa.properties.hibernate.generate_statistics=true
        

        示例日志输出如下所示:

        Hibernate: 
        select
            order0_.OrderID as OrderID1_4_0_,
            order0_.customerID as customer2_4_0_,
            order0_.employeeID as employee3_4_0_,
            order0_.freight as freight4_4_0_,
            order0_.orderDate as orderDat5_4_0_,
            order0_.requiredDate as required6_4_0_,
            order0_.shipAddress as shipAddr7_4_0_,
            order0_.shipCity as shipCity8_4_0_,
            order0_.shipCountry as shipCoun9_4_0_,
            order0_.shipName as shipNam10_4_0_,
            order0_.shipPostalCode as shipPos11_4_0_,
            order0_.shipRegion as shipReg12_4_0_,
            order0_.shipVia as shipVia13_4_0_,
            order0_.shippedDate as shipped14_4_0_,
            customer1_.customerID as customer1_2_1_,
            customer1_.address as address2_2_1_,
            customer1_.city as city3_2_1_,
            customer1_.companyName as companyN4_2_1_,
            customer1_.contactName as contactN5_2_1_,
            customer1_.contactTitle as contactT6_2_1_,
            customer1_.country as country7_2_1_,
            customer1_.fax as fax8_2_1_,
            customer1_.phone as phone9_2_1_,
            customer1_.postalCode as postalC10_2_1_,
            customer1_.region as region11_2_1_ 
        from
            orders order0_ 
        left outer join
            customers customer1_ 
                on order0_.customerID=customer1_.customerID 
        where
            order0_.OrderID=?
        Hibernate: 
        select
            orderdetai0_.OrderID as OrderID6_3_0_,
            orderdetai0_.ID as ID1_3_0_,
            orderdetai0_.ID as ID1_3_1_,
            orderdetai0_.discount as discount2_3_1_,
            orderdetai0_.OrderID as OrderID6_3_1_,
            orderdetai0_.productID as productI3_3_1_,
            orderdetai0_.quantity as quantity4_3_1_,
            orderdetai0_.unitPrice as unitPric5_3_1_ 
        from
            order_details orderdetai0_ 
        where
            orderdetai0_.OrderID=?
        
        Session Metrics {
        281879 nanoseconds spent acquiring 1 JDBC connections;
        0 nanoseconds spent releasing 0 JDBC connections;
        276015 nanoseconds spent preparing 2 JDBC statements;
        1702274 nanoseconds spent executing 2 JDBC statements;
        0 nanoseconds spent executing 0 JDBC batches;
        0 nanoseconds spent performing 0 L2C puts;
        0 nanoseconds spent performing 0 L2C hits;
        0 nanoseconds spent performing 0 L2C misses;
        0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
        0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)}
        

        【讨论】:

          【解决方案4】:

          您是指字面意义上的查询还是查询 + 将数据转换为 Java 对象?

          无论哪种方式,如果您想保持科学性,使用 JProbe 等分析工具可能是您的最佳选择。您不一定需要花钱,Eclipse 中也有一些免费工具。

          在最简单的情况下,只要在有问题的代码周围添加一些打印语句就足够了,如果您要测量的是主导处理。

          真正彻底地进行性能分析需要非常小心。通常,您需要多次重复您正在测试的东西,以确保您不会被初始开销(例如打开与 Db 的连接)误导。并且不要忘记数据库和性能可能很关键,hibernate 本身无法对调优的数据库做任何事情。

          【讨论】:

          • 感谢回复。您是否有任何特定的免费工具或 eclipse 插件用于在 hibernate 中进行性能分析?
          • 好吧,我在 google 上看到了eclipse.org/tptp,我自己从来没有用过,但肯定值得一看吗?
          猜你喜欢
          • 1970-01-01
          • 2010-10-03
          • 1970-01-01
          • 2019-03-28
          • 2016-12-06
          • 1970-01-01
          • 1970-01-01
          • 2022-11-11
          相关资源
          最近更新 更多