Здрасьти.
Имеем сайт, т.е. приложение с очень большим аптаймом. База – SQLite. Нужно чтобы всё работало быстро, и стартовало / завершалось тоже.
Если вызывать pragma optimize
при закрытии каждого соединения, как рекомендуют по ссылке выше, то есть шанс, что рано или поздно – и как положено, в самый неподходящий момент – оно задумается. А вместе с ним и админ: с чего это вдруг nginx не хочет завершаться? kill -9
его.
Понятно, что перед pragma optimize
я ещё выдам pragma analysis_limit = 1000
, чтобы оно совсем уж неприлично не задумывалось. Но внутренний перфекционист всё равно недоволен.
Для долгоиграющих приложений, по первой ссылке рекомендуют запускать pragma optimize
раз в несколько часов. Делать это в рабочих коннектах – нехорошо, юзеры также будут время от времени ни с того ни с сего задумываться.
Отсюда вопросы:
-
Много ли выгоды я потеряю, если буду вызывать
optimize
из-под отдельного коннекта в фоновом потоке? Не спроста ж они рекомендуют вызывать его перед закрытием коннектов – небось накопленную коннектом статистику используют. Впрочем, бит 8 в MASK я в любом случае буду отключать – ещё блин какая-то сраная железка за меня не решала, какие индексы ей нужны. Но хотя бы тупойanalyze
-то отработает? -
Если я буду запускать
optimize
в фоновом потоке при старте, и оно решит задуматься, оно не заблокирует DML в других коннектах? Если нет, то это был бы идеальный вариант: шустрая работа сайта с первых секунд, даже если админ кильнул предыдущую оптимизацию, задумавшуюся при завершении. Ну а дальше также фоном раз в несколько часов, а оптимизации при закрытии коннектов тогда с гораздо большей вероятностью отработают мгновенно.