Mysql
如何計算一張表使用的總記憶體?
我有
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。