mariadb/mysql-test/suite
Thirunarayanan Balathandayuthapani c6de1267dd MDEV-35689 InnoDB system tables cannot be optimized or defragmented
- With the help of MDEV-14795, InnoDB implemented a way to shrink
the InnoDB system tablespace after undo tablespaces have been moved
to separate files (MDEV-29986). There is no way to defragment any
pages of InnoDB system tables. By doing that, shrinking of
system tablespace can be more effective. This patch deals with
defragment of system tables inside ibdata1.

Following steps are done to do the defragmentation of system
tablespace:
1) Make sure that there is no user tables exist in ibdata1

2) Iterate through all extent descriptor pages in system tablespace
and note their states.

3) Find the free earlier extent to replace the lastly used
extents in the system tablespace.

4) Iterate through all indexes of system tablespace and defragment
the tree level by level.

5) Iterate the level from left page to right page and find out
the page comes under the extent to be replaced. If it is then
do step (6) else step(4)

6) Prepare the allocation of new extent by latching necessary
pages. If any error happens then there is no modification of
page happened till step (5).

7) Allocate the new page from the new extent

8) Prepare the associated pages for the block to be modified

9) Prepare the step of freeing of page

10) If any error happens during preparing of associated pages,
freeing of page then restore the page which was modified
during new page allocation

11) Copy the old page content to new page

12) Change the associative pages like left, right and parent page

13) Complete the freeing of old page

Allocation of page from new extent, changing of relative pages,
freeing of page are done by 2 steps. one is prepare which
latches the to be modified pages and checks their validation.
Other is complete(), Do the operation

fseg_validate(): Validate the list exist in inode segment

Defragmentation is enabled only when :autoextend exist in
innodb_data_file_path variable.
2025-04-10 17:13:34 +05:30
..
archive Merge branch '10.5' into 10.6 2024-12-17 11:06:09 +11:00
atomic Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
binlog Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
binlog_encryption MDEV-36424: binlog_encryption.encrypted_master_switch_to_unencrypted_gtid Fails in BB 11.4+ 2025-03-28 19:20:16 +01:00
client
compat MDEV-36047 Package body variables are not allowed as FETCH targets 2025-02-09 13:56:19 +04:00
csv
encryption Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
engines Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
events Merge 10.11 into 11.4 2024-12-02 11:35:34 +02:00
federated Merge 10.11 into 11.4 2025-03-03 11:07:56 +02:00
funcs_1 Merge branch '10.11' into 11.4 2025-01-14 23:45:41 +01:00
funcs_2 Merge 10.5 into 10.6 2025-03-26 17:09:57 +02:00
galera Merge 10.11 into 11.4 2025-04-02 10:15:08 +03:00
galera_3nodes Merge 10.11 into 11.4 2025-04-02 10:15:08 +03:00
galera_3nodes_sr galera mtr tests: synchronization between branches and editions 2025-04-02 04:50:11 +02:00
galera_sr Merge branch '10.6' into '10.11' 2025-04-02 06:33:39 +02:00
gcol Merge 10.11 into 11.4 2025-03-03 11:07:56 +02:00
handler Merge 10.11 into 11.4 2025-01-09 07:58:08 +02:00
heap Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
innodb MDEV-35689 InnoDB system tables cannot be optimized or defragmented 2025-04-10 17:13:34 +05:30
innodb_fts Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
innodb_gis Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
innodb_i_s
innodb_zip Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
jp
json Merge branch '10.11' into 11.2 2024-10-29 16:42:46 +01:00
large_tests
maria Merge 10.11 into 11.4 2025-01-09 07:58:08 +02:00
mariabackup Merge branch '10.11' into 11.4 2025-03-31 22:28:52 +02:00
merge
mtr/t Remove dates from all rdiff files 2025-01-05 16:40:11 +02:00
mtr2
multi_source Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
optimizer_unfixed_bugs
parts Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
perfschema Merge 10.11 into 11.4 2025-03-03 11:07:56 +02:00
perfschema_stress
period Merge branch '10.11' into 11.4 2025-01-14 23:45:41 +01:00
plugins Merge 10.11 into 11.4 2025-01-09 07:58:08 +02:00
roles Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
rpl Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
s3 Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
sql_sequence Merge 10.6 into 10.11 2025-03-27 08:01:47 +02:00
storage_engine
stress MDEV-34453 Trying to read 16384 bytes at 70368744161280 outside the bounds of the file: ./ibdata1 2024-09-20 20:26:43 +05:30
sys_vars Merge 10.11 into 11.4 2025-03-28 13:55:21 +02:00
sysschema
unit
vcol Merge branch '10.11 into 11.4 2025-01-30 12:01:11 +01:00
versioning Merge 10.11 into 11.4 2025-04-02 10:15:08 +03:00
wsrep Merge branch '10.5' into '10.6' 2025-04-02 04:43:24 +02:00