Проблема:
Есть ли способ подсчета количества байтов, занятых созданием таблицы, я знаю, что вы можете получить некоторую информацию из information_schema.tables, но эта информация не является достаточно точной.
На самом деле требуется количество байтов в соответствии с определением таблицы только для innodb, и сопоставление также может рассматриваться как utf-8-general-ci.
Например, проверка таблицы выглядит следующим образом
создать тест таблицы
(
col1 varchar (25),
col2 int,
col3 varchar (3),
col4 char (15),
col5 datetime
);
Теперь потребуется знать общий размер строки, который может быть накоплен в одной строке в соответствии с типами столбцов в таблице.
Нашел какое-то подобное решение в MSSQL, но нужна его версия MySQL
Скрипт для оценки размеров строк для любой таблицы
Буду признателен за любую оказанную помощь.
источник
Ответы:
После долгих размышлений и исследований нашел один ответ, который действительно помог в достижении того, что требовалось. Это скрипт на Perl и ссылка на него
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
Спасибо всем за большую помощь.
источник
-uUser -pPass
в командные строки mysql и mysqldump в сценарии (или попробуйте--defaults-extra-file=/etc/mysql/debian.cnf
вместо этого в Ubuntu / Debian) и запустите его с базой данных в качестве первого аргумента, напримерperl test.pl mydatabase
Вы должны знать размер в байтах каждого поля в соответствии с типом данных ( здесь ссылка на MySQL ), а затем суммировать эти значения вместе.
источник
Шаг 1:
20 английских символов: 2 + 1 * 20
20 ближневосточных / славянских символов: 2 + 2 * 20
20 азиатских символов: 2 + 3 * 20
20 символов эмодзи: 2 + 4 * 20 (и вам нужно
utf8mb4
)Шаг 2: сложите их.
Шаг 3: Умножьте где-нибудь между 2 и 3, чтобы учесть накладные расходы InnoDB. Я обнаружил, что этот фактор обычно работает. (Но не для крошечных таблиц и не обязательно хорошо для секционированных таблиц.)
Не вижу смысла брать максимальный размер каждого столбца.
Вы можете получить ближе
SHOW TABLE STATUS
или эквивалентныеinformation_schema
данные:Шаг 1:
SELECT COUNT(*)
- нам это вместоRows
Шаг 2: Получить
Data_length + Index_length + Data_free
Шаг 3: Разделите.
источник
SELECT AVG(LENGTH(varchar_col))
- Примечание:LENGTH
это уже байты ; не нужно умножать на 2/3/4. (CHAR_LENGTH
получает длину в символах.)Я сделал грубый bash-скрипт для вычисления размера строки и предупреждения, если он преодолевает ограничение на основе схемы:
источник
Уже есть несколько вопросов этого типа, например этот: Как оценить / предсказать размер данных и размер индекса таблицы в MySQL
Одно из различий между этим вопросом и вашей таблицей заключается в наличии строк переменной длины в вашей - не забудьте учесть максимальный размер, которым они могут быть.
Также помните, что начиная с версии 5 и выше,
varchar(25)
это до 25 символов, а не до 25 байт, поэтому, если вы, скорее всего, увидите не-ASCII символы в ваших строках, размер столбца может увеличиться до 100 байт, потому что некоторые символы занимают четыре байта для представления - например, «куча poo emoji» (которая, я шучу, нет, существует) - если ваш текущий браузер + шрифт поддерживают его, это выглядит так: 💩) 0xF0 0x9F 0x92 0xA9. До v5 mySQL подсчитывал байты, а не символы при указании длины строкового типа.Изменить в отношении автоматизации
С точки зрения автоматизации процесса вы должны быть в состоянии извлечь всю информацию, необходимую из
INFORMATION_SCHEMA
таблиц, аналогично сценарию, который вы нашли для MS SQL Server. Смотрите https://dev.mysql.com/doc/refman/5.0/en/information-schema.html некоторую документацию по этому вопросу.источник
INFORMATION_SCHEMA
таблицы следует включать информацию, необходимую. См. Dev.mysql.com/doc/refman/5.0/en/information-schema.html для некоторой документации, касающейся этого.