为什么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?
3000/48是关于旋转驱动器的速度(经验法则:每I/O 10毫秒)。这听起来像是innodb_flush_log_at_trx_commit=1
。
3000/1.5听起来比SSD还好,所以我猜测有一个带有电池备份写入缓存的RAID控制器,这将使大部分写入操作几乎是瞬间完成。并且具有1
的设置将是没有问题的。或者,驱动器可能已启用写入缓存。
谢谢你的回答!你是我的个人电脑使用SSD驱动器和我的服务器使用SAS VelociRaptor 600GB 10K,但为什么速度是如此不同1.5s与48s? –
30倍的速度超过了我的预期,所以我猜测有一个“写入缓存”您可能注意到旋转驱动器正在消失; SSD正在接管,这是其中一个原因 –
将它保持为1将有助于innodb成为ACID COMPLIANT。如果将其设置为1,则在每次事务提交后不久,日志缓冲区将被写入日志文件。但是,如果您设置innodb_flush_log_at_trx_commit = 0,则每秒都会执行相同的操作。其实这可能是插入时间不同的原因。默认情况下,它被设置为1.当它被设置为2时,当提交事务时日志将写入文件,但每次都不会执行刷新到磁盘的操作。
谢谢你的回答!但我的问题是虚拟机设置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:
这将是一个有趣的评估。
谢谢你的回答!我的电脑和服务器都有1个虚拟机。我的个人电脑16GB RAM,SSD 256G,服务器128GB RAM,2xSAS VelociRaptor 10K RAID 1 600GB –
从您的两台MySQL主机进行比较/分析,请发布 SHOW GLOBAL STATUS; SHOW GLOBAL VARIABLES; SHOW ENGINE INNODB STATUS: 这将是一个有趣的评估。 –
@Vuong胡志明我们能够确定为什么只有与
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;
为每个主机。希望你可以将这些信息添加到你的问题。
如果你想知道为什么,从你的两台MySQL主机进行比较/分析,请发布SHOW GLOBAL STATUS;显示全局变量; SHOW ENGINE INNODB STATUS:这将是一个有趣的评估。 09/03/2017 –