Чи є швидкий спосіб визначити, скільки місця на диску займає конкретна таблиця 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';
Ось загальний запит, де максимальний показник одиниць становить 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;
Спробувати !!!
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 db 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