Как измерить производительность в спящем режиме? - PullRequest
8 голосов
/ 03 мая 2010

как измерить производительность в спящем режиме? Я хочу знать, сколько времени hibernate занимает для выполнения запроса?

Ответы [ 4 ]

8 голосов
/ 27 января 2012

JProfiler 7.1 имеет датчик JPA / Hibernate:

http://www.ej -technologies.com / продукция / JProfiler / whatsnew71.html

Вот скриншот, который показывает, как это работает:

http://blog.ej -technologies.com / 2012/01 / профилирование-jpahibernate.html

Вид горячих точек выглядит следующим образом:

enter image description here

Отказ от ответственности: Моя компания разрабатывает JProfiler

5 голосов
/ 27 января 2011

Я бы порекомендовал один или несколько из следующих вариантов:

1 голос
/ 03 мая 2010

Вы имеете в виду буквально запрос или запрос + объединение данных в объекты Java?

В любом случае, использование профилирующего инструмента, такого как JProbe, - это, вероятно, тот путь, если вы хотите быть научным. Вам не нужно тратить деньги, в Eclipse есть и бесплатные инструменты.

В простейшем случае достаточно добавить несколько операторов печати вокруг рассматриваемого кода, если измеряемая вещь является доминирующей обработкой.

Очень тщательный анализ производительности очень важен. Часто вам нужно выполнить многократные повторения того, что вы тестируете, чтобы убедиться, что вас не вводят в заблуждение начальные накладные расходы (такие как открытие соединения с БД). И не забывайте, что база данных и производительность, скорее всего, будут критичны, сама hibernate не может ничего сделать с плохо настроенной базой данных.

0 голосов
/ 27 ноября 2018

Когда я делаю разработку со 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)}
...