【Mybatis】打开 MySQL 流式查询的大门之实践篇

talk is cheap, show me the code.

相关环境

KV
OSWindows 10
Spring Boot2.1.13.RELEASE
mybatis-plus3.2.0
mysql-connector-java5.1.46
数据量1128546
JVM参数-Xmx128m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

xml

<select id="selectAllByStream" resultType="java.util.HashMap"
            resultSetType="FORWARD_ONLY" fetchSize="-2147483648">
	SELECT * FROM user
</select>

mapper

public interface UserMapper extends BaseMapper<User> {

    void selectAllByStream(ResultHandler<HashMap> handler);

}

流式查询测试

@Component
public class TestRunner implements CommandLineRunner {

    @Autowired
    private UserMapper userMapper ;
    
    @Override
    public void run(String... args) throws Exception {
        long s = System.currentTimeMillis();
        userMapper.selectAllByStream(resultContext -> {
            System.out.print(".");
        });
        System.out.println();
        System.out.format("cost[%s]ms\n", System.currentTimeMillis() - s);
        System.out.println(userMapper.selectCount(null));
        System.out.println("done.");
    }
}

控制台输出

................................................................................
cost[22575]ms
1128546
done.

指标检测

应用服务监控

堆内存使用稳定的保持在60M以内。

简直就是稳得一批!
在这里插入图片描述

在这里插入图片描述

mysqld服务监控

在这里插入图片描述
可见,mysqld服务的磁盘 IO 比较明显,所以 MySQL 流式查询是利用游标进行磁盘的读写,不会的对数据库服务器的内存造成压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值