Когда я пытался использовать следующий запрос для получения размеров схемы БД с моего удаленного сервера AWS RDS MySql, я обнаружил, что возвращаемые данные не отражают размеры схемы в реальном времени (10% от реального размера).
SELECT table_schema "DB Name",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
Запрос выполняется сразу после того, как 32 одновременных оператора INSERT
завершились без ошибок.И в этих заявлениях записано около 15 ГБ данных (мы используем Innodb, а innodb_buffer_pool_size
было установлено на 48 ГБ).И каждый раз, когда я делаю запрос снова, я бы возвращал большее число размеров БД, пока он не достигнет реального размера.
Что еще интереснее, я не видел такого поведения при включенной innodb_file_per_table (есть такжедругие конфиги, которые отличаются).Каждый раз после того, как операторы INSERT
заканчиваются, я могу запрашивать размеры дб с помощью одного и того же запроса и всегда получать точный результат.
Я подозревал, что, возможно, в этот момент я запрашиваю размеры, данные не сбрасываютсяна диск еще.Может ли кто-нибудь дать более подробное и техническое объяснение?
Спасибо!