Як можна визначити, скільки місця на диску займає певна таблиця MySQL?


145

Чи є швидкий спосіб визначити, скільки місця на диску займає конкретна таблиця MySQL? Стіл може бути MyISAM або Innodb.


У PHPMyAdmin ви можете побачити використання місця, просто клацнувши по таблиці.
AR.

Відповіді на це питання допомогли мені знайти рішення. Ретельний пошук інструменту, який міг би допомогти мені без виконання одного і того ж запиту щоразу, щоб отримати дані, змусив мене пройти MONyog , MySQL Enterprise Monitor , інструментарій Percona . Усі вони дають детальну інформацію про інформацію про диск, але нарешті вибрали MONyog для кращих графічних графіків та простого графічного інтерфейсу.
Матвій

Відповіді:


285

Для таблиці 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;

Спробувати !!!


6
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із назвою та розміром, упорядкованими за розміром.
kqw

1
Додайте "DESC" до пункту ORDER BY, щоб побачити таблиці, які спочатку займають більше місця на диску. ;)
mvsagar

Якщо бути точним, Ви можете захотіти називати одиниці ki bi bytes (KiB), мені bi bytes (MiB) та gi bi bytes (GiB) при використанні бінарних префіксів (множення з потужністю 2). Або ви можете скористатися десятковими префіксами (множення з потужністю 1000), а потім викликати одиниці ki lo bytes (KB), me ga bytes (MB) та gi ga bytes (GB). Дивіться більше: en.wikipedia.org/wiki/Binary_prefix
Márton Tamás

Хтось знає, як це зробити в MSSQL?
Іван Юрченко

@RolandoMySQLDBA, НЕ могли б ви запропонувати на цьому stackoverflow.com/questions/47976837 / ...
DavidB

15

Швидкий біт SQL, щоб отримати топ 20 найбільших таблиць у МБ.

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;

Сподіваюся, що комусь корисно!



2

У Linux з mysql встановлений за замовчуванням:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

на основі розташування mysql db NIXCRAFT


Питання полягає в тому, як виміряти простір, який займає конкретна таблиця .
Флейм

@ShariqueAbdullah це спрацює, якщо ви використовуєте innodb_file_per_table, що не є типовим, але я вважаю, що це дуже часто і / або рекомендується (хтось може легко довести мене неправильно з цього приводу, лише моє враження).
Seaux

@ Seeaux, можливо, але я не знайшов його використовувати в жодних рекомендованих настройках сервера, через які я пройшов. Тож ви можете мати рацію, але оскільки це не є типовим, він може не знайти його. Крім того, я думаю, що innodb функціонує зовсім інакше, ніж MyISAM. Тож навіть якщо у вас розмір файлу, він може бути не таким точним, як це було б у випадку з MyISAM. Але ви праві, що це може бути одне рішення. Я особисто вважаю за краще використовувати команди MySQL, щоб отримати цю інформацію, а не вимірювати розміри файлів.
Шарік Абдулла

2

Виходячи з відповіді RolandMySQLDBA, я думаю, що ми можемо використовувати вищезазначене, щоб отримати розмір кожної схеми в таблиці:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

Дуже сподобалось!


0

Ви можете, можливо, подивитися на розмір файлів ...

Кожна таблиця зберігається в парі окремих файлів всередині папки, яка називається так, як ви називали вашу базу даних. Ці папки зберігаються в каталозі даних mysql.

Звідти ви можете зробити "du -sh. *", Щоб отримати розмір таблиці на диску.


Це працює лише для баз даних MyISAM. ОП попросила рішення, яке також працює з InnoDB.
Попилки

0

Взяте з Як перевірити, скільки дискового простору використовує моя база даних?

Ви можете перевірити розмір таблиці 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';

Це передбачає, що phpMyAdmin встановлений
thebigjc

-1

Я просто використовую інструмент ' 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

ОП попросило дискового простору конкретної таблиці MySQL, а не всієї бази даних
машинний вирок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.