1.相關配置 1)服務器配置:
cpu:{Intel(R) Xeon(R) CPU E5640 @ 2.67GHz}*16
mem:47
2)MySQL innodb:
innodb_buffer_pool_size = 36G
2.#free -g total used free shared buffers cached
Mem: 47 46 0 0 0 6
-/+ buffers/cache: 39 7
Swap: 7 4 3
3.#vmstat -a -S M 4procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free inact active si so bi bo in cs us sy id wa st
0 0 4741 158 12973 34467 0 0 34 78 1 0 1 0 99 0 0
4.#topPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP CODE DATA COMMAND
12713 mysql 15 0 40.8g 38g 12m S 0.7 82.1 1209:31 2.1g 7660 40g MySQLd
50385 sshan 15 0 11808 1128 772 R 0.3 0.0 0:00.04 10m 56 604 top
5.總結:從top命令可看出:
1)MySQL進程 ,總共需要的內存為40G(DATA 40g),
2)MySQL進程,被 置換的虛擬內存大小為2.1g(SWAP 2.1g)
3)MySQL進程,程序碼占用內存大小為 7660(kb)
4)MySQL進程,非程序碼占用內存大小為 40g
綜上所述,Linux服務器操作系統本身cache掉的內存大小約為6G左右。
6.業務運行環境:MySQL數據量為115G,會頻繁進行大批量的數據導入,數據讀取。相當於一個小型的數據倉庫。
7.影響:詳細請看 High.Performance.MySQL_Second.Edition
8.解決:詳細請看 High.Performance.MySQL_Second.Edition
1)操作系統
修改swappiness參數,讓操作系統盡可能最大程度利用物理內存,而非虛擬內存
$cat /proc/sys/vm/swappiness
60
$echo 0> /proc/sys/vm/swappiness
2)數據庫
(1) 修改數據庫存儲引擎讀寫數據的方式: 使用innodb_flush_method=0_DIRECT.
這個參數只對Innodb引擎起作用
(2)使用大頁內存:large page。(MySIAM,Innodb)
(3)使用memlock配置(問題很多,謹慎使用。具體參考文檔)