Почему data_length из information_schema не отражает длину данных в реальном времени? - PullRequest
0 голосов
/ 25 апреля 2018

Когда я пытался использовать следующий запрос для получения размеров схемы БД с моего удаленного сервера 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 заканчиваются, я могу запрашивать размеры дб с помощью одного и того же запроса и всегда получать точный результат.

Я подозревал, что, возможно, в этот момент я запрашиваю размеры, данные не сбрасываютсяна диск еще.Может ли кто-нибудь дать более подробное и техническое объяснение?

Спасибо!

...