このクエリを実行して、MySQLデータベース内のすべてのテーブルのサイズを取得できます。
show table status from myDatabaseName;
結果を理解するのを手伝ってください。最大のサイズのテーブルを探しています。
どの列を見ればいいですか?
このクエリを実行して、MySQLデータベース内のすべてのテーブルのサイズを取得できます。
show table status from myDatabaseName;
結果を理解するのを手伝ってください。最大のサイズのテーブルを探しています。
どの列を見ればいいですか?
回答:
このクエリを使用して、テーブルのサイズを表示できます(最初に変数を置き換える必要があります)。
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
AND table_name = "$TABLE_NAME";
または、次のクエリを実行すると、すべてのデータベースのすべてのテーブルのサイズが最初に表示されます。
SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;
AND table_name IN ('table_1', 'table_2', 'table_3');
VARCHAR
、BLOB
タイプしますか?
SELECT TABLE_NAME AS "Table Name",
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30
" information_schema "-> SCHEMATA table- > " SCHEMA_NAME "列からスキーマ名を取得できます
追加以下のようにmysqlデータベースのサイズを 取得できます。
SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
結果
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
あなたはできますここで追加の詳細情報を取得します。
クエリで現在選択されているデータベースを使用する場合。このクエリをコピーして貼り付けてください。(変更は必要ありません)
SELECT table_name ,
round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;
SIZE_MB
FROM information_schema.TABLES WHERE table_schema = DATABASE()ORDER BY(data_length + index_length)ASC;
すべてのテーブルのサイズ:
データベースまたはTABLE_SCHEMA
名前が「news_alert」であるとします。次に、このクエリはデータベース内のすべてのテーブルのサイズを表示します。
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
出力:
+---------+-----------+
| Table | Size (MB) |
+---------+-----------+
| news | 0.08 |
| keyword | 0.02 |
+---------+-----------+
2 rows in set (0.00 sec)
特定のテーブルの場合:
あなたTABLE_NAME
が「ニュース」だとしましょう。次に、SQLクエリは
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
AND
TABLE_NAME = "news"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
出力:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news | 0.08 |
+-------+-----------+
1 row in set (0.00 sec)
次のシェルコマンドを試してください(DB_NAME
データベース名に置き換えてください)。
mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head
Drupal / drushソリューションについては、使用中の最大のテーブルを表示する次のサンプルスクリプトを確認してください。
#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20
bashコマンドラインを使用してこれを解決する別の方法を次に示します。
for i in
mysql -NB -e 'show databases'
; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done
ChapMicの回答を基に、私の特定のニーズに合わせたものです。
データベース名のみを指定し、すべてのテーブルを降順で並べ替えます-選択したデータベース内のLARGESTからSMALLESTテーブルまで。置き換える必要がある変数は1つだけです=データベース名。
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;
ssh
アクセスできる場合は、単純にdu -hc /var/lib/mysql
(またはにdatadir
設定されている別のmy.cnf
)を試してみることもできます。
占有されている行数とスペースを表示し、それによって順序付けする別の方法。
SELECT
table_schema as `Database`,
table_name AS `Table`,
table_rows AS "Quant of Rows",
round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;
このクエリで置き換える必要がある唯一の文字列は「yourDatabaseName」です。
既存の回答は実際にはディスク上のテーブルのサイズを示していないことがわかりました。このクエリは、data_lengthとインデックスに基づくテーブルサイズと比較して、より正確なディスク推定を提供します。ディスクを物理的に調べてファイルサイズを確認できないAWS RDSインスタンスにこれを使用する必要がありました。
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc
最後にデータベースの合計サイズを計算します。
(SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
UNION ALL
(SELECT
'TOTAL:',
SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)