h2 数据库Statement was canceled or the session timed out 解决办法

背景

某项目因需要存储的数据较少,选择了h2 数据库。数据库的某张表的数据需要全部加载到内存中使用。

最近,某个项目使用该应用时需求比较特殊,使得这张表的数据量增加到了一万条。此时,查询全量数据的 SQL 发生了异常:

org.h2.jdbc.JdbcSQLException: Statement was canceled or the session timed out; SQL statement:
SELECT xxx [57014-197]

解决办法

什么是Statement Timeout?
statement timeout用来限制statement的执行时长,timeout的值通过调用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API进行设置。不过现在开发者已经很少直接在代码中设置,而多是通过框架来进行设置。

原生的 JDBC Statement 类提供了超时时间设置方法 setQueryTimeout,一万条数据 h2 数据库查询耗时40秒,设置1分钟就可以解决这个异常了。

改为用原生 JDBC 查询,先查询总数,再以总数创建 List,后查询列表添加到 List 中:

// TODO 先查询总数
String countSql = "SELECT count(*) FROM  xx WHERE R_ID=?";
if (totalCount == 0) {return Collections.emptyList();}// TODO 查询记录列表
data = new ArrayList<>((int) totalCount);
String sql = "SELECT a,b from xx R_ID=?";stmt = conn.prepareStatement(sql);// 设置连接查询的超时时间,解决过滤规则过大时、规则查询 java.sql.SQLException: Statement was canceled or the session timed out; SQL statement:
stmt.setQueryTimeout(100);
stmt.setObject(1, id);
rs = stmt.executeQuery();// TODO 处理数据          

额外尝试

决定因素是什么呢?超时时间配置,还是 fetchSize 呢?

  1. 两个都加上总时间 52 秒。
  2. 有超时时间,没有 fetchSize ,45秒回来,也能回来。
  3. 无超时时间,有 fetchSize ,还是异常。
  4. 在 Connection 设置 网络超时配置定时任务,setNetworkTimeout(Executors.newSingleThreadExecutor(), 120000) 无效。

结论:查询语句的超时时间是关键因素,配置 fetchSize 对超时没有影响,但是它影响一次加载的数据量,配置的话可以降低内存、但是增加了查询时间。

启示录

换成 MySQL 数据库后就不存在这个问题了,一次查询2万条毫秒回复。JDBC 各种超时时间的含义,找到一篇比较详细的文章《JDBC超时设置》。

平心而论,h2 是相当轻量的,删除源码等无用文件后,总大小 2M 左右。两兆啊,相比现在动不动就上百M 的 Java 应用来说,这么小体量的 Java 应用,清流一样的存在啊!小而美,两难全吧!

额外测试了:对于稍微大一点的表都有瓶颈,一万条还可以用本文的方法解决,2万条超时时间5分钟都回不来。对于简单应用来说,还是够用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归求fabonacci数列 pta

斐波那契数列&#xff08;Fibonacci sequence&#xff09;是一个经典的数列&#xff0c;它由以下递归关系定义&#xff1a; [ F(n) F(n-1) F(n-2) ] 其中&#xff0c;( F(0) 0 ) 和 ( F(1) 1 )。 在编程中&#xff0c;递归是一种实现斐波那契数列的直观方法。以下是使用递…

git之tag操作

查看本地有哪些 tags # git tag -l v0.0.3 v0.0.5 v0.0.6查看远程有哪些 tags # git ls-remote --tags From https://github.com/eyjian/gomooon.git 1fe7f5ecf369cba34f4328285ce1ec72d62c091e refs/tags/v0.0.3 9371db55046109d7fc9a9f75625d5ec31c326ad1 re…

[muduo网络库]——muduo库Acceptor类(剖析muduo网络库核心部分、设计思想)

接着之前我们剖析的muduo库三大核心组件Channel类&#xff0c;Poller/EpollPoller类&#xff0c;EventLoop类&#xff0c;我们接下来继续看muduo库中的其他类&#xff0c;这一篇&#xff0c;我们先来介绍Acceptor类。 Acceptor类 主要功能 Acceptor类用于创建套接字&#xf…

企业OA办公系统开发笔记:1、搭建后端环境

文章目录 企业办公系统&#xff1a;搭建环境一、项目介绍1、介绍2、技术栈3、项目模块4、数据库 二、搭建环境1、搭建后端1.1、搭建父工程clfwzx-oa-parent1.2、搭建工具类父模块common1.3、搭建工具类common的子模块1.4、搭建实体类模块model和项目模块service-oa 2、配置依赖…

亲测!史上最全数据库基础?!

为什么要学习数据库 以前在程序中存储数据是一个变量&#xff0c;对象&#xff1b;数据都存储在内存中&#xff0c;程序运行结束后就销毁。 后来学习IO之后&#xff0c;将数据存储在文件中&#xff0c;做到持久存储&#xff0c;但是使用不方便。 学习专业的数据存储软件——…

