如何計算MySQL資料庫占用記憶體

2021-10-21 18:26:40 字數 1605 閱讀 9465

估計有很多開發,或者剛剛接觸mysql資料庫的運維人員,不太清楚,如何去計算mysql資料庫占用記憶體總大小。

估計有時候,還會奇怪,明明設定的buffer pool size不大,資料庫卻因為作業系統記憶體不足,導致mysql資料庫程序被系統自動kill掉了。

下面就來給你一一揭曉答案

mysql資料占用記憶體

mysql資料庫占用作業系統記憶體,主要分為兩部分

1.buffer pool記憶體占用計算方式

buffer pool目前主要有innodb和myism2個儲存引擎,還有乙個是redo日誌占用記憶體大小,innodb_log_buffer_size

mysql> select ( @@innodb_buffer_pool_size

-> + @@innodb_log_buffer_size

-> + @@key_buffer_size ) / 1024 / 1024 as memory_mb;

+--------------+

| memory_mb |

+--------------+

| 584.00000000 |

+--------------+

1 row in set (0.00 sec)

2.mysql資料庫會話占用記憶體大小

可以使用下面的公式計算乙個會話占用記憶體的大小

mysql> select ( @@read_buffer_size + @@read_rnd_buffer_size

-> + @@sort_buffer_size + @@tmp_table_size

-> + @@join_buffer_size + @@binlog_cache_size ) / 1024 / 1024 as session_mb;

+-------------+

| session_mb |

+-------------+

| 16.90625000 |

+-------------+

1 row in set (0.00 sec)

在這裡需要注意,有時候,因為你的資料庫整體效能下降之後,應用可能會有突然激增很多資料庫連線,可能會造成作業系統的記憶體不足,而導致被系統自動kill掉程序。所以在設計資料庫的時候,一定要考慮資料庫承載的最大連線數。

計算所有連線數占用的總記憶體大小。

先查詢出資料庫有多少會話

mysql> select count(*) from information_schema.processlist;

+----------+

| count(*) |

+----------+

| 1 |

+----------+

1 row in set (0.00 sec)

根據會話數去乘乙個會話占用記憶體的大小,最後得到的就是會話占用的記憶體總大小。

如何計算mysql資料庫占用記憶體 :

如何計算MySQL資料庫大小

據我所知,有兩種計算mysql資料庫大小的方法。總結data length index length等於表的總大小。data length 儲存實際資料。index length 儲存表索引。這是列出整個資料庫大小的sql指令碼 select table schema data base name ...

查詢MySQL資料庫所占用大小

查詢mysql資料庫裡面的所有資料庫各自占用大小 select table schema,concat truncate sum data length 1024 1024,2 mb as data size,concat truncate sum index length 1024 1024,2 ...

資料庫原理 如何計算mysql索引key len

測試開始 一 我們首先繼續按上篇部落格的資料來進行測試 有上面的效果對比我們可以看得出來,當索引字段沒有設定notnull為true時,需要增加乙個位元組來判斷字段是否為空,而且,int型別字段索引佔4個位元組長。二 當我把strvalue欄位更改為varchar 255 型別,不可為null時 更...