原創(chuàng): 管長(zhǎng)龍 譯
作者:Peter Zaitsev
雖然我們經(jīng)常在較大規(guī)模的系統(tǒng)上運(yùn)行 MySQL ,但我們常常在最小的云實(shí)例上運(yùn)行 MySQL,或者只在我們的筆記本電腦上運(yùn)行它。在這些情況下,MySQL 8 和 MySQL 5.7 的內(nèi)存消耗非常重要。
在比較 MySQL 8 和 MySQL 5.7 時(shí),您應(yīng)該知道 MySQL 8 會(huì)使用更多內(nèi)存。對(duì)運(yùn)行相同輕量級(jí)工作負(fù)載的 MySQL 8 和 MySQL 5.7(實(shí)際上它們是 Percona Server 版本)的 1GB VM 進(jìn)行基本測(cè)試。
我看到以下 vmstat 輸出:
MySQL 5.7 vmstat 輸出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 65280 71608 58352 245108 0 0 2582 3611 1798 8918 18 9 11 33 30 4 0 65280 68288 58500 247512 0 0 2094 2662 1769 8508 19 9 13 30 29 3 1 65280 67780 58636 249656 0 0 2562 3924 1883 9323 20 9 7 37 27 4 1 65280 66196 58720 251072 0 0 1936 3949 1587 7731 15 7 11 36 31
MySQL 8.0 vmstat 輸出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 9 1 275356 62280 60832 204736 0 0 2197 5245 2638 13453 24 13 2 34 27 3 0 275356 60548 60996 206340 0 0 1031 3449 2446 12895 25 11 10 28 26 7 1 275356 78188 59564 190632 0 1 2448 5082 2677 13661 26 13 6 30 25 4 1 275356 76516 59708 192096 0 0 2247 3750 2401 12210 22 12 4 38 24
正如您所看到的,MySQL 8 使用了大約 200MB 的 swap 分區(qū),并且使用更少的系統(tǒng)緩存,被分配更多內(nèi)存。
如果我們查看“top”命令的輸出,我們會(huì)看到:
MySQL 5.7

MySQL 8.0

這也展示出 MySQL8 使用的更多常駐內(nèi)存和虛擬內(nèi)存。特別是“可怕的”虛擬內(nèi)存,因?yàn)樗h(yuǎn)遠(yuǎn)超過(guò)這些 VM 上可用的 1GB 物理內(nèi)存。當(dāng)然,虛擬內(nèi)存使用(VSZ)是現(xiàn)代應(yīng)用程序?qū)嶋H內(nèi)存需求的一個(gè)很差的指標(biāo),但它確實(shí)證實(shí)了更高的內(nèi)存需求這個(gè)事。
實(shí)際上,正如我們從 “vmstat” 輸出中所知道的那樣,即使沒(méi)有太多的“空間”,MySQL 8 和 MySQL 5.7 都不會(huì)在低負(fù)載下使用 swap 分區(qū)。如果您有多個(gè)連接或希望在同一個(gè) VM 上運(yùn)行某些應(yīng)用程序,則可以使用 swap(如果未啟用交換,則可能導(dǎo)致 OOM)。
這是一個(gè)有趣的實(shí)驗(yàn),能看看我有多少可以驅(qū)動(dòng) MySQL 5.7 和 MySQL 8 的內(nèi)存消耗。
以下是我用于此測(cè)試的配置:
[mysqld] innodb_buffer_pool_size=256M innodb_buffer_pool_instances=1 innodb_log_file_size=1G innodb_flush_method=O_DIRECT innodb_numa_interleave=1 innodb_flush_neighbors=0 log_bin server_id=1 expire_logs_days=1 log_output=file slow_query_log=ON long_query_time=0 log_slow_rate_limit=1 log_slow_rate_type=query log_slow_verbosity=full log_slow_admin_statements=ON log_slow_slave_statements=ON slow_query_log_always_write_time=1 slow_query_log_use_global_control=all innodb_monitor_enable=all userstat=1
總結(jié)
在開(kāi)發(fā)環(huán)境中遷移到 MySQL 8 時(shí),請(qǐng)記住,使用相同的設(shè)置需要比 MySQL 5.7 配置更多的內(nèi)存。