Как я могу определить использование базы данных SQLite database?

#sqlite #devart

#sqlite #devart

Вопрос:

В SQLite размер файла базы данных равен общему размеру базы данных, но это не обязательно правильное указание на фактически используемое пространство. Если данные удалены, освобожденное пространство не возвращается операционной системе. Для дефрагментации базы данных и освобождения неиспользуемого пространства обратно в операционную систему необходимо выполнить команду VACUUM.

Я использую Devart ADO.Поставщик сетевых данных для SQLite.

Есть ли способ получить фактическое используемое пространство базы данных SQLite?

Ответ №1:

Я нашел pragma freelist_count, который согласно документации SQLite предоставляет количество неиспользуемых страниц в файле базы данных. Это не точно в отношении общего свободного места в файле базы данных, поскольку все еще может быть много страниц, которые частично заполнены.

Тем не менее, приведенное ниже по-прежнему предоставляет нам точное количество свободных страниц и достаточно для моих нужд, чтобы получить приблизительную оценку используемого и свободного пространства в файле базы данных.

 PRAGMA freelist_count;
PRAGMA page_size;
  

Комментарии:

1. Таким образом, вы можете получить объем используемого пространства, выполнив SELECT (page_count - freelist_count) * page_size as size FROM pragma_page_count(), pragma_freelist_count(), pragma_page_size();

Ответ №2:

Умножение значений, возвращаемых прагмами page_count и page_size, может дать вам хорошую оценку размера базы данных:

 PRAGMA page_count;
PRAGMA page_size; 
  

Комментарии:

1. Я попробовал это, но это все равно дало мне тот же размер, что и сам файл. Согласно документации, для page_count указано: «Возвращает общее количество страниц в файле базы данных.». Смотрите: sqlite.org/pragma.html#pragma_page_count