# [Known Issues] TiDB Server + binlog，存在大量 delete 导致 OOM

## Key Words

TiDB, OOM, TiDB-binlog , delete

## Description

TiDB Server 发生 OOM

## Root Cause

分析抓的 heap 内存使用情况（inuse_space），可以看到主要内存消耗是在 delete 的 binlog 创建。这个是已知的 issue，是因为 TiDB 在 delete 数据时，需要将完整的行 buffer 在内存中，直到事务结束才可以释放。

## Diagnostic Steps

1. 采集火焰图方法 `curl -G http://{TiDB_IP}:10080/debug/zip?seconds=30" > profile.zip`, IP 地址为 TiDB-Server 服务器的 IP，端口为 tidb_status_port 的端口。

2. 从 memory usage 情况来看，process 内存 跟 inuse 内存差不多，即 inuse 内存即基本可以反映内存的使用情况（见火焰图）

3. 分析抓的 heap 内存使用情况（inuse_space），可以看到主要内存消耗是在 delete 的 binlog 创建

![内存火焰图](../images/TiDB/know-issue-tidb-oom-binlog-delete.png)

## Resolution

N/A

## Workaround

这个根本原因是因为大事务 + delete 导致内存 OOM。可以适当的分割事务。

> **注意**
> 设置了 `query 的 memory quota` 还是会发生 OOM 了，这是因为该配置项针对 `statement` 相关内存；但是现在的实现是 没有把 `binlog` 的内存计算进去（实际是应该的），这就导致偏差比较大 
