我正在MariaDB (版本)上使用innodb_buffer_pool_size
.max_heap_table_size
query_cache_size
tmp_table_size
10.11.2
sysbench
我的目标是观察哪些参数会影响整体性能。为了确定这一点,我使用了不同的参数数值(即 MariaDB 的不同配置)。但是,我发现前面提到的参数都没有影响执行时的性能sysbench
,这很奇怪。
在我的实验中,我使用一台专用机器作为服务器,一台专用机器作为客户端。服务器和客户端都通过一个网络交换机 (1GBit/s) 连接,并使用 Debian 11 的最小安装。在客户端上,我使用oltp_read_write.lua
来自sysbench
使用50000
事件、4 个线程的工作负载,并设置time
为0
. 此外,我的服务器配置文件如下:
[mysqld]
bind-address=0.0.0.0
basedir=<pathRemoved>
datadir=<pathRemoved>
skip_name_resolve=ON
server_id=1
max_connections=100
innodb_buffer_pool_size=64M
max_heap_table_size=16M
query_cache_size=0
tmp_table_size=1M
innodb_buffer_pool_size
请注意,在整个实验过程中,我只改变、max_heap_table_size
、query_cache_size
和的值tmp_table_size
;所有其他参数都设置为其默认值。我为这些参数使用了以下不同的值:
innodb_buffer_pool_size
: 64M, 128M, 192M, 256M, 320Mmax_heap_table_size
: 1M, 16M, 32M, 48M, 64Mquery_cache_size
: 0, 16M, 32M, 48M, 64Mtmp_table_size
: 1M, 16M, 32M, 48M, 64M
我选择这些小值是为了增加在我的小型设置中观察服务器运行时行为变化的机会。在进行基准测试时,我观察到服务器上的 CPU 负载约为 25%。
确保除服务器或客户端进程外没有其他服务正在运行。sysbench
此外,我测量了基准测试完成所需的时间。我对每种配置重复测量 5 次,相对标准偏差约为 0.1%。上述配置的运行时间约为 131 秒。
改变这些参数的值会导致大约 130 秒的运行时间;我只观察到非常轻微的偏差,但没有什么真正相关的。我希望获得更大的运行时更改。
我确保正确创建和使用了配置文件;使用这些参数的无效值进行测试会导致在启动服务器时出错。
在执行基准测试时我是否遗漏了一些重要的东西?还是其他具有更相关数值的参数?
了解正确执行基准测试的各个方面做得很好。看来您的差距在于对 MariaDB 调优参数的理解以及与测试的相关性。
innodb_buffer_pool_size
如果整个数据集已经适合缓冲区,则更改为更大不会有任何好处。增加 sysbench 中的表/表大小可能会影响这一点。当你扩大规模时,看看做一个 5-10 分钟的测试。对于测试是冷启动还是所有内容最初都在内存中也很重要。随着您增加它,增加
innodb_log_file_size
将更好地促进测试的写入部分。max_heap_table_size
,作为一个 OLTP 测试,这没有得到充分的锻炼,它会在数据集排序和更大的连接的分析形式中出现。query_cache_size
,默认值 0 将消除查询缓存的争用。对于 4 个线程,没有足够的并发性来观察读取争用,并且写入可能会很快使查询无效。建议使用更多线程进行测试。tmp_table_size
,实际上也只对分析工作负载有影响。因此,您的调优项,即使是降低的调优项,都在 MariaDB 的 sysbench 测试能力范围内。
您的基准测试方法似乎适得其反。这就像尝试使用随机药物来治疗您不知道存在的疾病。相反,您需要通过观察其症状来识别疾病(如果有的话),并使用特定的药物进行治疗。
运行基线基准测试。监控各种数据库和系统指标以确定瓶颈。查找并调整您认为应该解决瓶颈的参数,一次一个,然后重新运行测试。重复直到达到目标性能。