2013-01-07 28 views
0

我讀過一些博客文章(例如:http://orapath.blogspot.com.br/2012/04/hibernate.html,http://abramsm.wordpress.com/2008/04/23/hibernate-batch-processing-why-you-may-not-be-using-it-even-if-you-think-you-are/)推薦將hibernate.jdbc.batch_size配置屬性設置爲更高值,以便在處理批量插入/更新時獲得更好的性能。hibernate.jdbc.batch_size是否有用?

但是,瀏覽Hibernate 4.1.8的源代碼我可以看到,無論是org.hibernate.cfg.Settings的字段jdbcBatchSize,還是反映此屬性設置的相應getter getJdbcBatchSize()方法都將用於整個框架。

那麼有什麼理由來配置這個設置嗎?

+0

也許它只是一個程序員的設置,這可以解釋爲什麼它的沒有在框架內使用。 –

回答

1

字段Settings.jdbcBatchSize似乎不被使用,但實際配置在其他地方使用。我下載了hibernate-core的源代碼,並且通過文本搜索可以在某些地方找到Environment.STATEMENT_BATCH_SIZEbeing。

在org.hibernate.engine.jdbc.batch.internal.BatchBuilderImpl.java看看,

結果的文本搜索

Search "STATEMENT_BATCH_SIZE" (23 hits in 22 files) 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\cfg\AvailableSettings.java (1 hit) 
    Line 190: public static final String STATEMENT_BATCH_SIZE = "hibernate.jdbc.batch_size"; 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\cfg\ExternalSessionFactoryConfig.java (1 hit) 
    Line 281:  setUnlessNull(props, Environment.STATEMENT_BATCH_SIZE, jdbcBatchSize); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\cfg\SettingsFactory.java (1 hit) 
    Line 114:  int batchSize = ConfigurationHelper.getInt(Environment.STATEMENT_BATCH_SIZE, properties, 0); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\AbstractTransactSQLDialect.java (1 hit) 
    Line 125:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\Cache71Dialect.java (2 hits) 
    Line 258:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    Line 259:  //getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\CUBRIDDialect.java (1 hit) 
    Line 76:   getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\DB2Dialect.java (1 hit) 
    Line 177:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\H2Dialect.java (1 hit) 
    Line 191:  getDefaultProperties().setProperty(AvailableSettings.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\HSQLDialect.java (1 hit) 
    Line 219:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\InterbaseDialect.java (1 hit) 
    Line 59:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\JDataStoreDialect.java (1 hit) 
    Line 60:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\MckoiDialect.java (1 hit) 
    Line 81:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\MimerSQLDialect.java (1 hit) 
    Line 136:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, "50"); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\MySQLDialect.java (1 hit) 
    Line 182:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\Oracle8iDialect.java (1 hit) 
    Line 200:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\Oracle9Dialect.java (1 hit) 
    Line 87:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\PostgreSQL81Dialect.java (1 hit) 
    Line 154:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\SAPDBDialect.java (1 hit) 
    Line 136:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\TeradataDialect.java (1 hit) 
    Line 110:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\dialect\TimesTenDialect.java (1 hit) 
    Line 84:  getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\engine\jdbc\batch\internal\BatchBuilderImpl.java (1 hit) 
    Line 55:  size = ConfigurationHelper.getInt(Environment.STATEMENT_BATCH_SIZE, configurationValues, size); 
    C:\Documents and Settings\cfweber\Desktop\hibernate\core\org\hibernate\engine\jdbc\batch\internal\BatchBuilderInitiator.java (1 hit) 
    Line 55:     ConfigurationHelper.getInt(Environment.STATEMENT_BATCH_SIZE, configurationValues, 1) 
+0

您指的是與hibernate.jdbc.fetch_size配置相關的字段/屬性。 當我在挖掘插入/更新性能時,我試圖弄清楚* hibernate.jdbc.batch_size *是多麼有用。 – Reginaldo

+0

確實,我的壞,需要更多的咖啡 – beder

+0

我編輯我的答案,以及實際的答案:-) – beder