MySQL 內存監控和釋放 (整理非原創)

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和inodes

3:釋放所有緩存

  • 參數優化調整

innodb_flush_method

innodb_flush_method這個參數控制著innodb數據文件及redo log的打開、刷寫模式。

innodb_flush_method=O_DIRECT

O_DIRECT模式:數據文件的寫入操作是直接從mysql innodb buffer到磁碟的,並不用通過操作系統的緩衝,而真正的完成也是在flush這步,日誌還是要經過OS緩衝;


推薦閱讀:

抖音也可以用電腦刷?前方高能!
雷布斯,謙遜的男神——暨小米大數據實踐分享
國內幻想文學最高榮譽,銀河英雄傳說紀念獎即將開啟
黃豆:中國科技界的又一出鬧劇-

TAG:計算機科學 | 科技 |