nmtysh.log

Tech系のネタや日々の独り言などを書いています。

sqliteなファイルの最適化スクリプト

Firefox のプロファイルで使用されるsqliteなファイルはどんどん肥大化します。

 

定期的に reindex/vacuum する必要がありますが、コマンドを打つのは面倒です。

(そういうアドオンもあるんですけどね)

 

なので、省力化の為にシェルスクリプト/バッチファイルをずいぶん前に書いたので載せておきます。

 

実行にはそれぞれ sqlite が必要です。

それぞれの環境で動作確認をしていますが、使用する場合は自己責任でお願いします。

 

Linux(Ubuntu)用

#!/bin/bash

 

## Firefox プロセスが居れば警告して終了

[ "`ps x | grep '[f]irefox'`" ] && echo 'Firefox process exist!!' && exit 1

 

cd "$HOME/.mozilla/firefox/"

 

space=" "

 

for DATABASE in `find . -regex '.*\.sqlite$'`

do

## 処理前ファイルサイズ

bsize=$(ls -l $DATABASE | cut -d " " -f 5)

size=$(ls -lh $DATABASE | cut -d " " -f 5)

echo -n "optimize $DATABASE ${space:(${#DATABASE}-25)} $size "

 

sqlite3 $DATABASE REINDEX

sqlite3 $DATABASE VACUUM

#sqlite3 $DATABASE VACUUM ANALYZE

 

## 処理後ファイルサイズ

asize=$(ls -l $DATABASE | cut -d " " -f 5)

size=$(ls -lh $DATABASE | cut -d " " -f 5)

echo "-> $size ($(expr 100 \* $asize / $bsize ) %)"

done

 

space=

asize=

bsize=

size=

 

Windows XP

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

REM Firefox profile 最適化バッチファイルVer.2

 

for /D %%b in ("%USERPROFILE%\Application Data\Mozilla\Firefox\Profiles\*") do (

rem echo %%b

if exist "%%b\parent.lock" (

echo %%~nxb Firefox is running

) else (

echo Firefox profile %%~nxb optimise

echo.

for %%a in ("%%b\*.sqlite") do (

call set _size=%%~za

sqlite3 "%%a" REINDEX

if not errorlevel 1 (sqlite3 "%%a" VACUUM)

if not errorlevel 1 (

for %%c in ( "%%a" ) do (

echo %%~nxa !_size! -^> %%~zc

)

rem echo %%a !_size! -^> %%~za

)

)

echo.

)

)

for /D %%b in ("%USERPROFILE%\Local Settings\Application Data\Mozilla\Firefox\Profiles\*") do (

rem echo %%b

if exist "%%b\parent.lock" (

echo %%~nxb Firefox is running

) else (

echo Firefox profile %%~nxb urlclassifier3.sqlite optimise

echo.

for %%a in ("%%b\*.sqlite") do (

call set _size=%%~za

sqlite3 "%%a" REINDEX

if not errorlevel 1 (sqlite3 "%%a" VACUUM)

if not errorlevel 1 (

for %%c in ( "%%a" ) do (

echo %%~nxa !_size! -^> %%~zc

)

rem echo %%a !_size! -^> %%~za

)

)

echo.

)

)

echo done.

 

REM Thunderbird profile 最適化バッチファイルVer.2

 

for /D %%b in ("%USERPROFILE%\Application Data\Thunderbird\Profiles\*") do (

rem echo %%b

if exist "%%b\parent.lock" (

echo %%~nxb Thunderbird is running

) else (

echo Thunderbird profile %%~nxb optimise

echo.

for %%a in ("%%b\*.sqlite") do (

call set _size=%%~za

sqlite3 "%%a" REINDEX

if not errorlevel 1 (sqlite3 "%%a" VACUUM)

if not errorlevel 1 (

for %%c in ( "%%a" ) do (

echo %%~nxa !_size! -^> %%~zc

)

rem echo %%a !_size! -^> %%~za

)

)

echo.

)

)

echo done.

 

:qe

pause

endlocal

 

実行すると各sqliteファイルに reindex/vacuum を行い実行前と実行後のファイルサイズを表示します。