Регистрация...

Eserv Forum / E5 / Mail / Обслуживание баз Eserv

recent wikipost // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Раз у нас удаляются тела старых писем с сервера, я решил организовать и соответсвующую чистку файлов в БД.

Правилен ли такой алгоритм?
Я обхожу дерево E4/DATA/domains в поисках файлов .messages.db3.
Для каждого файла:

  1. Нахожу
  2. SELECT MAX(mid) FROM sp_messages WHERE created_t <= {$expiration_timestamp}
    Если пусто, старых писем нет. Если не пусто, запоминаю в переменную maxmid.
  1. Выполняю
  2. DELETE FROM sp_messages WHERE mid <= {$max_mid}; VACUUM;
  1. Если рядом лежит .headers.db3, выполняю в нём
  2. DELETE FROM sp_headers WHERE mid <= {$max_mid}; VACUUM;
  1. Если рядом лежит .events.db3, выполняю в нём
  2. DELETE FROM sp_events WHERE mid <= {$max_mid}; VACUUM;
Всё в порядке, ничего не забыл?
 
Комментарии к этой версии (23.05.2014 12:00) [~atest-t] 4eecdb87
Комментарии к версии 2 (23.05.2014 12:01) [~atest-t] 03d3c57e
АвторДатаТекстtags
atest-t23.05.2014 12:01
Нумерованый список испортился.
wikipost
ac23.05.2014 19:30
Да, запросы выглядят правдоподобно. Хотя такая чистка еще повысит фрагментацию, и в принципе может замедлить работу вместо ускорения.

А .events.db3 можно вообще просто удалять.
wikipost
atest-t26.05.2014 08:42
ред: 26.05.2014 10:28
http://www.sqlite.org/lang_vacuum.html

The VACUUM command rebuilds the entire database

Так что вроде фрагментировать не должно.
Зато однозначно помогает юзерам, которые не ставят галку "удалять письма с сервера", а потом на новой машине грузят 100500 старых писем.
А так же помогает не разрастаться забытым ящикам.
wikipost
ac26.05.2014 11:04
Я имею в виду не фрагментацию страниц внутри SQLite-базы, а фрагментацию файловой системы Windows. Это вне контроля разработчиков SQLite. При уменьшении размера файла в файловой системе появляются фрагменты свободного места там, где раньше были части файла. Windows задействует их при записи новых файлов. То есть при записи (и при чтении позже) начинает "метаться" между этими старыми и новыми размещениями по всему диску. Если старое не удалять, то запись нового всегда производится более "слитно" — в хвост занятой области диска. Это и для перемещения головок должно быть быстрее, и для системного кэша ФС Windows оптимальнее.
wikipost
atest-t26.05.2014 11:59
А, ну это уже мелочи жизни.
wikipost
v753box02.07.2014 10:18
Может у вас есть готовый exe-шник который бы удалял письма до определенной даты в базе ?
wikipost
ac02.07.2014 10:39
Готового нет.
wikipost
atest-t03.07.2014 08:33
Есть PHP-скрипт для PHP 5.4 с экстеншном SQLite3. Правда он принимает на вход интервал времени, за который нужно письма оставить
Пример использования:
php D:\scripts\clean_eserv_databases.php "32 days"
wikipost
atest-t03.07.2014 08:34

Файл: Скрипт [1206 bytes]
wikipost
v753box07.07.2014 09:14
Желающим воспользоваться замечу что этот скрипт удаляет также сообщения и в разделах блог, файлы.
wikipost
Работает на Eserv/5.05567 (10.02.2020)