基于POSIX的信号量模拟DAG上的并行计算的同步问题

本代码主题借鉴nju的jyy老师的代码 自己增加了随机生成DAG(有向无环图)(不保证连通)数据进行测试 运行打印结果即为并行计算DAG的拓扑序 #include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <iostream> #include <vector&g…

2024最新最全【NMAP】零基础入门到精通

一、Nmap介绍 Nmap(Network Mapper&#xff0c;网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络&#xff0c;包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap&#xff…

[AIGC] redis 持久化相关的几道面试题

文章目录 1. 什么是Redis持久化&#xff1f;2. Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f;2.1 RDB&#xff08;Redis DataBase&#xff09;&#xff0c;快照2.2 AOF&#xff08;Append Only File&#xff09;&#xff0c;日志 3. 优缺点是什么&#xff1f;…

Vue3的setup

Vue3的setup setup选项是一个接收props和context的函数是一个新的组件选项&#xff0c;作为Composition-API的入口点&#xff0c;只会被执行一次&#xff0c;用于建立数据与逻辑的连接。 注意点 在执行setup函数时&#xff0c;还没执行created生命周期方法&#xff0c;因此在s…

单核CPU调度

CPU MLFQ 调度 MLFQ即多级反馈队列调度。在给定时间片中&#xff0c;任务存在不同优先队列之中等待被执行&#xff0c;MLFQ根据优先级去决定哪个任务在该时间片执行 Round Robin Round Robin即RR&#xff0c;是基于时间片的轮询调度算法。给每个任务分配一个时间片&#xff…

pixhawk无人机飞控解锁

飞控解锁 GitBook 左手油门的遥控解锁是油门右下角拨&#xff0c;右手油门是油门最低&#xff0c;方向最右。 飞控如何加锁? 左手油门&#xff1a;油门左下角 右手油门&#xff1a;油门最低&#xff0c;方向最左 飞控解锁成功后&#xff0c;不推油门的情况下&#xff0c;…

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

大众点评全国店铺基础信息采集-学习培训店铺-2024年5月

2024年5月最新采集大众点评全国(内地)-学习培训大类-店铺基础信息&#xff0c;93余万家 学习培训类店铺示例&#xff1a; 店铺id k40VtNBN3bixFJIU 店铺名称 梦想钢琴成人钢琴(珠江新城总部) 十分制效果评分 9.4 十分制服务评分 9.4 十分制环境评分 9.4 人均价格 1233 …

为什么数据库字符编码不一致会导致索引失效

引言 数据库字符编码不一致是数据库管理和优化过程中经常遇到的问题之一&#xff0c;尤其在涉及多语言环境和多应用时更为显著。本文旨在深入探讨字符编码不匹配如何影响SQL查询性能&#xff0c;导致索引失效&#xff0c;以及其背后的原理。 1. 字符编码与索引基础 字符编码…

【TypeScript模块简介以及使用方法】

TypeScript模块简介 TypeScript中的模块&#xff08;Modules&#xff09;是代码的封装体&#xff0c;它们可以包含变量、函数、类和接口等。在TypeScript中&#xff0c;模块可以被其他模块引用和使用&#xff0c;从而实现代码的复用和模块化开发。 TypeScript支持两种模块系统…

LORA学习笔记2——训练集处理

前言 对于ai训练来说&#xff0c;处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例&#xff0c;记录下训练集处理的流程和一些心得。 素材准备 素材准备有以下几个需要注意的点&#xff1a; 通常训练二次元角色需要30张以上的…

14:HAL---CRC校验

103系列只有一个CRC 前言&#xff1a; CRC&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法&#xff0c;主要用来检测或校核数据传输或者保存后可能出现的错误。…

QX---mini51单片机学习---(8)8*8点阵屏

目录 1LED点阵屏简绍 2 8*8点阵屏电路图74 3 74HC595芯片 4实践编程 1LED点阵屏简绍 2 8*8点阵屏电路图74 怎么点亮&#xff0c;正极给高负极给低 不能同时静态显示&#xff0c;跟数码管动态显示一样&#xff0c;反复横跳&#xff0c;利用视觉效果 3 74HC595芯片 …

斐波那契数

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …

第四届上海理工大学程序设计全国挑战赛---昨日方舟

知识点&#xff1a;模拟 题目描述 《昨日方舟》是一款塔防类游戏。在游戏中&#xff0c;我们要通过部署角色来抵御怪物的入侵。在这款游戏中&#xff0c;有一名角色名字为 “今”&#xff0c;他的能力为能够在地图上部署小蛇&#xff0c;小蛇在某些条件下可以与其他小蛇合体…