【 使用环境 】生产环境
【 OB or 其他组件 】OceanBase_CE
【 使用版本 】5.7.25-OceanBase_CE-v4.3.4.1
【问题描述】查询超时问题,全局配置了2分钟超时,从日志跟踪发现一个SQL超时了,后续增加了日志打印把SQL打印出来,复制到navicat直接跑,十秒钟到二十秒不等就查询完成了,有点不明所以,服务上面只要一点页面100%超时,复制出来又不会
【复现路径】页面操作触发业务查询,SQL我就不贴出来了, 大体是一条报表的SQL,在此基础上套了一层count如下
select count(*) xxx
【附件及日志】
java.sql.SQLTransientConnectionException: (conn=3221945746) Timeout, query has reached the maximum query timeout: 120000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.
ob_query_timeout 查一下参数设置 是否重新连过 设置全局需要重新连接
学习一下
maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again. 调整一下这2个参数ob_query_timeout or query_timeout hint。
我知道可以调整Hint,但是我疑问点事为什么直接复制出来跑没超时,但是在程序就超时了,有点看不懂
程序去实现跟直接执行SQL语句压根不一样的呀
怎么不一样的,程序是java调用jdbc去执行的一条SQL查询报表,应该没有什么额外花销吧,而且这个是数据库底层的报错超时
感谢解答OceanBase问题!对于query场景,我的经验是重点关注timeout配置。
可以看看你们jdbc的有些参数怎么设置的 可以发一下链接串
java端是否设置了更短的时间
statement.setQueryTimeout(0);
socketTimeout 是否设置的合理
支持一下
无效回复,刷积分,会给禁言
看看社区治理公告
jdbc的参数如下,然后使用了默认的druid连接池,连接池用默认参数,会不会跟我用ob的驱动有关系
url: “jdbc:oceanbase://xxx?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&rewriteBatchedStatements=true”
driver-class-name: “com.oceanbase.jdbc.Driver”
ob驱动是哪个版本的
<oceanbase.version>2.4.16</oceanbase.version>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>${oceanbase.version}</version>
</dependency>
能看一下 你的语句在java端怎么添加的hint么? 从报错的信息 来看确实数据库服务端超时了
数据库查一下这个语句request_time的时间
SELECT request_time,
elapsed_time / 1000000 AS elapsed_sec,
ret_code,
sql_text,
query_sql
FROM oceanbase.GV$OB_SQL_AUDIT
WHERE sql_text LIKE ‘%你的表名%’
AND ret_code = -4012
ORDER BY request_time DESC
LIMIT 5;
数据库查一下这个语句request_time的时间
SELECT request_time,
elapsed_time / 1000000 AS elapsed_sec,
ret_code,
sql_text,
query_sql
FROM oceanbase.GV$OB_SQL_AUDIT
WHERE sql_text LIKE ‘%你的表名%’
AND ret_code = -4012
ORDER BY request_time DESC
LIMIT 5; 这个信息 也查一下
你这个语句 hint是作用子查询上了吧 你把这个hint挪到最外层 或者 在连接层统一调大 session 超时
spring:
datasource:
druid:
connection-init-sqls: SET ob_query_timeout = 300000000
根据我发的语句 查一下完整过的语句 看看



