Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
Description
The flushing of the InnoDB temporary tablespace is unnecessarily tied to the write-ahead redo logging and the flushing of the persistent tablespaces.
We should avoid any writes to the temporary tablespace, unless the pages are being evicted from the buffer pool and going to be reused.
I think that we should simply omit any pages of temporary tables from buf_pool.flush_list. This would allow us to remove the loop in buf_flush_wait_flushed(), among other things. The refactored LRU flushing of MDEV-23399 would have to be refined further to initiate writes of pages of temporary tables. And any code that invokes a page flush before invalidating or resizing the buffer pool will have to be adjusted. On shutdown, we can obviously discard any writes of temporary pages, but when shrinking the buffer pool we must preserve such data.
There is no need to care about the LSN in the temporary tablespace, because the changes are never going to be logged or recovered.
Attachments
Issue Links
- causes
-
MDEV-24659 Assertion `!fsp_is_system_temporary(bpage->id().space())' failed in buf_flush_relocate_on_flush_list
-
- Closed
-
- is blocked by
-
MDEV-12226 Avoid writes of freed (garbage) pages to InnoDB data files
-
- Closed
-
-
MDEV-15528 Avoid writing freed InnoDB pages
-
- Closed
-
-
MDEV-23399 10.5 performance regression with IO-bound tpcc
-
- Closed
-
- is part of
-
MDEV-16526 Overhaul the InnoDB page flushing
-
- Closed
-
- relates to
-
MDEV-12367 Upgrade from previous versions to 10.2 with innodb-read-only does not work
-
- Closed
-
-
MDEV-26782 InnoDB temporary tablespace: reclaiming of free space does not work
-
- Closed
-
-
MDEV-27716 mtr_t::commit() unnecessarily acquires log_sys.mutex when writing no log
-
- Closed
-
-
MDEV-28699 Shrink temporary tablespaces without restart
-
- Closed
-
-
MDEV-23754 Replace buf_pool.flush_list with a priority queue
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Link |
This issue is blocked by |
Link |
This issue relates to |
Fix Version/s | 10.2 [ 14601 ] |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] |
Affects Version/s | 10.3.0 [ 22127 ] |
Link |
This issue relates to |
Fix Version/s | 10.5 [ 23123 ] | |
Affects Version/s | 10.4.0 [ 23115 ] |
Fix Version/s | 10.2 [ 14601 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Fix Version/s | 10.5 [ 23123 ] | |
Affects Version/s | 10.5.0 [ 23709 ] | |
Assignee | Marko Mäkelä [ marko ] | Vladislav Vaintroub [ wlad ] |
Fix Version/s | 10.2 [ 14601 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Fix Version/s | 10.5 [ 23123 ] |
Affects Version/s | 10.2.2 [ 22013 ] | |
Affects Version/s | 10.3.0 [ 22127 ] | |
Affects Version/s | 10.4.0 [ 23115 ] | |
Affects Version/s | 10.5.0 [ 23709 ] | |
Issue Type | Bug [ 1 ] | Task [ 3 ] |
Fix Version/s | 10.6 [ 24028 ] | |
Fix Version/s | 10.2 [ 14601 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Fix Version/s | 10.5 [ 23123 ] |
Link |
This issue is blocked by |
Link |
This issue is part of |
Description |
The flushing of the InnoDB temporary tablespace is unnecessarily tied to the write-ahead redo logging and the flushing of the persistent tablespaces.
We should avoid any writes to the temporary tablespace, unless the pages are being evicted from the buffer pool and going to be reused. Maybe there should be a separate flush list for temporary tablespaces? There is no need to care about the LSN (write-ahead logging) when flushing, because changes to the temporary tablespace are not logged nor recovered. |
The flushing of the InnoDB temporary tablespace is unnecessarily tied to the write-ahead redo logging and the flushing of the persistent tablespaces.
We should avoid any writes to the temporary tablespace, unless the pages are being evicted from the buffer pool and going to be reused. I think that we should simply omit any pages of temporary tables from {{buf_pool.flush_list}}. This would allow us to remove the loop in {{buf_flush_wait_flushed()}}, among other things. The refactored LRU flushing of There is no need to care about the LSN in the temporary tablespace, because the changes are never going to be logged or recovered. |
Link |
This issue relates to |
Link |
This issue relates to |
Fix Version/s | 10.5 [ 23123 ] | |
Assignee | Vladislav Vaintroub [ wlad ] | Marko Mäkelä [ marko ] |
Status | Open [ 1 ] | In Progress [ 3 ] |
Fix Version/s | 10.5.9 [ 25109 ] | |
Fix Version/s | 10.6.0 [ 24431 ] | |
Fix Version/s | 10.5 [ 23123 ] | |
Fix Version/s | 10.6 [ 24028 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Link |
This issue causes |
Link |
This issue is blocked by |
Link |
This issue relates to |
Workflow | MariaDB v3 [ 79926 ] | MariaDB v4 [ 133156 ] |
Link |
This issue relates to |
Link |
This issue relates to |
Remote Link | This issue links to "Page (MariaDB Confluence)" [ 36720 ] |
Remote Link | This issue links to "Page (MariaDB Confluence)" [ 36720 ] |
I think that this is best done in 10.5. Having any temporary tablespace pages in buf_pool.flush_list is unnecessarily complicating the page cleaner logic.