# TiDB Server 的缓存
+ TiDB Server 缓存组成
  + SQL 结果
  + 线程缓存
  + 元数据，统计信息
+ TiDB Server 缓存管理
  + tidb_mem_quota_query
  + oom-action
-------------------------------------------------------------
TiDB Server 缓存默认是使用服务器的全部内存的，首先我们看下内存都使用在哪些关键环节上：

- TiDB Server 缓存组成
  - 复杂的 SQL 查询，例如，执行计划中使用了 hash join、过多的子查询，这些计算无法完全由下推到 TiKV 节点的算子来完成，数据必须在 TIDB Server 的缓存中做整理，才能返回给用户。Update&Delete 涉及数据量过大也会占用大量缓存。
  - 线程的缓存都是使用 TiDB Server 的缓存的，如果活跃的线程数过多，也会造成缓存的大量使用。
  - 表的元数据，information schema，用户认证赋权数据和统计信息是需要缓存的。那么为了更好地管理缓存，有哪些参数呢？

- TiDB Server 缓存管理
  - tidb-mem-quota-query 参数可以控制每个 Query 默认的缓存使用量, 另外还有类似的参数，我们可以参考文档：TiDB 内存控制文档
  - oom-action 的配置项如果使用的是 "cancel"，那么当一条 SQL 的内存使用超过一定阈值后，TiDB 会立即中断这条 SQL 的执行并给客户端返回一个 error，error 信息中会详细写明这条 SQL 执行过程中各个占用内存比较多的物理执行算子的内存使用情况。
