次の構文でinnodbデータベースのサイズを計算しています。 SELECT table_schema AS "データベース"、ROUND(SUM(data_length + index_length)/ 1024/1024、2)AS "サイズ(MB)" FROM information_schema.TABLES GROUP BY table_schema;
Mysqlのドキュメントのとおり、data_length列はクラスター化インデックスの長さをページ単位で示します。しかし、私はそのテーブルにインデックスを作成していません。テーブルの正確な合計スペース、使用済みスペース、および空きスペースを計算する方法は?
追加 Data_free
を数式に追加します。
SELECT table_schema AS "Database",
ROUND(SUM(data_length + index_length + data_free) / 1024 / 1024, 2)
AS "Size (MB)"
FROM information_schema.TABLES
GROUP BY table_schema;
すべてのInnoDBテーブルには「クラスター化された」PRIMARY KEY
、たとえ6バイトの隠し番号のフォールバックであっても。
3つの「長さ」フィールドは、ブロックではなくバイト単位です。
InnoDBテーブルのディスクサイズを計算する別のアプローチは、同等のMyISAMテーブルのサイズを推定し、2から3で乗算します。ただし、DELETEs
などはテーブルが混乱しないため、明白なユーザーアクションなしで縮小します。