Что вы подразумеваете под размером? Количество рядов? Байты взяты на диск?
Марк Байерс
@ Марк, я хочу размер на диске, это правильный метод? # du -sh /mnt/mysql_data/openx/f_scraper_banner_details.MYI 79G /mnt/mysql_data/openx/f_scraper_banner_details.MYI
Ашиш Карпе
3
В связи с этим, если это интересно, я написал описание всех таблиц в этом ответе .
Дрю
Ответы:
1959
Вы можете использовать этот запрос, чтобы показать размер таблицы (хотя сначала вам нужно подставить переменные):
SELECT
table_name AS`Table`,
round(((data_length + index_length)/1024/1024),2)`Size in MB`FROM information_schema.TABLES
WHERE table_schema ="$DB_NAME"AND table_name ="$TABLE_NAME";
или этот запрос, чтобы перечислить размер каждой таблицы в каждой базе данных, по величине сначала:
Спасибо, он работает просто отлично, хотя я не уверен, что он принимает во внимание Blobs.
Дэвид
5
Обратите внимание, вы также можете использовать «IN», чтобы указать несколько таблиц, например,AND table_name IN ('table_1', 'table_2', 'table_3');
David Thomas
6
AFAICT, это только правильно посчитает длины полей статического размера. Как бы вы посчитали VARCHARи BLOBнабрали?
10
4
@kasimir В какой-то момент мир запутался, и некоторые организации по стандартизации и производители оборудования решили, что было бы лучше определить килобайт в десятичной системе. Стандарт IEC теперь называет 2 килобайта (1024 байта) кибибайтом (КиБ). Во всяком случае, MySQL не знает, поэтому, если вы хотите десятичные килобайты IEC, разделите на 1000.
russellpierce
9
Будет ли это работать для хранилища InnoDB? Согласно документации mysql здесь - dev.mysql.com/doc/refman/5.7/en/show-table-status.html , поле data_length для этого механизма содержит размер кластеризованного индекса. Это не будет правильно представлять размер данных. Будет ли он?
euphoria83
96
SELECT TABLE_NAME AS"Table Name",
table_rows AS"Quant of Rows", ROUND((
data_length + index_length
)/1024,2)AS"Total Size Kb"FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema ='YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0,30
Вы можете получить имя схемы из " information_schema " -> таблица SCHEMATA -> столбец " SCHEMA_NAME "
Дополнительно
Вы можете получить размер базы данных mysql следующим образом.
Попробуйте следующую команду оболочки (замените ее DB_NAMEименем вашей базы данных):
mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head
Для решения Drupal / drush, проверьте следующий пример сценария, который будет отображать самые большие используемые таблицы:
#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;"| head -n20
Вот еще один способ решить эту проблему с помощью командной строки bash.
for i in mysql -NB -e 'show databases'; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done
Адаптировано из ответа ChapMic, чтобы соответствовать моей конкретной потребности.
Укажите только имя вашей базы данных, затем отсортируйте все таблицы в порядке убывания - от LARGEST до самой маленькой таблицы внутри выбранной базы данных. Требуется заменить только 1 переменную = имя вашей базы данных.
Наконец, ответ, который не зависит от information_schema. В моем случае он сообщил о 660 МБ, в то время как фактический размер файловой системы составляет 1,8 ГБ
php_nub_qq
2
Другой способ показать количество строк и занимаемое пространство и упорядочить его.
SELECT
table_schema as`Database`,
table_name AS`Table`,
table_rows AS"Quant of Rows",
round(((data_length + index_length)/1024/1024/1024),2)`Size in GB`FROM information_schema.TABLES
WHERE table_schema ='yourDatabaseName'ORDERBY(data_length + index_length)DESC;
Единственная строка, которую вы должны заменить в этом запросе, это "yourDatabaseName".
Я считаю, что существующие ответы на самом деле не дают размер таблиц на диске, что более полезно. Этот запрос дает более точную оценку диска по сравнению с размером таблицы на основе data_length & index. Мне пришлось использовать это для экземпляра AWS RDS, где вы не можете физически изучить диск и проверить размеры файлов.
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024)as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length)/1024/1024/1024),2)as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)orderby FILE_SIZE desc
SELECT TABLE_NAME AS table_name,
table_rows AS QuantofRows,
ROUND((data_length + index_length)/1024,2)AS total_size_kb
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema ='db'ORDERBY(data_length + index_length)DESC;
Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и / или ссылки на документацию. Фрагменты исходного кода не очень полезны без каких-либо фраз вокруг них. Вы также можете найти, как написать хороший ответ очень полезно. Пожалуйста, отредактируйте свой ответ - Из обзора
Ник
@ Ник, почему до сих пор забанены?
Уильям
Извините, я не знаю ответа на этот вопрос - я не модератор.
Ответы:
Вы можете использовать этот запрос, чтобы показать размер таблицы (хотя сначала вам нужно подставить переменные):
или этот запрос, чтобы перечислить размер каждой таблицы в каждой базе данных, по величине сначала:
источник
AND table_name IN ('table_1', 'table_2', 'table_3');
VARCHAR
иBLOB
набрали?Вы можете получить имя схемы из " information_schema " -> таблица SCHEMATA -> столбец " SCHEMA_NAME "
Дополнительно Вы можете получить размер базы данных mysql следующим образом.
Результат
Вы можете получить дополнительную информацию здесь.
источник
Это сортирует размеры (размер БД в МБ).
источник
Если вы хотите, чтобы запрос использовал текущую выбранную базу данных. просто скопируйте и вставьте этот запрос. (Никаких изменений не требуется)
источник
SIZE_MB
FROM information_schema.TABLES WHERE table_schema = DATABASE () ORDER BY (data_length + index_length) ASC;Есть простой способ получить много информации, используя Workbench:
Щелкните правой кнопкой мыши имя схемы и выберите «Инспектор схемы».
В появившемся окне у вас есть несколько вкладок. Первая вкладка «Информация» показывает приблизительную оценку размера базы данных в МБ.
Вторая вкладка «Таблицы» показывает длину данных и другие детали для каждой таблицы.
источник
Размер всех столов:
Предположим, что ваша база данных или
TABLE_SCHEMA
имя "news_alert". Затем этот запрос покажет размер всех таблиц в базе данных.Вывод:
Для конкретной таблицы:
Предположим, что
TABLE_NAME
это "новости" . Тогда SQL-запрос будетВывод:
источник
Попробуйте следующую команду оболочки (замените ее
DB_NAME
именем вашей базы данных):Для решения Drupal / drush, проверьте следующий пример сценария, который будет отображать самые большие используемые таблицы:
источник
Вот еще один способ решить эту проблему с помощью командной строки bash.
for i in
mysql -NB -e 'show databases'
; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; doneисточник
Если вы используете phpmyadmin, просто перейдите к структуре таблицы
например
источник
Адаптировано из ответа ChapMic, чтобы соответствовать моей конкретной потребности.
Укажите только имя вашей базы данных, затем отсортируйте все таблицы в порядке убывания - от LARGEST до самой маленькой таблицы внутри выбранной базы данных. Требуется заменить только 1 переменную = имя вашей базы данных.
источник
Если у вас есть
ssh
доступ, вы можете просто попробоватьdu -hc /var/lib/mysql
(или иначеdatadir
, как указано в вашемmy.cnf
).источник
Другой способ показать количество строк и занимаемое пространство и упорядочить его.
Единственная строка, которую вы должны заменить в этом запросе, это "yourDatabaseName".
источник
Я считаю, что существующие ответы на самом деле не дают размер таблиц на диске, что более полезно. Этот запрос дает более точную оценку диска по сравнению с размером таблицы на основе data_length & index. Мне пришлось использовать это для экземпляра AWS RDS, где вы не можете физически изучить диск и проверить размеры файлов.
источник
Рассчитайте общий размер базы данных в конце:
источник
все 2 выше проверено на mysql
источник
Это должно быть проверено в mysql, а не в postgresql:
источник