減少mysql記憶體 減少mysql記憶體占用

2021-10-19 04:52:41 字數 1499 閱讀 2013

小站點的伺服器一般在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...