https://docs.pingcap.com/zh/tidb/stable/dev-guide-timeouts-in-tidb

本章将介绍 TiDB 中的各种超时,为排查错误提供依据。

GC 超时

TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的数据不会被替换掉,而是与新写入的数据同时保留,并以时间戳来区分版本。TiDB 通过定期 GC 的机制来清理不再需要的旧数据。

默认配置下 TiDB 可以保障每个 MVCC 版本(一致性快照)保存 10 分钟,读取时间超过 10 分钟的事务,会收到报错 GC life time is shorter than transaction duration

当用户确信自己需要更长的读取时间时,比如在使用了 Mydumper 做全量备份的场景中(Mydumper 备份的是一致性的快照),可以通过调整 TiDB 中mysql.tidb 表中的 tikv_gc_life_time 的值来调大 MVCC 版本保留时间,需要注意的是 tikv_gc_life_time 的配置是立刻影响全局的,调大它会为当前所有存在的快照增加生命时长,调小它会立即缩短所有快照的生命时长。过多的 MVCC 版本会拖慢 TiKV 的处理效率,在使用 Mydumper 做完全量备份后需要及时把 tikv_gc_life_time 调整回之前的设置。

更多关于 GC 的信息,请参考 GC 机制简介文档。

事务超时

垃圾回收 (GC) 不会影响到正在执行的事务。但悲观事务的运行仍有上限,有基于事务超时的限制(TiDB 配置文件 [performance] 类别下的 max-txn-ttl 修改,默认为 60 分钟)和基于事务使用内存的限制。

形如 INSERT INTO t10 SELECT * FROM t1 的 SQL 语句,不会受到 GC 的影响,但超过了 max-txn-ttl 的时间后,会由于超时而回滚。

SQL 执行时间超时

TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对“只读”语句生效:max_execution_time,它的默认值为 0,表示无限制。max_execution_time 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。

JDBC 查询超时

MySQL jdbc 的查询超时设置 setQueryTimeout() 对 TiDB 不起作用。这是因为现实客户端感知超时时,向数据库发送一个 KILL 命令。但是由于 tidb-server 是负载均衡的,为防止在错误的 tidb-server 上终止连接,tidb-server 不会执行这个 KILL。这时就要用 MAX_EXECUTION_TIME 实现查询超时的效果。

TiDB 提供了三个与 MySQL 兼容的超时控制参数:

  • wait_timeout,控制与 Java 应用连接的非交互式空闲超时时间。在 TiDB v5.4 及以上版本中,默认值为 28800 秒,即空闲超时为 8 小时。在 v5.4 之前,默认值为 0,即没有时间限制。
  • interactive_timeout,控制与 Java 应用连接的交互式空闲超时时间,默认值为 8 小时。
  • max_execution_time,控制连接中 SQL 执行的超时时间,仅对“只读”语句生效,默认值是 0,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。

但在实际生产环境中,空闲连接和一直无限执行的 SQL 对数据库和应用都有不好的影响。你可以通过在应用的连接字符串中配置这两个 session 级的变量来避免空闲连接和执行时间过长的 SQL 语句。例如,设置 sessionVariables=wait_timeout=3600(1 小时)和 sessionVariables=max_execution_time=300000(5 分钟)

