为什么MYSQL在差异虚拟机上插入相同的RAM和CPU速度较慢

问题描述:

我有一个问题,那就是MYSQL在不同的机器上插入相同的RAM和CPU。为什么MYSQL在差异虚拟机上插入相同的RAM和CPU速度较慢

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

MYSQL在我的电脑上执行3000个查询插入在1.5s,但在服务器上执行3000个查询插入在48s。问题是什么?

2 VM具有相同的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秒CONFIG innodb_flush_log_at_trx_commit为0或2服务器的运行速度非常快,但我想知道有什么区别时,innodb_flush_log_at_trx_commit是1对我个人电脑在1.5s执行,但服务器执行在48s?

+0

如果你想知道为什么,从你的两台MySQL主机进行比较/分析,请发布SHOW GLOBAL STATUS;显示全局变量; SHOW ENGINE INNODB STATUS:这将是一个有趣的评估。 09/03/2017 –

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

3000/1.5听起来比SSD还好,所以我猜测有一个带有电池备份写入缓存的RAID控制器,这将使大部分写入操作几乎是瞬间完成。并且具有1的设置将是没有问题的。或者,驱动器可能已启用写入缓存。

+0

谢谢你的回答!你是我的个人电脑使用SSD驱动器和我的服务器使用SAS VelociRaptor 600GB 10K,但为什么速度是如此不同1.5s与48s? –

+0

30倍的速度超过了我的预期,所以我猜测有一个“写入缓存”您可能注意到旋转驱动器正在消失; SSD正在接管,这是其中一个原因 –

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

+0

谢谢你的回答!但我的问题是虚拟机设置innodb_flush_log_at_trx_commit到1,在我的电脑上运行3000查询插入在1.5s和服务器运行3000查询插入在48s,我想知道为什么:( –

为什么可以通过提供
共享VM主机的VM主机TOTAL RAM的类似帐户的VM数量来确定。并从两个MySQL主机进行比较/分析, RAM的GB和

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

这将是一个有趣的评估。

+0

谢谢你的回答!我的电脑和服务器都有1个虚拟机。我的个人电脑16GB RAM,SSD 256G,服务器128GB RAM,2xSAS VelociRaptor 10K RAID 1 600GB –

+0

从您的两台MySQL主机进行比较/分析,请发布 SHOW GLOBAL STATUS; SHOW GLOBAL VARIABLES; SHOW ENGINE INNODB STATUS: 这将是一个有趣的评估。 –

@Vuong胡志明我们能够确定为什么只有与

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

为每个主机。希望你可以将这些信息添加到你的问题。