MyBatis游標(biāo)Cursor在Oracle數(shù)據(jù)庫(kù)上的測(cè)試方式
測(cè)試數(shù)據(jù)的列更多,內(nèi)容更多,和 MyBatis游標(biāo)Cursor的正確用法和百萬(wàn)數(shù)據(jù)傳輸?shù)膬?nèi)存測(cè)試 不同,占用內(nèi)存沒(méi)有可比性。
1.1. 不配置內(nèi)容,查詢(xún)?nèi)浚?9萬(wàn)數(shù)據(jù)

內(nèi)存緩慢增長(zhǎng),12分鐘都沒(méi)有查詢(xún)完。
1.2. 初始2G內(nèi)存,最大4G內(nèi)存,fetchSize=10000
當(dāng)不設(shè)置fetchSize時(shí),Oracle默認(rèn)10,內(nèi)存增長(zhǎng)和1一樣緩慢,查看源碼發(fā)現(xiàn)Oracle默認(rèn)為10:

為了更快的測(cè)試出結(jié)果,這里設(shè)置10000。

- 查詢(xún)過(guò)程耗時(shí):54764ms
- GC:20次
- 占用內(nèi)存:1582MB
2.1. Cursor查詢(xún),一條一條處理

默認(rèn)的fetchSize=10,內(nèi)容沒(méi)有持續(xù)增加,但是執(zhí)行時(shí)間仍然很長(zhǎng)。
5分鐘沒(méi)有完成,直接終止運(yùn)行。
2.2 Cursor查詢(xún),fetchSize=10000

- 查詢(xún)過(guò)程耗時(shí):49340ms
- GC:36次
- 占用內(nèi)存:164MB
2.3 Cursor查詢(xún),fetchSize=1000,內(nèi)存限制20MB


- 查詢(xún)過(guò)程耗時(shí):124113ms
- GC:4563次
- GC耗時(shí):73337ms
- 占用內(nèi)存:19MB
- 一半的時(shí)間在GC,吞吐量只有41%。
2.4 Cursor查詢(xún),fetchSize=100,內(nèi)存限制20MB

- 查詢(xún)過(guò)程耗時(shí):390714ms
- GC:4631次
- GC耗時(shí):95130ms
- 占用內(nèi)存:18MB
- GC耗時(shí)很長(zhǎng),吞吐量只有76%。
7分鐘才執(zhí)行完,
2.5 Cursor查詢(xún),fetchSize=10000,內(nèi)存限制50MB

- 查詢(xún)過(guò)程耗時(shí):42044ms
- GC:158次
- GC耗時(shí):173ms
- 占用內(nèi)存:42MB
總結(jié)
除了上面的列出的幾種情況下,還試過(guò)多種不同的配置,耗時(shí)沒(méi)有比2.5更好。
除了MySQL中需要通過(guò)fetchSize = Integer.MIN_VALUE作為標(biāo)記開(kāi)啟流式傳輸外,其他數(shù)據(jù)庫(kù)都是正常的用法,通過(guò)控制 fetchSize 大小來(lái)減少內(nèi)存占用和數(shù)據(jù)庫(kù)交互次數(shù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+Tess4j實(shí)現(xiàn)牛的OCR識(shí)別工具的示例代碼
這篇文章主要介紹了SpringBoot+Tess4j實(shí)現(xiàn)牛的OCR識(shí)別工具的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
由@NotNull注解引出的關(guān)于Java空指針的控制
這是一些很容易學(xué)會(huì)的簡(jiǎn)單技術(shù),但是對(duì)于代碼質(zhì)量和健壯性來(lái)說(shuō)確實(shí)很重要。以我的經(jīng)驗(yàn),僅是第一個(gè)小技巧就已經(jīng)對(duì)改進(jìn)代碼質(zhì)量具有很大的作用了2016-09-09
Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像詳解
在互聯(lián)網(wǎng)上有許多有趣的場(chǎng)景,其中的一種就是動(dòng)圖。這不是視頻,而是一種GIF圖像信息。本文將利用Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像功能,需要的可以參考一下2022-09-09
淺談Java中replace與replaceAll區(qū)別
這篇文章主要介紹了Java中replace與replaceAll區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
基于@Valid和@Validated驗(yàn)證List集合的踩坑記錄
這篇文章主要介紹了基于@Valid和@Validated驗(yàn)證List集合的踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07

