table_definition_cache
INFO
Rule IDs: tc_002
Overview
- Purpose
- Documented in the MySQL 8.4 manual as a server system variable (scope: Global). Purpose and semantics are described at the linked manual page.
- Dynamic (MySQL 8.4 reference)
- MySQL 8.4 marks this variable as dynamic (
Dynamic= Yes). Runtime changes useSET GLOBAL(global scope) orSET SESSION(session scope) — confirm syntax and persistence (SET PERSIST) in the manual. - Default value
- 2000 (auto-sized in some builds) (MySQL 8.4)
- Version and product notes
- MariaDB and Percona Server may use different names, defaults, or dynamic behavior; verify their documentation.
- Documentation
- https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_table_definition_cache
- Other vendors
What is checked
Rules that reference this variable, with their severity and what each rule detects:
- INFO
tc_002: Increase table_definition_cache. Usually auto-sized in MySQL 8.0, but flag if manually set low.
Tuning guidance
- Recommended actions:
- Increase table_definition_cache. Usually auto-sized in MySQL 8.0, but flag if manually set low.
- Trade-offs: A larger table cache reduces file-open overhead but consumes file descriptors and memory. Size it relative to the number of tables accessed concurrently, not the total table count.
Example
Consult the manual for whether SET GLOBAL, SET PERSIST, or SET SESSION applies.