【发布时间】:2011-06-22 03:38:50
【问题描述】:
<property name="hibernate.generate_statistics" value="true"/>
在生产场景中,将上述标志切换为 false 是有意义的。应该修改哪些其他标志,以便优化休眠引擎以更快地访问 MySQL 数据库。
【问题讨论】:
<property name="hibernate.generate_statistics" value="true"/>
在生产场景中,将上述标志切换为 false 是有意义的。应该修改哪些其他标志,以便优化休眠引擎以更快地访问 MySQL 数据库。
【问题讨论】:
这取决于 :) 您可以设置缓存大小、获取深度(用于外部连接)、获取批量大小等等。
您可能不想记录太多(show_sql => 设置为 false,format_sql => 设置为 false,use_sql_cmets => 设置为 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),则可以大大提高性能。这再次意味着:考虑什么可以缓存,什么不能缓存,缓存可以和应该有多大。所以这真的,真的取决于:)
【讨论】:
我在 Google 上搜索了有用关键字的各种组合,并找到了一些有用的链接,可以为您指明正确的方向。请记住,对于生产环境,不会有一个“正确”属性的单一、明确的列表。人们会根据他们的经验推荐东西,但你必须尝试并使用常识来找出最适合你的东西。
Hibernate Documentation of Available Configurable Properties
Sample persistence.xml file for MySql
我必须有意识地记住要为 PROD 配置更改的唯一属性是 hibernate.hbm2ddl.auto 属性,它允许 Hibernate 通过自动执行 DDL 语句直接更改您的数据库架构。对于测试数据库,使用“create-drop”值通常是有意义的,这样测试 SessionFactory 将为您创建必要的表或更改现有表以匹配可能的、最近的模式更改。在 prod 上,您不想让 Hibernate 弄乱您的架构。甚至 Hibernate 的人也警告不要在生产环境中使用此功能,因为无法保证数据完整性。您应该为 prod 使用的值是“validate”,它将简单地验证您连接到的数据库是否具有您的 Hibernate 实体映射到的正确架构,如果存在差异,它将无法加载 SessionFactory。
【讨论】: