データベースには2GBくらいしかデータが入っていないのに VolumeBytesUsed が130GBもあったため、調査&解消したので、メモを残します
結論
OPTIMIZE TABLE <テーブル名>
上記コマンドを実行し、VolumeBytesUsedが削減された
なぜ VolumeBytesUsed に記録されているデータ容量より多く表示されていたか
VolumeBytesUsed には、記録されているデータ容量以外に、フラグメンテーションによる開放されていないストレージ容量を含んでいる
データの開放余地のあるデータ容量を確認する方法
データベース名:information_schema
テーブル名:tables
の data_free の項目に未開放の容量が記録されている
以下のコマンドで確認可能
SELECT
table_schema AS `Database`,
table_name AS `Table`,
ROUND(data_free / 1024 / 1024 / 1024, 2) AS `Data_Free_GB`,
ROUND((data_length + index_length) / 1024 / 1024 / 1024, 2) AS `Data_Used_GB`
FROM
information_schema.tables
WHERE
table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
ORDER BY
data_free DESC
OPTIMIZE TABLE <テーブル名> に関して
data_free が 130GB もあったので時間がかかるかと思ったが、1秒もかからなかった
このコマンドは、テーブルのロックが入るようで、実行は慎重に行う必要がある