Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.6
-
None
-
None
-
SUSE Enterprise Linux 15 SP4, openSUSE Tumbleweed
Description
MariaDB 10.6 has O_DIRECT value as default for innodb_flush_method instead of fsync. This lead to a performance regression in the default configuration, regardless of the filesystem used.
To benchmark the performance, I have used sysbench-0.4.8 oltp read test on btrfs (the most affected), ext4 and xfs.
Filesystem | threads | innodb_flush_method=fsync | innodb_flush_method=O_DIRECT |
---|---|---|---|
ext4 | 1 | 6.5s | 7.0s |
ext4 | 16 | 0.97s | 1.15s |
brtfs | 1 | 6.5s | 77s |
brtfs | 16 | 0.8s | 3.1s |
xfs | 1 | 6.4s | 7.2s |
xfs | 16 | 0.8s | 1.1s |
I have used a mount point in /abuild and the following configuration in /etc/my.cnf.d/sysbench_testing.cnf:
[mysqld]
|
port = 3306
|
datadir=/abuild/mysql-sysbench
|
socket=/abuild/mysql-sysbench/sysbench-mysql.sock
|
#innodb_flush_method=fsync
|
To reproduce, run the following commands:
$ # prepare the db
|
$ sysbench --test=oltp --mysql-user=root \
|
--mysql-socket=/abuild/mysql-sysbench/sysbench-mysql.sock \
|
--mysql-db=test --mysql-port=3306 \
|
--oltp-dist-type=uniform --oltp-read-only --oltp-order-ranges=0 \
|
--oltp-table-size=1000000 --oltp-range-size=1000 prepare
|
$ # run the benchmark
|
$ sysbench --test=oltp --mysql-user=root \
|
--mysql-socket=/abuild/mysql-sysbench/sysbench-mysql.sock \
|
--mysql-db=test --mysql-port=3306 \
|
--oltp-dist-type=uniform --oltp-read-only --oltp-order-ranges=0 \
|
--oltp-table-size=1000000 --oltp-range-size=1000 \
|
--num-threads=$NTHREADS run
|
$ # cleanup the db
|
$ sysbench --test=oltp --mysql-user=root \
|
--mysql-socket=/abuild/mysql-sysbench/sysbench-mysql.sock \
|
--mysql-db=test --mysql-port=3306 cleanup >/dev/null 1>&2
|
I am also aware that some testing by some colleague lead to similar regression in xfs (353.5476s in 10.6 vs 16.9560s in 10.5).
Attachments
Issue Links
- is duplicated by
-
MDEV-31227 innodb_flush_method=O_DIRECT causes 3x regression in workload
-
- Closed
-
- relates to
-
MDEV-19895 Support "autoset" in SET GLOBAL for AUTO_SET system variables
-
- Open
-
-
MDEV-24670 avoid OOM by linux kernel co-operative memory management
-
- Closed
-
-
MDEV-27812 Allow innodb_log_file_size to change without server restart
-
- Closed
-
-
MDEV-24854 Change innodb_flush_method=O_DIRECT by default
-
- Closed
-
Note, that while I do support fsync (if innodb_buffer_pool_size is not configured), I think you're pushing this 20x a little bit too much. First, why would anyone consider btrfs at all - that's not the default, and its read speed as shown by your benchmark, is questionable. So for a database, maybe I'd stay away from btrfs pretty much.
Second, asking about how much buffer pool size to dedicate to database, might be considered the installer's or if you want, packager's responsibility . MariaDB's Windows MSI by default asks about 12.5% of RAM, and also lets user overwrite this, in both UI and silent mode. MSI has been doing it since 10 years, so maybe zypper also can consider asking user that one question.