За последние 24 часа нас посетили 22214 программистов и 1426 роботов. Сейчас ищут 605 программистов ...

SQLITE и db.sq-journal

Тема в разделе "PHP и базы данных", создана пользователем RVV, 10 ноя 2008.

  1. RVV

    RVV Активный пользователь

    С нами с:
    10 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Всем привет.

    Я новичок в php и SQLITE ...
    На небольшом сайтике с небольшой посещаемостью в папке, где находится база данных db.sq периодически возникает (закономерности не выявлено) файл db.sq-journal... и сайт становится недоступен... :-(

    В инете прочитал, что db.sq-journal это типа файла отката... но почему то он потом не пропадает...

    Исследуя внутренности файлика db.sq-journal обнаружил в нем типа robot_google и т.д. – это видимо записи от работы скрипта моего счетчика, который записывает в базу «кто пришел, по каким страничкам прошелся, с каким IP и т.д.».

    Других записей в файле db.sq-journal никогда не обнаруживается…(только от роботов)
    Из чего я сделал вывод, что файл db.sq-journal образовывается видимо при нападении на сайтик роботов-поисковиков, которые с большой скоростью проходятся по страничкам… и видимо не успевает писаться в базу… или что-то в таком роде….

    Так вот сам вопрос: На что обратить внимание в скрипте счетчика, что изменить, что переделать, чтобы исключить появление файла db.sq-journal….
    С удовольствием отвечу на дополнительные вопросы… которые помогут прояснению ситуации… и исправлению данного скриптика… 

    Прошу обратить, что я новичок в php и SQLITE….
    Спасибо.
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    *-journal файл созадется при записи в базу, одновременно, база лочится на время записи.

    Оптимизируйте операции INSERT/UPDATE:
    - проверьте, обернуты ли эти операции в транзакцию. Без транзакции операции модификации в SQLite выполняются страшно медленно.
    - удалите неиспользуемые ключи на таблицах
    - уменьшите колличество операций
     
  3. RVV

    RVV Активный пользователь

    С нами с:
    10 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Наверняка у меня все не оптимизировано... Будем думать... А почему файл *-journal создается при любых записях в базу данных, а потом пропадает.... а в каких случаях он появился и не пропал.... ??? Можно ли например искуственно вызвать такую ситуацию... типа... ага... вот 10 операций INSERT/UPDATE при которых *-journal появляется и пропадает.... а вот при 100 неоптимизированых INSERT/UPDATE файл *-journal уже появился и не пропал...
    Да и вообще он появляется у меня и НЕ ПРОПАДАЕТ именно из-за неоптимизированных INSERT/UPDATE или нет..???

    Вдруг он появляется в те дни, когда например на хосте проводят архивацию сайтов... или при 1 секундном отключении питания....или по каким либо другим причинам... ??? Хотя понимаю, что оптимизация моих INSERT/UPDATE в любом случае не помешает.... :).

    Спасибо.
     
  4. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Поисковик шустрит сразу несколько урлов, все это выстариватся в огромную очередь на запись, банально не справляясь с нагрузкой.

    Выпольнить паралельно много запросов.


    Попробуйте для начала добавить транзакции. Достаточно выполнить BEGIN до запроса и COMMIT после. Если рядом несколько INSERT/UPDATE разумно их вложить в одну транзакцию.

    http://freesource.info/wiki/SQLite/NovyeTranzakcii
     
  5. RVV

    RVV Активный пользователь

    С нами с:
    10 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Всем привет.
    И Ti привет :)

    Чуть изменил данные которые пишится в счетчик и сделал везде вот так:

    sqlite_query($DB, "
    BEGIN;
    INSERT INTO count_ua (ua_1) VALUES ('$useragent');
    COMMIT;
    ");

    вместо

    sqlite_query($DB, "INSERT INTO count_ua (ua_1) VALUES ('$useragent');");

    Это верно я сделал?

    Вроде пока –journal не появляется… Уж не знаю в связи с предпринятыми мерами… или нет… 
     
  6. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    RVV
    угу, нормуль.
    Возможно, стоит обратить внимание на PDO, в нем SQLite3, а при использовании sqlite_* - SQLite2