技術分享 | MySQL 8 和 MySQL 5.7 在小型設備的內存消耗分析

做者: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

相關文章
相關標籤/搜索