原創(chuàng): 管長龍 譯
作者:Peter Zaitsev
雖然我們經(jīng)常在較大規(guī)模的系統(tǒng)上運行 MySQL ,但我們常常在最小的云實例上運行 MySQL,或者只在我們的筆記本電腦上運行它。在這些情況下,MySQL 8 和 MySQL 5.7 的內(nèi)存消耗非常重要。
在比較 MySQL 8 和 MySQL 5.7 時,您應(yīng)該知道 MySQL 8 會使用更多內(nèi)存。對運行相同輕量級工作負載的 MySQL 8 和 MySQL 5.7(實際上它們是 Percona Server 版本)的 1GB VM 進行基本測試。
我看到以下 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”命令的輸出,我們會看到:
MySQL 5.7
MySQL 8.0
這也展示出 MySQL8 使用的更多常駐內(nèi)存和虛擬內(nèi)存。特別是“可怕的”虛擬內(nèi)存,因為它遠遠超過這些 VM 上可用的 1GB 物理內(nèi)存。當然,虛擬內(nèi)存使用(VSZ)是現(xiàn)代應(yīng)用程序?qū)嶋H內(nèi)存需求的一個很差的指標,但它確實證實了更高的內(nèi)存需求這個事。
實際上,正如我們從 “vmstat” 輸出中所知道的那樣,即使沒有太多的“空間”,MySQL 8 和 MySQL 5.7 都不會在低負載下使用 swap 分區(qū)。如果您有多個連接或希望在同一個 VM 上運行某些應(yīng)用程序,則可以使用 swap(如果未啟用交換,則可能導致 OOM)。
這是一個有趣的實驗,能看看我有多少可以驅(qū)動 MySQL 5.7 和 MySQL 8 的內(nèi)存消耗。
以下是我用于此測試的配置:
[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é)
在開發(fā)環(huán)境中遷移到 MySQL 8 時,請記住,使用相同的設(shè)置需要比 MySQL 5.7 配置更多的內(nèi)存。