我怎样才能学会对数据库性能做出现实的假设?

Jhe*_*ico 7 database oracle performance hibernate

我主要是一个使用Hibernate的Java开发人员,在我的一些用例中,我的查询执行速度与我的预期相比非常缓慢.我已经与当地的DBA进行了交谈,在很多情况下,由于查询的性质,他们声称性能无法提高.

但是,我有点犹豫要不要听从他们的话.我可以用什么资源来学习什么时候我必须学习它并找到一种不同的方式来获取我想要的信息或学会以速度生活,以及何时可以在DBA上调用废话.

APC*_*APC 10

你处在一个有趣的关头.大多数Java开发人员使用ORM工具是因为他们对数据库一无所知,他们不想学习任何有关数据库的知识,特别是他们不想学习任何有关特定专有DBMS特性的知识.ORM表面上屏蔽了我们所有这一切.

但是,如果您真的想了解查询应该如何执行,那么您将不得不了解Oracle数据库的工作原理.这是一件好事:如果您使用数据库,您肯定会构建更好的Hibernate应用程序.

Oracle的文档集包括一个关于性能调优的卷.这是开始的地方. 了解更多.正如其他人所说,入门级工具是EXPLAIN PLAN.另一个重要的读物是Oracle的数据库概念指南.调优的一个重要方面是理解数据库的逻辑和物理架构.我也同意DCooke对Tom Kyte的书的推荐.

请记住,有一些承包商和顾问可以通过Oracle性能调优来实现良好的生活.如果这很容易,他们就会变得更穷.但是你当然可以给自己足够的知识,迫使那些讨厌的DBA与你正确接触.


dpb*_*ley 7

DCookie,OMG和APC的回答都是+1.我一直在Hibernate应用程序的DBA方面,正如Tom Kyte所说,没有"fast = true"参数可以使效率低下的SQL并使其运行得更快.偶尔我能够捕获有问题的Hibernate查询并使用Oracle SQL分析器为该语句生成一个SQL Profile,以提高性能.此配置文件是一组提示,它们"拦截"优化程序生成的执行计划,并将其强制(不对应用程序进行更改)为优化程序通常由于某种原因而被优化程序忽略的优选程序.尽管如此,这些发现仍然是例外,而不是表现不佳的SQL.

作为一个可能比ORM层更好地理解数据的开发人员,你可以做的一件事就是编写有效的视图来解决特定的查询问题并将这些视图呈现给Hibernate.

需要注意的一个非常具体的问题是Oracle DATE(而不是TIMESTAMP)列,这些列最终出现在Hibernate生成的查询中,并与WHERE子句中的绑定变量进行比较 - 与Java时间戳数据类型不匹配将阻止使用索引在这些专栏上.