小站點的伺服器一般在512m或1g左右,但是我們安裝的mysql 5.6、5.7預設啟動占用記憶體400多m,mysql記憶體佔用率明顯偏高,將會導致mysql崩潰,經常出現mysql自動停止的情況。mysql的使用記憶體可以優化的。主要有兩種方法:關閉performance_schema和調整msyql的引數。
關閉 performance_schema
mysql 5.5開始新增乙個資料庫:performance_schema,主要用於收集資料庫伺服器效能引數。並且庫里表的儲存引擎均為performance_schema,而使用者是不能建立儲存引擎為performance_schema的表。mysql5.5預設是關閉的,需要手動開啟,在配置檔案裡新增:
[mysqld]
performance_schema=on
從mysql5.6開始,預設開啟,本文就從mysql5.6來說明,在資料庫使用當中performance_schema的一些比較常用的功能。具體的資訊可以檢視官方文件。
檢視是否開啟
mysql>show variables like 'performance_schema';
| variable_name | value |
| performance_schema | on |
檢視performance_schema開啟時mysql占用的記憶體
ps aux | grep mysqld | grep -v grep | awk ''
結果:mysqld 557.254mb
關閉 performance_schema
檢視mysql啟動時讀取配置檔案的預設目錄
mysql --help|grep 'my.cnf'
在mysql.cnf新增配置:
[mysqld]
performance_schema = off
重啟mysql,檢視關閉performance_schema後占用的記憶體:
ps aux | grep mysqld | grep -v grep | awk ''
結果mysqld 515.32mb
可以看到記憶體少了大概40m。
調整引數
修改 /etc/mysql/mysql.conf.d/mysqld.cnf,在配置末尾追加如下配置
performance_schema_max_table_instances=150
table_definition_cache=150
table_open_cache=64
innodb_buffer_pool_size=2m
5.6預設的設定
performance_schema_max_table_instances = 12500
table_definition_cache = 1400
table_open_cache = 2000
innodb_buffer_pool_size=128m
檢視占用記憶體:
mysqld 171.859mb
減少了400m哦,效果明顯。
mysql 減少快取碎片
沒有辦法避免所有的碎片,但是仔細選擇query cache min res unit 可以有效的避免記憶體浪費,query cache min res unit 過大會產生記憶體浪費和碎片,query cache min res unit 過小導致記憶體經常allocate 也回帶來效能影響,所以q...
分配記憶體時如何減少記憶體碎片
感覺面試的時候經常會被問到這個問題,然後我也學習了一下memcached的slab機制,發現很多伺服器都是使用這種機制來分配記憶體,所以決定學習一下。首先,先對記憶體分配中的夥伴系統有初步的了解 在程式設計和使用的伺服器軟體中,經常需要分配一組連續的頁框,而頻繁地申請和釋放不同大小的連續頁框,必然導...
減少if語句
原文 if語句的缺點 出現if語句的 會越改越糟,變得越來越難維護。1.函式引數中有bool變數 實際上是將兩個不同的功能繫結到了乙個函式中,解決方法是用兩個函式代替乙個函式。1 void foo int arg0,bool flag else 2 void foo int arg0 void go...