# [Known Issues] insert 或 update 与 projection 算子组合可能导致 TiDB panic 异常重启

## Key Words

tidb_projection_concurrency, TiDB 异常重启, Panic, projection

## Description

TiDB 出现 Panic 日志未发现异常报错，系统也没有触发 OOM，搜索 tidb_stderr.log 中的 panic 堆栈信息，发现如下报错关键字 `tidb server index out of range`：

## Root Cause

insert,update 后面跟 projection 算子都有可能触发 Panic。

相关 issue <https://github.com/pingcap/tidb/issues/26832>

## Diagnostic Steps

tidb_stderr.log 打印 panic 日志提示 fatal error: concurrent map read and map write，对比错误栈与下述相似  

```go
panic: runtime error: index out of range [4294967295] with length 1

goroutine 114089996 [running]:
github.com/pingcap/tidb/store/tikv/unionstore.(*nodeAllocator).getNode(...)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/memdb_arena.go:192
github.com/pingcap/tidb/store/tikv/unionstore.(*MemDB).getNode(...)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/memdb.go:733
github.com/pingcap/tidb/store/tikv/unionstore.memdbNodeAddr.getRight(...)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/memdb.go:765
github.com/pingcap/tidb/store/tikv/unionstore.(*MemDB).traverse(0xc048215c70, 0xc074bfaf90, 0x13, 0x13, 0x0, 0x60, 0x7fbc4cc25a48)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/memdb.go:354 +0xd31
github.com/pingcap/tidb/store/tikv/unionstore.(*MemDB).GetFlags(0xc048215c70, 0xc074bfaf90, 0x13, 0x13, 0x3569680, 0x3b9f101, 0xc074a0bb60)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/memdb.go:202 +0x52
github.com/pingcap/tidb/store/tikv/unionstore.(*KVUnionStore).HasPresumeKeyNotExists(0xc0005908b8, 0xc074bfaf90, 0x13, 0x13, 0x13)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/unionstore/union_store.go:120 +0x4c
github.com/pingcap/tidb/store/tikv.actionPessimisticLock.handleSingleBatch(0xc074f003f0, 0xc0479f89a0, 0xc010b6c700, 0x2465, 0x5, 0x1bd, 0x3c05678, 0xc074c0cfc0, 0x0, 0x112fee5, ...)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/pessimistic.go:79 +0x1c7
github.com/pingcap/tidb/store/tikv.(*batchExecutor).startWorker.func1(0xc012715dc0, 0xc074c0d0e0, 0x2465, 0x5, 0x1bd, 0x3c05678, 0xc074c0cfc0, 0x0)
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/2pc.go:1641 +0x187
created by github.com/pingcap/tidb/store/tikv.(*batchExecutor).startWorker
        /home/jenkins/agent/workspace/optimization-build-tidb-linux-amd/go/src/github.com/pingcap/tidb/store/tikv/2pc.go:1624 +0x19e
```

## Resolution

修复 PR merge 后，包括目前已发布或即将发布的版本：v5.0.6、v5.1.4、v5.4.0。

## Workaround

将 tidb_projection_concurrency 设置成 0，sql 性能存在一定降低，需要实际测试是否满足业务要求。

## Affected Versions

v5.0.0 - v5.0.5
v5.1.0 - v5.1.3
v5.2.*
v5.3.0 - v5.3.1
