見積もり - mysql 空き容量 確認



MySQLでインデックスのサイズを調べる方法 (6)

InnoDBテーブルを使用している場合は、個々のインデックスのサイズをmysql.innodb_index_statsから取得できます。 「サイズ」統計にはページ単位の回答が含まれているため、ページサイズ( デフォルトでは16K)を掛けなければなりません。

select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';

https://code.i-harness.com

私は私のインデックスのサイズを決定したい、彼らは主キーインデックスです。 これは、mysqlクラスタ上にあることが起こりますが、私はそれが重要だとは思わない。


Vajk Hermeczの答えを広げる。
これは、PRIMARY(表自体)を使わずに、サイズ順にすべてのインデックスサイズをメガバイト単位で取得する方法です。

SELECT database_name, table_name, index_name, 
round(stat_value*@@innodb_page_size/1024/1024, 2) size_in_mb
FROM mysql.innodb_index_stats
WHERE stat_name = 'size' AND index_name != 'PRIMARY'
ORDER BY 4 DESC;

MyISAMでは、各インデックスブロックは4 KBページであり、それぞれがkey length + 4バイトのインデックスレコードでfill_factorまで満たされています。

Fill factorは通常2/3

InnoDBに関しては、テーブルは常にPRIMARY KEYクラスタ化され、別々のPRIMARY KEYインデックスはありません


ここでは、上記のいくつかを参考にして、各インデックスで使用されているテーブルの合計インデックスの割合を示します。うまくいけば、これは誰かにとって役に立ちます

select 
    database_name, 
    table_name, 
    index_name, 
    round((stat_value*@@innodb_page_size)/1024/1024, 2) SizeMB, 
    round(((100/(SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_NAME = iis.table_name and t.TABLE_SCHEMA = iis.database_name))*(stat_value*@@innodb_page_size)), 2) `Percentage`
from mysql.innodb_index_stats iis 
where stat_name='size' 
and table_name = 'TargetTable'
and database_name = 'targetDB'

出力例

database_name   table_name  index_name  SizeMB  Percentage
targetDB        TargetTable id          10      55.55
targetDB        TargetTable idLookup    5       27.77
targetDB        TargetTable idTest      3       16.66

リャムに感謝


私の未使用ですが、おそらくMySQL Index Analyzerが参考になるかもしれません。






mysql