为什么 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 倍的减速。
我有一个问题,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 倍的减速。