为什么 MYSQL 在不同虚拟机相同的 ram 和 cpu 上插入速度慢

Why is MYSQL insert slow on difference virtual machine same ram and cpu

我有一个问题,MYSQL 性能插入不同的机器相同的 ram 和 cpu。

我在 VM 上 运行 MYSQL Window 2k3 4GB Ram,4 个 CPU 在 VMWare Workstaion 12 上构建 运行 在我的 PC 上与 VM Window 2k3 4GB 内存,4 个 CPU 在服务器上的 ESXi 6.5 上构建。当然服务器的所有硬件都比我的PC好。

MYSQL 在我的 PC 上执行 3000 个查询插入在 1.5 秒内,但在服务器上执行 3000 个查询插入在 48 秒内。有什么问题?

2 个虚拟机具有相同的 my.ini 配置:

[client]

port=3306

[mysql]

default-character-set=latin1


[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"

datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"
character-set-server=latin1

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=500

query_cache_size=0

table_cache=256

tmp_table_size=18M

thread_cache_size=8

myisam_max_sort_file_size=100G

myisam_sort_buffer_size=35M

key_buffer_size=25M

read_buffer_size=64K

read_rnd_buffer_size=256K

sort_buffer_size=256K

innodb_additional_mem_pool_size=2M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=1M

innodb_buffer_pool_size=47M

innodb_log_file_size=24M

innodb_thread_concurrency=18

当我在 0.5 秒内非常快地将 innodb_flush_log_at_trx_commit 配置为 0 或 2 服务器 运行 但我想知道当 innodb_flush_log_at_trx_commit 为 1 在我的 PC 上执行时有什么区别1.5 秒但服务器执行时间为 48 秒?

将其保持为 1 将有助于 innodb 符合 ACID。如果将其设置为 1,则日志缓冲区将在每次事务提交后立即写入日志文件。但是,如果您设置 innodb_flush_log_at_trx_commit = 0,则每秒将执行一次相同的操作。实际上这可能是插入时间不同的原因。默认情况下设置为1。设置为2时,事务提交时会将日志写入文件,但不会每次都刷新到磁盘操作。

3000/48 大约是旋转驱动器的速度(经验法则:每个 I/O 10 毫秒)。所以这听起来像 innodb_flush_log_at_trx_commit=1.

3000/1.5 听起来甚至比 SSD 都好,所以我猜测有一个 RAID 控制器带有电池支持的写入缓存,这将使大多数写入几乎是瞬时的。有了1的集合就没有问题了。或者驱动器可能有一个启用的写缓存。

为什么可以通过提供
来确定 共享 VM 主机的类似帐户的 VM 数量 VM 主机的 TOTAL RAM。来自 comparison/analysis 的两个 MySQL 主机, 以 GB 为单位的 RAM 和

SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS:

这将是一个有趣的评估。

@Vuong Minh 我们只能通过

来确定原因
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;

对于您的每个主机。希望您可以将此信息添加到您的问题中。

如果您得到的是 50 - 80% of performance from your VM with MySQL,就虚拟化开销而言,这将是非常正常的。鉴于您几乎看不到 VM 的 3.125% 的性能,这听起来像是磁盘 I/O 问题 - 您的主机 OS 和来宾 OS 之间的某些东西似乎正在减慢您的磁盘写入速度大约 30 倍的系数。

要证明(或反驳)这个假设,请在 VM 和管理程序配置中的虚拟磁盘上启用写入缓存,然后再次尝试 运行 相同的测试。您应该会看到更多可比较的性能。此外,请确保您已使用“厚”而不是惰性分配分配虚拟磁盘 - 如果您分配了一个精简卷,它将导致大量随机磁盘 I/O 而不是顺序磁盘 I/O,这很容易导致 30 倍的减速。