Автор: koresh_nash
Дата сообщения: 27.11.2014 03:07
Итак, на счет ускорения GreyLink в 100-1000 раз. Это сообщение - самое важное сообщение среди всей информации про софтинку =)
1. Закрываем greylink dc++ . В ее каталоге Setting есть файл "gl2.db3". Это и есть база. Бекапим!
2. Инсталлируем SqliteDog (скачивал варез, кажись, с Руборда). Запускаем. Файл - Открыть базу - указываем файл из пункта 1.
3. Если сделано правильно, в левой части программы появятся слова "BTFILE", "MESSAGE" и прочие названия таблиц, около 15-20 шт. Можно потыкать и посмотреть содержимое. При просмотре сразу нажимайте внизу справа на "Стоп" в виде красной кнопки, иначе он будет в окно подгружать все содержимое таблицы и зависнет. Внимание: на кнопку "BEGIN" внизу справа не нажимать!
4. Теперь главное. В софтине есть вкладка SQL (темная). Копируем туда в поле ввода текст
CREATE INDEX [IX_DLQUEUE___C_ROOT] ON [DLQUEUE]([C_ROOT]) ;
CREATE INDEX [IX_DLQUEUE___ADDED] ON [DLQUEUE]([ADDED]) ;
CREATE INDEX [IX_DLQUEUE___TARGET] ON [DLQUEUE]([TARGET]) ;
CREATE INDEX [IX_DLQUEUE___TEMPTARGET] ON [DLQUEUE]([TEMPTARGET]) ;
CREATE INDEX [IX_DLSOURCE___C_PEER] ON [DLSOURCE]([C_PEER]) ;
CREATE INDEX [IX_DLSOURCE___C_DLQUEUE] ON [DLSOURCE]([C_DLQUEUE]) ;
CREATE INDEX [IX_MESSAGE___TM_STAMP] ON [MESSAGE]([TM_STAMP]) ;
CREATE INDEX [IX_MESSAGE___MSG_CODE] ON [MESSAGE]([MSG_CODE]) ;
CREATE INDEX [IX_MESSAGE___N_MESSAGE] ON [MESSAGE]([N_MESSAGE]) ;
CREATE INDEX [IX_PEER___CID] ON [PEER]([CID]) ;
CREATE INDEX [IX_PEER___NICK] ON [PEER]([NICK]) ;
CREATE INDEX [IX_PEER___LASTIP] ON [PEER]([LASTIP]) ;
и нажимаем F5, чтобы исполнить этот запрос.
5. Сервис - управление:
a) сжать базу (VACUUM)
b) оптимизировать индексы (ANALIZE)
c) перестроить индексы (INDEXES)
Команды выполняются долго, о чем свидетельствует таймер в заголовке окна. Не прерывайте. Если таблицы местами битые - то будут некоторые ошибки. Битые таблицы нужно починить, иначе GreyLink будет вечно подвисать. Обратитесь к программисту, он сможет найти дублирование уникального индекса (удалить их) и частично восстановить данные в битых таблицах. Частично битые таблицы можно восстановить командой ".dump <имя таблицы>" из команды "sqlite3.exe gl2.db3" с оф.сайта SQLite и потом вставив дамп в очищенную таблицу. Перебирая имя таблиц при создании дампа и можно выяснить, кто именно побился. Еще сам GreyLink в статусной строке иногда про это пишет.
6. В самом низу софтины, где обычно статусная строка, есть куча настроек. Аккуратно: в выпадающем меню (4е справа), где выбрано "DELETE", заменить на "WAL".
Кто хочет эксперимент: можно поставить "OFF". Но, не знаю, будет ли работать и даст ли это прирост. Вообще, можно все виды журналирования транзакций пробовать. Но это опасно .-) "DELETE" & "WAL" - самые безопасные режимы, чтобы база не билась, когда GreyLink вырубают некультурно (отключение питания). "OFF" - быстрее, но небезопасно к сбоям. "DELETE" - самый тормозной режим.
При переходе в WAL режим база обзаведется еще 2мя файлами: gl2.db3-shm + gl2.db3-wal
7. Закрываем SqliteDog, запускаем GreyLink. Радуемся, что база в ~450 метров оптимизирована и грейлинк стал запускаться за 1,5 секунды! Проверяем весь функционал, что данные в таблицах исправлены и не удалились из-за ваших кривых рук, скорость работы повысилась и тормоза с подвисаниями на корню исчезли .-)
8. Бекап не удаляйте. Если все накроется медным тазом, то проделайте все, что выше, еще раз, только "DELETE" на "WAL" не изменяйте. Желательно внешними средствами, пока GreyLink не запущен, бекапить весь каталог настроек.
9. Данным методом можно ускорить кучу другого софта, включая служебные таблицы на телефонах (iOS, Android). SQLite базы - повсюду. Например, настройки Firefox уже оптимизированы и ускорять некуда (WAL+индексы).