MySQL 內存監控和釋放 (整理非原創)
來自專欄技術心得
原理
(該圖片轉自Linux Free Command Explained for Beginners (6 Examples))
- total
系統可支配使用的內存總數。
- free
系統尚未使用的內存。(free和是swap,在/proc/meminfo)
- used
used=total-free-buffers-cache。
- shared
被tmpfs使用的內存。(/proc/meminfo)
- buffers
內核緩存使用的內存。
- cache
被緩存頁和slab。
(slab是一組連續的內存頁,由slab分配器分配。這些內存將來被分割為相同大小的段,便於緩存管理。)
- buff/cache
buffers 和 cache的總和。
- available
available≈free+buffers+cached
估計的內存數,用來啟動一個新的應用,不包含swapping。
系統中有些內存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以free不能代表全部可用的內存,這部分可回收的內存加上free才是系統可用的內存。
與free的關鍵區別點在於, free是說的系統層面,available是說的應用程序層面。
手動釋放內存
- 主機執行sync命令
目的:sync 命令將所有未寫的系統緩衝區寫到磁碟中
# sync
- 資料庫執行刷新日誌緩存、表緩存
mysql> flush logs; -- 關閉當前的二進位日誌文件並創建一個新文件
Query OK, 0 rows affected (0.00 sec) mysql> flush tables; -- 關閉所有打開的表,同時該操作將會清空查詢緩存中的內容 Query OK, 0 rows affected (0.00 sec)- 緩存釋放
# /proc/sys/vm/drop_caches
說明:/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整。那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放內存
drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統默認值)1:釋放頁緩存2:釋放dentries和inodes3:釋放所有緩存- 參數優化調整
innodb_flush_method
innodb_flush_method這個參數控制著innodb數據文件及redo log的打開、刷寫模式。
innodb_flush_method=O_DIRECT
O_DIRECT模式:數據文件的寫入操作是直接從mysql innodb buffer到磁碟的,並不用通過操作系統的緩衝,而真正的完成也是在flush這步,日誌還是要經過OS緩衝;推薦閱讀:
※抖音也可以用電腦刷?前方高能!
※雷布斯,謙遜的男神——暨小米大數據實踐分享
※國內幻想文學最高榮譽,銀河英雄傳說紀念獎即將開啟
※黃豆:中國科技界的又一出鬧劇-