Есть ли быстрый способ определить, сколько места на диске занимает определенная таблица MySQL? Таблица может быть MyISAM или Innodb.
Как определить, сколько места на диске занимает определенная таблица MySQL?
Ответ 1
Для таблицы 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';
MEGABYTES
SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
GIGABYTES
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
ОБЩИЙ
Вот общий запрос, где максимальный дисплей устройства - TB (TeraBytes)
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;
Дайте ему попробовать!!!
Ответ 2
Это не будет точным для таблиц InnoDB. Размер на диске на самом деле больше, чем указанный в запросе.
Для получения дополнительной информации см. эту ссылку от Percona.
http://www.mysqlperformanceblog.com/2008/12/16/how-much-space-does-empty-innodb-table-take/
Ответ 3
Быстрый бит SQL для получения 20 лучших таблиц в MB.
SELECT table_schema, table_name,
ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;
Надеюсь, что это кому-то полезно!
Ответ 4
В linux с mysql, установленным по умолчанию:
[[email protected]]$ ls -lha /var/lib/mysql/<databasename>
на основе NIXCRAFT mysql db location
Ответ 5
Основываясь на ответе RolandMySQLDBA, я думаю, мы можем использовать приведенное выше, чтобы получить размер каждой схемы в таблице:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Действительно понравилось!
Ответ 6
Взято из Как проверить, сколько дискового пространства используется моей базой данных?
Вы можете проверить размер таблицы 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';
Ответ 7
Возможно, вы можете посмотреть размер файлов...
Каждая таблица хранится в нескольких отдельных файлах внутри папки, которая называется тем, что вы назвали своей базой данных. Эти папки хранятся в каталоге данных mysql.
Оттуда вы можете сделать "du -sh. *", чтобы получить размер таблицы на диске.
Ответ 8
Я бы просто использовал инструмент mysqldiskusage, как следует
$ mysqldiskusage --server=user:[email protected] 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