Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

schema-cache: update doc for schema cache #19263

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion schema-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ summary: TiDB 对于 schema 信息采用基于 LRU 的缓存机制,在大量

## 最佳实践

- 在大量数据库和表的场景下(例如 10 万以上的数据库和表数量)或者当数据库和表的数量大到影响系统性能时,建议打开 schema 缓存特性。
- 在大量数据库和表的场景下(例如 10 万以上的数据库和表数量)或者当数据库和表的数量大到影响系统性能时,建议打开 schema 缓存特性。以下的最佳实践主要针对该场景。在数据库和表数量较少时,可以忽略这一特性。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 在大量数据库和表的场景下(例如 10 万以上的数据库和表数量)或者当数据库和表的数量大到影响系统性能时,建议打开 schema 缓存特性。以下的最佳实践主要针对该场景。在数据库和表数量较少时,可以忽略这一特性
- 在大量数据库和表的场景下(例如 10 万以上的数据库和表数量)或者当数据库和表的数量大到影响系统性能时,建议打开 schema 缓存特性。以下的最佳实践主要针对该场景。在数据库和表数量较少时,可以忽略以下设置

- 可以通过观测 TiDB 监控中 **Schema load** 下的子面板 **Infoschema v2 Cache Operation** 来查看 schema 缓存的命中率。如果命中率较低,可以调大 [`tidb_schema_cache_size`](/system-variables.md#tidb_schema_cache_size-从-v800-版本开始引入)。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 可以通过观测 TiDB 监控中 **Schema load** 下的子面板 **Infoschema v2 Cache Operation** 来查看 schema 缓存的命中率。如果命中率较低,可以调大 [`tidb_schema_cache_size`](/system-variables.md#tidb_schema_cache_size-从-v800-版本开始引入)
- 可以通过观测 TiDB 监控中 **Schema load** 下的子面板 **Infoschema v2 Cache Operation** 来查看 schema 缓存的命中率。如果命中率较低(一般低于 70% 时对 QPS 和延迟会有明显的影响),如果业务对 QPS 和延迟比较敏感,建议调大 [`tidb_schema_cache_size`](/system-variables.md#tidb_schema_cache_size-从-v800-版本开始引入),并保持命中率在 85% 以上

- 可以通过观测 TiDB 监控中 **Schema load** 下的子面板 **Infoschema v2 Cache Size** 来查看当前使用的 schema 缓存的大小。
- 建议关闭 [`performance.force-init-stats`](/tidb-configuration-file.md#force-init-stats-从-v657-和-v710-版本开始引入) 以减少 TiDB 的启动时间。
- 如果需要创建大量的表(例如 10 万张以上),建议将参数 [`split-table`](/tidb-configuration-file.md#split-table) 设置为 `false` 以减少 Region 数量,从而降低 TiKV 的内存。
- 在使用 stale read 功能时,如果使用的 schema 太老,可能会导致全量加载历史的 schema,对性能有很大影响。可以通过调大 [`tidb_schema_version_cache_limit`](/system-variables.md#tidb_schema_version_cache_limit-从-v740-版本开始引入) 来缓解这一问题。
- 在访问涉及数据库和表的系统表时,最好指定数据库和表,避免读取大量的元数据,导致影响性能甚至 TiDB OOM。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 在访问涉及数据库和表的系统表时,最好指定数据库和表,避免读取大量的元数据,导致影响性能甚至 TiDB OOM。
- 在访问 INFORMATION_SCHEMA 中的系统视图时,如果视图包含库名或表名字段,建议在查询条件中明确指定数据库名和表名,以避免读取过多元数据,进而影响查询性能,甚至导致 TiDB 内存溢出(OOM)问题


## 已知限制

Expand Down
Loading