xmebcc
(Xmebcc)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:4.0.0
- 【问题描述】:执行一个大事物insert时,报Out Of Memory Quota错误;
SQL语句: insert into b select … from a group by …
其中a表有800W左右数据;
select语句可以单独查询出来,数量400W左右,插入时会报Out Of Memory Quota错误;
参数设置:
tidb:
mem-quota-query: 34359738368
oom-action: cancel
performance.txn-total-size-limit: 10737418240
尝试过使用
set @@session.tidb_batch_insert=1;
set @@session.tidb_dml_batch_size=2000;
还是有类似的问题,请教下老师类似的大事物insert 有什么解决的方法;
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
xmebcc
(Xmebcc)
3
- 参数改成功了
- 没有看到oom相关信息,看到的是语句执行失败的log
tidb log:
[2020/08/31 09:00:19.396 +08:00] [ERROR] [adapter.go:295] ["execute sql panic"] [conn=447] [sql="INSERT INTO CRM_Tag.UserTag_1_Tmp(UserId,SelectValue) \r\
select ...
slow log:
# Time: 2020-08-31T09:30:36.381308762+08:00
# Txn_start_ts: 419125411462250497
# User: root@
# Conn_ID: 447
# Query_time: 27.88141429
# Parse_time: 0.000254554
# Compile_time: 0.000481802
# Cop_time: 0.30591123 Process_time: 0.253 Wait_time: 1.062 Request_count: 35 Total_keys: 8578145 Process_keys: 8569717
# DB: CRM_Tag
# Is_internal: false
# Digest: f7dbf8f202e26239e8f4676b8f84fa991174c4324824cf2a772a2f6f42635b8f
# Stats: OrderInfos:419125421672759307
# Num_cop_tasks: 35
# Cop_proc_avg: 0.007228571 Cop_proc_p90: 0.009 Cop_proc_max: 0.015 Cop_proc_addr:
# Cop_wait_avg: 0.030342857 Cop_wait_p90: 0.066 Cop_wait_max: 0.148 Cop_wait_addr:
# Mem_max: 34414563250
# Prepared: false
# Plan_from_cache: false
# Has_more_results: false
# Succ: false
# Plan: tidb_decode_plan('gwagMAkzXzgJMAkxODI3NjgwLjM4MTc3MjcxNjMJb3JkZXJjdXJyZW50Lm8BDfBAaW5mb3MudXNlcmlkLCBjYXN0KGRpdihDb2x1bW4jNDYsIDI0LjApLCBkZWNpbWFsKDEwLDIpIEJJTkFSWSktPkMNKRw3CjEJNl8xMVZ4ACBncm91cCBieToNWDA1MiwgZnVuY3M6YXZnEW0ENTAdUAA2ESEcZmlyc3Ryb3cVJgwxKS0+dsgAcAoyCTNfMTYJMAk0NjA2NjE0LjkzNjY5NzkxMTUJBeMNhwQ0NRnYDDY1LDRG2AAMNTAsIHZtAH4gAAQKMwGNADJWjQB+WwBEdGltZXN0YW1wZGlmZihIT1VSZm8AFHBpY2t1cAEyZiQAGGRyb3BvZmYBJT1sIDUKNAkzMV8xNValAGRkYXRhOlNlbGVjdGlvbl8xNAo1CTFfMTQJMU5gAQhlcShe1gAoaXNkZWxldGVkLCBBUgRuZWIqAKBzdGF0dXMsIDUpCjYJMTBfMTMJMQk4NTY0Mzk3CXRhYmxlOk9yZGVySUG+SCwga2VlcCBvcmRlcjpmYWxzZQo=')
# Plan_digest: a59f1e0b78679df712c92d95435f654d0e8a38c91d7280aae7f3a242a4c90fa8
INSERT INTO CRM_Tag.UserTag_1_Tmp(UserId,SelectValue) select UserId,cast(AVG(DiffDate)/24.0 as DECIMAL(10,2)) AS SelectValue from
... as o GROUP BY o.UserId;
- 通过dashboard看这个语句最大内存占用是32G,后来通过select into outfile 的方式导出文件,数据文件大概30M大小(200W行)左右
想请教下:
- 目前txn-total-size-limit设置为10G的情况下,单台tikv的内存是否需要达到60G才行呢,还是整个集群内存剩余60G就ok?(实际的单个事务大小限制还取决于服务器剩余可用内存大小,执行事务时 TiDB 进程的内存消耗大约是事务大小 6 倍以上);
- 上述insert into select …是在什么地方有问题呢?( 单个大事务大小限制or内存不足or其他?)
1 个赞
yilong
(yi888long)
4
大事务当前的上限是 10G , 这个内存已经 32G 了.
看报错是被 mem-quota-query 这一项限制往的
这个看着像执行中崩溃了,有可能是被 mem-quota-query 限制住的
即然要执行大事务,可以把各项限制都打开;至于实际是否内存扛得往,可以试一下然后观察内存使用量