見出し画像

TWSNMP FCのログ削除とバックアップ

今朝は6時ぐらまいで寝てしまいました。昨日、久しぶりに近くの温泉に行ったので良く眠れました。
さて、1ヶ月前に

の記事を書きました。この時、対応したログの削除処理の改善は効果があったようです。削除する速度が速くなったことで別の問題が発生しました。
5TBぐらいまでになったデータベースファイルに空き領域を沢山作ったことでbboltのOpen関数のオプションの説明に書いてある

データベースが大きく、freelist のフラストレーションが多い場合、 劇的なパフォーマンス低下を招きます。

の状態になったようです。(以前twitterで教えていただいたサイトの説明にもあったと思います。)
ログの書き込みが劇的に遅くなっていました。その影響で、他の設定保存処理なども遅くなりました。
ログを削除したことで沢山、未使用の領域ができて、書き込む時に探すのに時間がかかっているようです。
書き込みを削除のバランスが取れていれば、空いた領域がすぐ使われるので、問題は発生しないようです。
修復するためには、DBのリカバリーが必要だと思い作ってみることにしました。bboltのバックアップの方法が使えると思ってドキュメント

を見てみました。
そうすると、以前作ったバックアップの方法ではなくなっていました。
もっと簡単にバックアップがとれるようになっていました。
以前は、コピー先のDBをオープンしてデータをコピーするような方法でしたが、読み出しトランザクショの中でDBファイルを丸ごとコピーできるようになっていました。

Tx.CopyFile()

良いものを見つけました。設定以外の全体のバックアップは、この方法使うように変更しようと思います。

しかし、今回の目的の空き領域を削減してコピーするためには、この方法は
使えないようです。

もう少し考えてみます。5TB近いDBを実験に使えるので楽しめます。

明日に続く



開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。