做者:Peter Zaitsev
翻譯:管長龍
雖然咱們常常在較大規模的系統上運行 MySQL ,但咱們經常在最小的雲實例上運行 MySQL,或者只在咱們的筆記本電腦上運行它。在這些狀況下,MySQL 8 和 MySQL 5.7 的內存消耗很是重要。
在比較 MySQL 8 和 MySQL 5.7 時,您應該知道 MySQL 8 會使用更多內存。對運行相同輕量級工做負載的 MySQL 8 和 MySQL 5.7(實際上它們是 Percona Server 版本)的 1GB VM 進行基本測試。mysql
我看到如下 vmstat 輸出:
MySQL 5.7 vmstat 輸出sql
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 分區,而且使用更少的系統緩存,被分配更多內存。測試
若是咱們查看「top」命令的輸出,咱們會看到:
MySQL 5.7
MySQL 8.0
spa
這也展現出 MySQL8 使用的更多常駐內存和虛擬內存。特別是「可怕的」虛擬內存,由於它遠遠超過這些 VM 上可用的 1GB 物理內存。固然,虛擬內存使用(VSZ)是現代應用程序實際內存需求的一個不好的指標,但它確實證明了更高的內存需求這個事。翻譯
實際上,正如咱們從 「vmstat」 輸出中所知道的那樣,即便沒有太多的「空間」,MySQL 8 和 MySQL 5.7 都不會在低負載下使用 swap 分區。若是您有多個鏈接或但願在同一個 VM 上運行某些應用程序,則可使用 swap(若是未啓用交換,則可能致使 OOM)。code
這是一個有趣的實驗,能看看我有多少能夠驅動 MySQL 5.7 和 MySQL 8 的內存消耗。
如下是我用於此測試的配置:server
[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
總結
在開發環境中遷移到 MySQL 8 時,請記住,使用相同的設置須要比 MySQL 5.7 配置更多的內存。blog