tidb大批量插入与删除数据报单sql内存溢出错误的建议

tidb复制表,即往新表里插入较大批量数据时,报单条sql内存溢出错误,建议如下:
1、tidb为什么不学mysql或oracle,采用临时文件,一定要全部在内存中完成吗,报这种错误很不友好。
2、有参数控制吗,单条sql内存使用多少内存就写临时文件,这样用户体验好,这点感觉mysql、oracle等做的不错,建议tidb学习一下


1 个赞

tidb_enable_tmp_storage_on_oom 这个参数可以控制的,具体可以参见文档

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_enable_tmp_storage_on_oom

默认开启的,insert into select oom开了也没用

oracel是单体架构,其中临时表空间就可以用于排序、中间结果暂存等问题,甚至可以用于闪回操作。而Tidb是分布式架构,需要考虑的问题更多,例如临时文件分布式事务一致性问题等,同时临时文件会带来系统性能下降,如果因为某一节点性能问题导致整个集群性能问题,就有点得不偿失。
当然官方也从6.3版本起提供了参数 tidb_enable_tmp_storage_on_oom 系统变量 | PingCAP 文档中心 可以为某些算子启用临时磁盘,并不是所有操作都支持临时磁盘

1 个赞

tidb_enable_tmp_storage_on_oom 查下

将查询t_dch_patient_card表的语句添加条件,让t_dch_patient_card表经过多次之后完成导入

同时使用系统变量tidb_mem_quota_query来配置一条SQL执行过程中的内存使用阈值
https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage#如何配置一条-sql-执行过程中的内存使用阈值

目前仅支持部分算子落盘
https://docs.pingcap.com/zh/tidb/stable/configure-memory-usage#数据落盘