簡體   English   中英

使用Oracle JDBC的大型結果集,是否可以關閉游標獲取? (獲取大小問題)

[英]Large result sets with Oracle JDBC, can I turn cursor fetching off? (fetch size issue)

我有一種情況,我需要有效地將大約一百萬行加載到內存中進行處理。 我為此使用oracle和純JDBC。

如果我未設置提取大小,則使用默認的Oracle驅動程序10,這意味着它將需要100k次往返,從而使性能超級低效。 如果將獲取大小增加到非常大的值,例如500k或1m,則數據將在5秒鍾內加載。

不幸的是,我無法將獲取大小設置為INT_MAX之類的內容,因為oracle驅動程序會根據獲取大小預先分配緩沖區。

我真正想要的是一種強制JDBC簡單獲取所有行而不使用游標或進行任何增量提取的方法。 我想以最有效的內存方式做到這一點。

有沒有辦法告訴oracle僅獲取所有數據而不進行任何獲取?

12個驅動程序按讀取大小每行每列分配15個字節,用於簿記以及實際數據大小。 因此,如果將提取大小設置為1G,則12驅動程序將分配15GB的簿記空間以及實際數據。 因此,根據您擁有的內存量,可以將提取大小設置為您要支持的內存量。

在12之前的版本中,驅動程序分配的內存要多得多,因此訪存大小必須小得多。

沒有辦法告訴驅動程序在一次往返中獲取所有行。

編輯2017-03-10:我們已經測試了多達2G的行,並且最近發布的12.2驅動程序可以使用FORWARD_ONLY結果集來處理此問題。 它們將使用SCROLL_INSENSITIVE結果集處理多達1,802,723,000行。 那是一個預期的極限。 顯然,這是一台巨大的機器和一個巨大的堆。

暫無
暫無

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

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