簡體   English   中英

hibernate.jdbc.fetch_size 和 hibernate.jdbc.batch_size 有什么區別?

[英]What is the difference between hibernate.jdbc.fetch_size and hibernate.jdbc.batch_size?

我正在嘗試調整我的應用程序,遇到了一些關於批量獲取和批量選擇的博客,並將我的理解如下。

  • hibernate.jdbc.fetch_size - 用於指定要在選擇查詢中提取的行數。
  • hibernate.jdbc.batch_size - 用於指定要在單個數據庫命中中執行的插入或更新的數量。

請讓我知道我的理解是否正確? 還有上述參數的最佳值是什么..

這兩個選項都在 JDBC 驅動程序中設置屬性。 在第一種情況下, hibernate.jdbc.fetch_size在 JDBC 驅動程序中設置語句的提取大小,即當 select 語句上有多個行結果時提取的行數。

在第二種情況下, hibernate.jdbc.batch_size決定了一次發送到數據庫執行的更新(插入、更新和刪除)的次數。 此參數是執行批量插入所必需的,但必須與有序插入參數和 JDBC 驅動程序將插入重寫為批量插入語句的能力相結合。

這個鏈接

你的假設是正確的。

hibernate.jdbc.fetch_size

hibernate.jdbc.fetch_size Hibernate 配置屬性用於為 Hibernate 在當前運行的 Persistence Context 期間使用的每個語句設置 JDBC Statement#setFetchSize屬性。

通常,您不需要設置此屬性,因為默認值就可以了,特別是對於在單個數據庫往返中獲取整個ResultSet MySQL 和 PostgreSQL。 因為 Hibernate 遍歷整個ResultSet ,所以最好在一次拍攝中獲取所有行,而不是使用多次往返。

僅對於 Oracle,您可能需要設置它,因為默認fetchSize僅為10

hibernate.jdbc.batch_size

hibernate.jdbc.batch_size屬性用於將多個 INSERT、UPDATE 和 DELETE 語句一起批處理,以便可以在單個數據庫調用中設置它們。

如果你設置了這個屬性,你最好也設置這兩個:

  • hibernate.order_insertstrue
  • hibernate.order_updatestrue

獲取大小執行Statement.setFetchSize()而批量大小用於 Hibernate 批處理。 此處解釋這兩個配置參數。 對於休眠批處理,請參閱此處

你的理解似乎很正確。 我會向您推薦有關 Hibernate 的 JBOSS 文檔,以下章節是關於批處理的 而這個是關於調整性能的

這是一個很好的,易於閱讀的源代碼。 它提供了一些關於最佳值的建議,但正如 CodeChimp 所提到的,調整最好是逐個進行,並且隨着時間的推移是一個可重復的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM