<property name="hibernate.generate_statistics" value="true"/>
在生产场景中,将上面的标志切换为false是有意义的。应该修改哪些其他标志,以便优化hibernate引擎,以便更快地访问MySQL数据库。
答案 0 :(得分:2)
这取决于你可以设置缓存大小,获取深度(用于外连接),获取批量大小等等。
您可能不想记录太多(show_sql =&gt;设置为false,format_sql =&gt;设置为false,use_sql_comments =&gt;设置为false)。
但实际上,这取决于你必须衡量。
使用和正确配置连接池也很重要。 这里再次:使用常识和措施。
希望这些链接有用:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html
关键是要使模型正确。如果生成许多执行大量连接的sql请求,性能将成为问题。因此,如果性能至关重要,您必须花一些时间考虑规范化,或者事实上不要在实体关系建模中做太多的规范化。
此外,集合以及您如何建模/处理它们可以在性能方面发挥重要作用。
就缓存而言:根据您的使用情况,如果正确配置二级缓存(例如Ehcache),则可以长时间地提高性能。这又意味着:考虑一下可以缓存什么,什么不可以,多长时间以及缓存可以和应该有多大。所以它真的,绝对取决于:)
答案 1 :(得分:0)
我想了解有用关键字的各种组合,我想出了一些有用的链接,指出了正确的方向。请记住,生产环境中没有“正确”属性的单一,确定性列表。人们会根据他们的经验推荐一些东西,但你必须尝试一下并运用常识来找出最适合你的东西。
Hibernate Documentation of Available Configurable Properties
Sample persistence.xml file for MySql
我曾经有意识地记住改变PROD配置的唯一属性是hibernate.hbm2ddl.auto
属性,它允许Hibernate通过自动执行DDL语句直接改变数据库的模式。对于测试DB,使用“create-drop”值通常是有意义的,这样测试SessionFactory将为您创建必要的表或更改现有表以匹配可能的最近架构更改。在prod上,你不要让Hibernate弄乱你的架构。即使是Hibernate的人也警告不要在生产环境中使用此功能,因为无法保证数据完整性。您应该用于prod的值是“validate”,它将简单地验证您连接的数据库是否具有Hibernate实体映射到的正确模式,如果存在差异,它将无法加载SessionFactory。