[转帖]TiDB 中的各种超时的更多相关文章

  1. c# webConfig中的session超时详细设置

    webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 ses ...

  2. Java程序中解决数据库超时与死锁

    Java程序中解决数据库超时与死锁 2011-06-07 11:09 佚名 帮考网 字号:T | T   Java程序中解决数据库超时与死锁,每个使用关系型数据库的程序都可能遇到数据死锁或不可用的情况 ...

  3. websphere中的会话超时设置 和 web应用中web.xml中session-timeout关系

    Tomcat默认的会话的超时时间设置 设置Tomcat session有效期的三种方式有: 1.在tomcat/conf/web.xml中修改session-timeout的值,该设置是TOMCAT全 ...

  4. (转)HttpURLConnection中设置网络超时

    转:http://www.xd-tech.com.cn/blog/article.asp?id=37 Java中可以使用HttpURLConnection来请求WEB资源.HttpURLConnect ...

  5. 用一个性能提升了666倍的小案例说明在TiDB中正确使用索引的重要性

    背景 最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行. 这个规模不算大,测试数据以及库表结构是用Dump ...

  6. java中异步多线程超时导致的服务异常

    在项目中为了提高大并发量时的性能稳定性,经常会使用到线程池来做多线程异步操作,多线程有2种,一种是实现runnable接口,这种没有返回值,一种是实现Callable接口,这种有返回值. 当其中一个线 ...

  7. android 中设置HttpURLConnection 超时并判断是否超时

    设置超时: URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); c ...

  8. golang中channel的超时处理

    并发中超时处理是必不可少的,golang没有提供直接的超时处理机制,但可以利用select机制来解决超时问题. func timeoutFunc() { //首先,实现并执行一个匿名的超时等待函数 t ...

  9. Sipdroid实现SIP(六): SIP中的请求超时和重传

    目录 一. Sipdroid的请求超时和重传 二. SIP中超时和重传的定义 三. RFC中超时和重传的定义 一. Sipdroid的请求超时和重传 Sipdroid实现SIP协议栈系列, 之前的文章 ...

  10. C#中的多线程超时处理实践

    最近我正在处理C#中关于timeout行为的一些bug.解决方案非常有意思,所以我在这里分享给广大博友们. 我要处理的是下面这些情况: 我们做了一个应用程序,程序中有这么一个模块,它的功能向用户显示一 ...

随机推荐

  1. C 按位显示二进制

    转载:https://mp.weixin.qq.com/s?__biz=Mzk0NDYzNTI1Ng==&mid=2247483733&idx=2&sn=728c93b046d ...

  2. 关于 x^n + 1 形式因式分解的讨论

    昨晚一个同学问我立方和分解,突发奇想想到了这个问题.看到网上关于这个问题的许多解答都不是很准确.在此修正一下. 引理一:立方和公式 对于形如 \(a^3 + b^3\) 的式子,有因式分解: \(a^ ...

  3. 文心一言 VS 讯飞星火 VS chatgpt (29)-- 算法导论5.2 1题

    一.在 HIRE-ASSISTANT 中,假设应聘者以随机顺序出现,你正好雇用一次的概率是多少?正好雇用 n 次的概率是多少? 文心一言: 讯飞星火: 华为盘古: 在HIRE-ASSISTANT中,假 ...

  4. MySQL篇:bug1_navicat添加外键保存后不起作用(消失)

    问题 在Nacicat premium中添加外键一保存就消失 用SQL语句也显示创建成功,没有报错,可是在INSERT中又起不到约束作用 解决办法 参考一下资料发现可能是表的类型不支持外键 要在 My ...

  5. 【技术总结】从Hash索引到LSM树

    摘要:本文将从实现最简单的Key-Value数据库讲起,然后针对实现过程中遇到的一些瓶颈,采用上述的索引技术,对数据库进行优化,以此达到对数据库的索引技术有一个较为深刻的理解. 前言 数据库算是软件应 ...

  6. 万字讲解WiFi为何物

    摘要:WiFi是一种基于IEEE802.11系列协议标准实现的无线通信技术. 本文分享自华为云社区<[云驻共创]物联网无线短距离Wi-Fi技术专题>,作者:Mr红凯. 前言 Wi-Fi通往 ...

  7. 火山引擎 DataLeap 构建Data Catalog系统的实践(三):关键技术与总结

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 关键技术 构建一个好的Data Catalog系统,需要考虑的核心产品设计和技术设计有很多.篇幅所限,本文只概要介 ...

  8. 火山引擎DataTester:企业如何使用A/B实验优化商业化能力

      商业化是企业将研发成果,如新产品.新技术.新服务等,转变成可盈利的商业化产品:整个流程中包含了研发.推广.服务,全程通过精细化管理运营.商业化的本质是流量的变现,而对企业而言,商业化链路的打磨至关 ...

  9. python 解析字节码的相关方法

    python代码被解释器执行时分为两步走: 一.python编译器将代码编译成字节码 二.python虚拟机执行字节码 由于这两步是一起的,所以在python编程中很少能看到字节码.但是想要提高代码效 ...

  10. CodeForces-339B-Xenia and Ringroad (循环队列,水题)

    Xenia lives in a city that has n houses built along the main ringroad. The ringroad houses are numbe ...