Java中驗證 Mybatis 數(shù)據(jù)分片可以減輕GC壓力的操作方法
前言
- 本文使用 Spock(可集成Spring Boot項目) 編寫測試用例,基于 Groovy (JVM語言)
- 用例的目標為 Mybatis 的查詢api
- 用例數(shù)據(jù)量10W 行
- 用例倉庫地址
1. 配置用例堆內(nèi)存大小
-Xmx100m,配置堆內(nèi)存大小,讓溢出情況更快出現(xiàn)

2. 單次全量查造成 GC overhead limit exceeded
“GC overhead limit exceeded”是Java虛擬機(JVM)在運行時拋出的一個錯誤消息,它指示JVM花費了太多時間進行垃圾回收(GC),但回收的堆內(nèi)存卻很少
以下用例的意思是,期待拋出異常,并打印異常信息。

3. 分片查詢減輕GC壓力
使用 Guava 的工具分片查詢同一批數(shù)據(jù),異常消失。

4. Spock 語法積累
4.1 測試用例的鉤子函數(shù)
- Spock 相關的鉤子函數(shù)造數(shù)
- setup 方法——用例執(zhí)行前調(diào)用cleanup 方法——用例執(zhí)行后調(diào)用
@SpringBootTest(classes = KetchupApplication.class)
class GcSpec extends Specification {
@Resource
FileOutputRecordMapper mapper
/**
* 十萬條數(shù)據(jù)庫查詢
*/
Long startId = 1;
Long endId = 100000;
/**
* 生成十萬條數(shù)據(jù),測試用例執(zhí)行完后刪除
*/
def setup() {
def allIds = (startId..endId).toList()
Lists.partition(allIds, 1000).forEach { subIds ->
def sub = subIds.collect(it -> createPO(it))
mapper.batchInsertWithId(sub);
}
}
def cleanup() {
mapper.deleteByIdRang(startId, endId)
}
}4.2 given when then expect 的用法
以下是已知的三種用例寫法
def "分片查詢" () {
given:
when:
then:
} def "分片查詢" () {
when:
then:
} def "分片查詢" () {
given:
expect:
}5. Groovy 語法積累
5.1 Rang 數(shù)據(jù)結構 rang 聲明
def rang = (startId .. endId)
普通的 list 聲明 ()
def list = [1,2,3]
rang 轉 list
// 生成一個list,內(nèi)部的元素是從1 到 100000的數(shù)值類型 def allIds = (1 .. 100000).toList()
5.2 List.collect
// 以下的 collect 寫法比Java簡潔很多 def sub = subIds.collect(it -> createPO(it)) // 等價于 Java 的寫法 List<FileOutputRecordPO> poList = subIds.stream().map(it -> createPO(it)).collect(Collectors.toList())
6. Guava 工具類積累
Lists.partition(allIds, 1000).forEach...
本文的集合分片工具來自:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>后記
大數(shù)據(jù)量的查詢時,避免用一個大List<>裝大量數(shù)據(jù),必要時將數(shù)據(jù)分片,減輕GC壓力。
大數(shù)據(jù)的不同任務,盡量串行化執(zhí)行,避免出現(xiàn)GC毛刺。
到此這篇關于Java中驗證 Mybatis 數(shù)據(jù)分片可以減輕GC壓力的文章就介紹到這了,更多相關 Mybatis 數(shù)據(jù)分片減輕GC壓力內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Boot中Elasticsearch的連接配置原理與使用詳解
在Spring Boot中,我們可以通過Elasticsearch實現(xiàn)對數(shù)據(jù)的搜索和分析,本文將介紹Spring Boot中Elasticsearch的連接配置、原理和使用方法,感興趣的可以了解一下2023-09-09
SpringBoot2 整合Nacos組件及環(huán)境搭建和入門案例解析
這篇文章主要介紹了SpringBoot2 整合Nacos組件,環(huán)境搭建和入門案例詳解,在整合springboot2時注意版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本,具體內(nèi)容詳情跟隨小編一起看看吧2022-03-03
Spring MVC @RequestParam注解使用場景分析
@RequestParam是Spring MVC中用于綁定HTTP查詢參數(shù)和表單數(shù)據(jù)的注解,支持類型轉換、默認值及可選參數(shù),適用于簡單數(shù)據(jù)場景,本文給大家介紹Spring MVC @RequestParam注解使用場景分析,感興趣的朋友一起看看吧2025-07-07
Sleuth+logback 設置traceid 及自定義信息方式
這篇文章主要介紹了Sleuth+logback 設置traceid 及自定義信息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

