Есть ли быстрый способ определить, сколько дискового пространства занимает конкретная таблица MySQL? Стол может быть MyISAM или Innodb.
Есть ли быстрый способ определить, сколько дискового пространства занимает конкретная таблица MySQL? Стол может быть MyISAM или Innodb.
Ответы:
Для стола mydb.mytable
запустите это для:
SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
Вот общий запрос, где максимальная единица измерения - ТБ (Терабайт)
SELECT
CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(
SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
FROM information_schema.tables
WHERE table_schema='mydb'
AND table_name='mytable'
) AA
) A,(SELECT 'B KBMBGBTB' units) B;
Попробуйте!
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;
чтобы получить список всех таблиц mydb
с именем и размером, упорядоченные по размеру.
Это не будет точным для таблиц InnoDB. Размер на диске больше, чем тот, который указан в запросе.
Пожалуйста, смотрите эту ссылку от Percona для получения дополнительной информации.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
В Linux с MySQL установлен по умолчанию:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
в зависимости от местоположения базы данных mysql в NIXCRAFT
Основываясь на ответе RolandMySQLDBA, я думаю, что мы можем использовать вышеупомянутое, чтобы получить размер каждой схемы в таблице:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Очень понравилось!
Возможно, вы могли бы посмотреть на размер файлов ...
Каждая таблица хранится в паре отдельных файлов в папке, которая называется как бы вы ни называли вашу базу данных. Эти папки хранятся в каталоге данных mysql.
Оттуда вы можете сделать 'du -sh. *', Чтобы получить размер таблицы на диске.
Взято из Как проверить, сколько дискового пространства использует моя база данных?
Вы можете проверить размер таблицы MySQL, посмотрев на
phpMyAdmin
панель управления, щелкнув имя базы данных в левом фрейме и считав размер таблиц в правом фрейме.
Приведенный ниже запрос также поможет получить ту же информацию в bytes
select SUM(data_length) + SUM(index_length) as total_size
from information_schema.tables
where table_schema = 'db_name'
and table_name='table_name';
Я бы просто использовал инструмент « mysqldiskusage » следующим образом
$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.
# Database totals:
+------------+----------------+
| db_name | total |
+------------+----------------+
| mydbaname | 5,403,033,600 |
+------------+----------------+
Total database disk usage = 5,403,033,600 bytes or 5.03 GB