Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
None
-
None
Description
tc_acquire_table and tc_release_table are critical sections of table cache. Among other things, they update TABLE_SHARE::tdc.used_tables:
tc_acquire_table - push new TABLE object to used_tables
tc_release_table - remove TABLE object from used_tables
used_tables list is not really necessary for table cache to operate properly. We can change it with all_tables list instead. tc_acquire_table and tc_release_table wont need to access all_tables list at all.
The cost is as following:
- 2 additional pointers per TABLE object
- SHOW OPEN TABLES will have to iterate all_tables and skip objects with in_use == 0
- same for TABLE_SHARE::visit_subgraph()
- same for kill_delayed_threads_for_table()
A patch for this task has been tested (read-only single table OLTP, 4 CPU linux server) and shown ~30% lower LOCK_open wait time and ~20% higher tps.
Attachments
Issue Links
- relates to
-
MDEV-5388 Reduce usage of LOCK_open: unused_tables
- Closed
-
MDEV-5492 Reduce usage of LOCK_open: TABLE::in_use
- Closed
-
MDEV-5864 Reduce usage of LOCK_open: TABLE_SHARE::tdc.free_tables
- Closed
-
MDEV-4702 Reduce usage of LOCK_open
- Closed
-
MDEV-5403 Reduce usage of LOCK_open: tc_count
- Closed
-
MDEV-5597 Reduce usage of LOCK_open: LOCK_flush
- Closed