Contudo, com o tempo, o arquivo da base de dados vai inflando e, ao mesmo tempo, deixando espaços vazios. É um processo natural de um SGDB, denominado data overhead (sobrecarga de dados), que se dá pelo processo evolutivo do próprio à medida que a aplicação que o controla remove objetos (registros, tabelas, índices) não mais necessários. Apesar de otimizar o tempo de novas inserções, cria-se uma fragmentação prejudicial no acesso do disco ao conteúdo da base - mesma lógica de fragmentação em sistemas de arquivos.
Tá bom, você escreveu um texto enorme só pra dizer que o base de dados usada pelas aplicações da plataforma Mozilla versão 1.8 em diante se fragmenta. Cadê a otimização prometida no título?
Vá com calma, gafanhoto. A otimização nada mais é do que a "desfragmentação" das bases de dados. Bases? Sim, bases. Uma instalação comum tem pelo menos 10 bases de dados SQLite distintas, cada um com sua finalidade: armazenar cookies, preferências de conteúdo, favoritos/histórico, busca, permissões, etc. No entanto, as principais responsáveis pela estabilidade (ou falta dela) da aplicação são apenas duas: places.sqlite (onde se armazena os favoritos e histórico) e urlclassifier3.sqlite (dados do filtro anti-phishing). Tá, e como eu "desfragmento" os bagulhos?
Bem, como toda base de dados, via linguagem estruturada de consultas, mais conhecida como SQL. No caso do SQLite, a sintaxe é simples e objetiva: VACUUM. Tá, mas como eu faço isso?
Oras, com um gerenciador de SGBD's SQLite. Pode ser a própria ferramenta de linha de comando disponibilizada pelos desenvolvedores do mesmo, e é ela que vamos utilizar. Portanto: http://www.sqlite.org/download.html (baixe o arquivo denominado command-line program).
Windows
fxopt.bat
@echo off
setlocal EnableExtensions
setlocal EnableDelayedExpansion
for /d %%d in ("%APPDATA%\Mozilla\Firefox\Profiles" "%LOCALAPPDATA%\Mozilla\Firefox\Profiles" "%USERPROFILE%\Local Settings\Application Data\Mozilla\Firefox\Profiles") do (
if exist %%~d (
for /f %%f in ('dir /s /b %%~d\*.sqlite') do (
echo VACUUM; | sqlite3 %%f
)
)
)
- Baixado o arquivo especificado, descompacte-o em %WINDIR% (variável ambiente para o diretório de instalação do Windows) para que o mesmo se torne uma aplicação global;
- Salve o script acima como fxopt.bat no diretório de sua preferência;
- Feche o Firefox e espere que seu processo termine;
- Abra uma janela do terminal de comandos (cmd) e execute o script a partir de onde foi salvo.
Pronto, todas as bases de dados estarão otimizadas.
Linux
fxopt.sh
#! /bin/bash
find ~/.mozilla/firefox -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;
- Se sua distribuição já acompanha o executável sqlite3, nem precisa baixá-lo. Do contrário, da mesma forma que no Windows, após baixá-lo, descompacte-o em /usr/bin para que o mesmo se torne uma aplicação global - ou use gerenciadores como o apt-get para instalá-lo;
- Salve o script acima como fxopt.sh no diretório de sua preferência e dê um chmod +x no mesmo;
- Feche o Firefox e espere que seu processo termine;
- Abra uma janela do terminal e execute o script a partir de onde foi salvo.
Pronto, todas as bases de dados estarão otimizadas.
Mac OS X
fxopt.sh
#! /bin/bash
if [ -d ~/Library/Mozilla/Firefox/Profiles ]; then
find ~/Library/Mozilla/Firefox/Profiles -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;
elif [ -d ~/Library/Application\ Support/Firefox/Profiles ]; then
find ~/Library/Application\ Support/Firefox/Profiles -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;
fi
- Salve o script acima como fxopt.sh no diretório de sua preferência e dê um chmod +x no mesmo;
- Feche o Firefox e espere que seu processo termine;
- Abra uma janela do terminal e execute o script a partir de onde foi salvo.
Pronto, todas as bases de dados estarão otimizadas.
Outra forma mais Simples é:
- Abra o Console de erros, no menu Ferramentas.
- Cole o seguinte código no campo Código e execute:
Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");
O navegador congelará por algum tempo, tenha paciência e aguarde. Você notará uma diferença incrível, principalmente no tempo de resposta da awesome bar.
Considerações finais
Com a desfragmentação das bases, além de tornar mais responsivo (o acesso às bases fica mais rápido), o Firefox passará a usar menos memória (o tamanho das bases que são carregadas com a aplicação diminui).
Dependendo do uso, isso pode se reverter em pouco tempo. Portanto, analise seu grau de uso e determine um tempo de repetição que lhe satisfaça. Lembre-se ainda que você pode usar seu sistema para automatizar esta tarefa, seja criando um atalho/lançador para executá-la quando achar conveniente ou criando uma tarefa agendada para executá-la de tempos em tempos, preferencialmente no ato de iniciar ou desativar o sistema (lembre-se que o Firefox precisa estar fechado!). Aí é com você!
Fonte: GuiadoPC