Bug #114437 Innodb not support 4k sector size
Submitted: 21 Mar 2024 9:46 Modified: 21 Mar 2024 9:57
Reporter: Ke Yu (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:8.0.36 OS:Any
Assigned to: CPU Architecture:Any

[21 Mar 2024 9:46] Ke Yu
Description:
There are some test cases failed in 4k sector disk when using 'innodb_flush_method=O_DIRECT'.
some failed test cases: 
innodb.tablespace_encrypt_1 innodb.row_format innodb_fts.zip innodb.readahead innodb.create_tablespace_16k innodb.sdi_compressed innodb_fts.create_index_fail_with_disable_sort_file_cache innodb.check_ibd_filesize_16k innodb.innodb_stats_auto_recalc_on_nonexistent innodb.alter_page_size innodb_fts.tablespace_location innodb.alter_kill innodb.default_row_format_tablespace innodb.partition-16k innodb.create_tablespace_8k innodb.create_tablespace_4k innodb.default_row_format innodb.virtual_index innodb.zlob_geom.

How to repeat:
1. run mtr test case with --mysqld=--innodb_flush_method=O_DIRECT in 4k sector disk:
./mtr --mysqld=--innodb_flush_method=O_DIRECT innodb.readahead

2. the result is:
CURRENT_TEST: innodb.readahead
mysqltest: At line 5: Query 'CREATE TABLE t1 (a INT NOT NULL, d INT NOT NULL, b BLOB NOT NULL, c
TEXT, INDEX(d), INDEX(a),  KEY (b(10), a, d), INDEX(c(120), b(120)),
INDEX(b(5), c(10), a) ) charset latin1 ENGINE=INNODB  ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=1' failed.
ERROR 3675 (HY000): Create table/tablespace 't1' failed, as disk is full.

Suggested fix:
When using direct IO, the IO size needs to be aligned to sector size.
There are some IO operations whose sizes are not aligned to 4k in innodb.
[21 Mar 2024 9:57] MySQL Verification Team
Hello Ke Yu,

Thank you for the report and feedback.

regards,
Umesh