Details
-
New Feature
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
None
-
None
Description
Some systems with a lot of data (data size on disk is notably larger than the amount of RAM available) need a way to make sure that specific table remains in the buffer pool even when some other, bigger nut less important tables are accessed at times. I see two ways to implement this kind of feature:
1. Provide a way to create several named buffer pools of different sizes and then specify in CREATE or ALTER TABLE what pool to use (with default unnamed one used by default).
2. Provide a way to "pin" table to memory somehow via DDL, for example with a clause like STORAGE (BUFFER_POOL_KEEP) in Oracle RDBMS and some way to define what share of the buffer pool is to use for KEEP pool.
No matter how is this implemented, we need some table (INFORMATION_SCHEMA.TABLES or some other) where we can find out if the table is "pinned" to memory or specific buffer pool.
See also https://bugs.mysql.com/bug.php?id=68544 for a similar feature request.
Attachments
Issue Links
- relates to
-
MDEV-11378 AliSQL: [Perf] Issue#23 MERGE INNODB AIO REQUEST
-
- Open
-
-
MDEV-32067 InnoDB linear read ahead had better be logical
-
- Confirmed
-
Another idea: Could the desired effect be achieved by having a SET SESSION parameter that would specify an interface like nice(1) or ionice(1) for a rarely executed low-priority query that would tend to pollute the buffer pool? The impact of that would be that the “recently used” status of pages accessed would not change, and any pages that had to be loaded into the buffer pool would count as “not accessed” and not trigger any read-ahead. This could of course be implemented independently of the “pinning” feature.