Mysql

如何計算一張表使用的總記憶體?

  • August 24, 2017

我有innodb_buffer_pool_size=100GB;

show table status where name='test_tb'\G                                                                          

   Data_length: 4686086144
Max_data_length: 0
  Index_length: 5107564544

似乎索引使用 5GB 記憶體。

ANALYZE table test_tb;
SELECT
sum(stat_value) pages,
 index_name,
 sum(stat_value) * @@innodb_page_size /1024/1024 "size(MB)"
 FROM
 mysql.innodb_index_stats
 WHERE
 table_name = 'test_tb'
 AND database_name = 'test_dbs'
 AND stat_description = 'Number of pages in the index'
 GROUP BY
 index_name;

+--------+-------------------+---------------+
| pages  | index_name        | size(MB)      |
+--------+-------------------+---------------+
| 286016 | PRIMARY           | 4469.00000000 |
| 150014 | test_key1         | 2343.96875000 |
| 161727 | test_key2         | 2526.98437500 |
+--------+-------------------+---------------+

它的 8GB。

那麼哪一個是準確的呢?

兩者都是正確的;兩者都說相同的值。(不要除以 1024*1024;它會更明顯一點。)

在 InnoDB 中,它PRIMARY KEY與數據“聚集”在一起。也就是說,它們都在同一個 BTree 結構中。PK提供命令;數據提供內容。

在您的表中,數據約為 4GB,包括 PK 和 BTree 成本;這兩個索引在兩個獨立的 BTree 中,加起來大約 5GB。

引用自:https://dba.stackexchange.com/questions/184230