web-dev-qa-db-ja.com

MySQLのデータベースサイズとしてdata_length + index_lengthをどのように決定しますか

次の構文で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列はクラスター化インデックスの長さをページ単位で示します。しかし、私はそのテーブルにインデックスを作成していません。テーブルの正確な合計スペース、使用済みスペース、および空きスペースを計算する方法は?

1
sreekanth

追加 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などはテーブルが混乱しないため、明白なユーザーアクションなしで縮小します。

0
Rick James