Oracle
 sql >> база данни >  >> RDS >> Oracle

Бавна производителност на Hibernate + Java, но бърза, когато използвам TOAD със същата собствена заявка на Oracle

Мисля, че какво се случва с този код:

SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult(); 

е това:

на ред 1:създава се план за заявка на базата на някои очаквани стойности за посочените от вас параметри.

на ред 4:заявката се изпълнява със стойност1 и стойност2, но тези стойности не са „добри стойности“ за плана на заявката, който беше разработен на ред 1 и така базата данни изпълнява много неподходящ план за действителните стойности и отнема много време.

Защо?

Разглеждане на изходния код на HibernateSessionImpl.createSQLQuery(...) Намерих този ред код:

SQLQueryImpl query = new SQLQueryImpl(
                sql,
                        this,
                        factory.getQueryPlanCache().getSQLParameterMetadata( sql )
        );

който извиква getQueryPlanCache() с някакъв параметърMetaData. Предполагам, че тези метаданни не са достатъчно добри .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:указване на стойност по подразбиране за колона тип обект

  2. Връща булева стойност от функция на оракул

  3. Потребителско име и парола по подразбиране за база данни Oracle

  4. Получаване на стойности, свързани с максималните и минималните редове в Oracle

  5. PostgreSQL 9.5 - декодиране/избор на случай за разрешаване на грешка с utf8 не работи