Чистка базы sqlite

Тема в разделе "Ошибки , Баги, Проблемы", создана пользователем daronlad, 4 мар 2018.

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  1. daronlad

    daronlad Новичок

    14 апр 2016
    47
    0
    Мужской
    Базы sqlite на некоторых дорах разрослись до 50-70гб. И походу начали тормозить и загружать сервер. Решил почистить (обновить) кеш в этих самых базах, дабы уменьшить размер файлов на пару порядков. Чтоб не пропали урлы имеющихся в доре страниц сделал так:

    delete from cache where k like '%__lcs__%';
    vacuum;


    Но, вот если выполнение первой команды еще можно дождаться, то vacuum, даже на мощных серверах при размере базы 50-70гб делается пару суток.
    Потом придумал сделать по другому - вытащить из базы только инфу, отвечающую за урлы и импортировать в другую базу.

    В исходной базе делаю:

    .mode csv
    .output data.csv
    SELECT k,d,e FROM cache WHERE k NOT LIKE '%__LCS__%';
    .quit


    в новой базе:

    sqlite3 my.db
    .mode csv
    CREATE TABLE cache(k TEXT PRIMARY KEY NOT NULL, d BLOB, e INTEGER);
    .import data.csv cache
    .quit


    Структура базы (визуально) - в порядке, но при переходе по ссылкам дора - везде not found, но ведь урлы есть в базе. Если делать, как в первом примере, через delete и vacuum - все ок.

    Что я делаю не так, подскажите, кто сталкивася ?
     

Поделиться этой страницей