Расчет использования дискового пространства для БД MySQL
28
В настоящее время я использую information_schema.TABLES для расчета общего использования дискового пространства, сгруппированного по имени базы данных, но он работает ужасно медленно. На серверах с сотнями баз данных вычисление может занять несколько минут.
Какой самый быстрый метод расчета использования дискового пространства базой данных? Должен ли я просто смотреть на файловую систему? Есть ли способ ускорения информационная_схема?
Если вы используете MyISAM, проще всего просто посмотреть на файловую систему и использовать du -sh /var/lib/mysql/database.
Если вы используете InnoDB с установленным innodb_file_per_table , вы можете получить приблизительный ответ, используя du -sh. Он приблизительный, потому что в файле ibdata1 все еще хранятся некоторые данные, поэтому вы будете немного ниже. Этот метод также работает со смешанными innodb_file_per_tableбазами данных MyISAM / InnoDB ( ).
Если вы используете InnoDB без innodb_file_per_table set, то вам нужно взглянуть на INFORMATION_SCHEMA.
В любом из указанных выше случаев вы можете выполнить следующий запрос, чтобы получить информацию, которую вы ищете.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Если у вас очень большое количество таблиц, оно может быть медленным, как вы уже обнаружили.
Я видел где-то еще, что вариант 3 не учитывает размеры VARCHAR.
Джо
3
Вы можете использовать эту команду для получения информации в ГБ:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
ИЛИ, чтобы включить свободное / возвращаемое пространство, используйте:
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
Пространство может быть восстановлено с помощью команды OPTIMIZE TABLE для таблиц InnoDB, MyISAM и ARCHIVE.
Для того, чтобы я мог видеть, где используется дисковое пространство (независимо от того, находится ли оно в таблице MySQL или нет), я использую свою команду «du». Вот пример того, как я обнаружил, где все пространство съедается.
Вы можете видеть, что большая часть пространства используется этой папкой. / MySQL
Эта папка содержит таблицы данных. Чтобы увидеть, какие таблицы занимают все пространство, вы можете действовать следующим образом, используя опцию «human» или «-h». Мне нравится делать управление дисковым пространством таким образом, потому что иногда вы даже не можете войти в MySQL, потому что вы не знаете пароль или пользователя.
Я бы посмотрел размер файла в вашем словаре данных. Это мгновенно и точно.
Предупреждение : в соответствии с механизмом хранения, индексы хранятся в главном файле или в другом файле, не забудьте суммировать их при необходимости.
Вы можете использовать эту команду для получения информации в ГБ:
Адаптировал ответ от Аарона Брауна, чтобы обеспечить размер в ГБ. Смотрите ответ Аарона Брауна для более подробной информации.
ИЛИ, чтобы включить свободное / возвращаемое пространство, используйте:
Пространство может быть восстановлено с помощью команды OPTIMIZE TABLE для таблиц InnoDB, MyISAM и ARCHIVE.
Смотрите также Как получить истинный размер базы данных MySQL? Больше подробностей.
источник
Для получения информации об имени таблицы и количестве записей в ней можно использовать следующий запрос:
Для получения информации о базах данных на серверах с соответствующим размером можно использовать следующий запрос:
источник
Для того, чтобы я мог видеть, где используется дисковое пространство (независимо от того, находится ли оно в таблице MySQL или нет), я использую свою команду «du». Вот пример того, как я обнаружил, где все пространство съедается.
Вы можете видеть, что большая часть пространства используется этой папкой. / MySQL
Эта папка содержит таблицы данных. Чтобы увидеть, какие таблицы занимают все пространство, вы можете действовать следующим образом, используя опцию «human» или «-h». Мне нравится делать управление дисковым пространством таким образом, потому что иногда вы даже не можете войти в MySQL, потому что вы не знаете пароль или пользователя.
Вы можете видеть, что все пространство заполнено несколькими таблицами, содержащими много данных GiG. Надеюсь это поможет.
источник
Я бы посмотрел размер файла в вашем словаре данных. Это мгновенно и точно.
Предупреждение : в соответствии с механизмом хранения, индексы хранятся в главном файле или в другом файле, не забудьте суммировать их при необходимости.
источник
Я знаю, что это старо, но кто-то может найти это уместным.
В MySQL я использую:
Так как моя БД - InnoDB, это только оценка.
Я сравниваю этот вывод с:
Надеюсь, это поможет вам
источник
Лучший (после выполнения
apt-get install ncdu
):чтобы получить весь общий размер баз данных Mysql в вашем VPS.
источник