Неиспользуемое пространство в sqlite
Я запустил sqlite3_analyzer
, чтобы попытаться понять, почему база данных потребляет гораздо больше дискового пространства, чем ожидалось, даже после использования VACUUM
. Вывод показывает, что есть много таблиц с дополнительными страницами, используемыми, казалось бы, без причины. Вот пример:
*** Table ACCOUNT_EMAILCONFIRMATION and all its indices ***********************
Percentage of total database...................... 2.6%
Number of entries................................. 0
Bytes of storage consumed......................... 12288
Bytes of payload.................................. 0 0.0%
Bytes of metadata................................. 24 0.20%
Average payload per entry......................... 0.0
Average unused bytes per entry.................... 0.0
Average metadata per entry........................ 0.0
Maximum payload per entry......................... 0
Entries that use overflow......................... 0
Primary pages used................................ 3
Overflow pages used............................... 0
Total pages used.................................. 3
Unused bytes on primary pages..................... 12264 99.80%
Unused bytes on overflow pages.................... 0
Unused bytes on all pages......................... 12264 99.80%
Здесь для хранения нулевых записей используются три страницы, каждая по 4 096 байт. В результате крошечная база данных занимает сотни КБ. Это заставляет меня подозревать, что размер базы данных может быстро взорваться, когда я запущу свой Django-сайт в производство.
Почему это происходит? Как мне вернуть все это неиспользуемое пространство и предотвратить это в будущем?
Почему это происходит? Как мне вернуть все это неиспользуемое пространство и предотвратить это в будущем?
Вы можете вернуть неиспользуемое пространство, используя VACUUM
(или полагаясь на auto_vacuum
, но это не так тщательно) . Краткое объяснение того, почему и что делает VACUUM
можно найти на https://www.sqlite.org/lang_vacuum.html