SQLiteの本番バックアップの破損を自動で検証するには?
質問者: 中村 徹 ・ 2026-07-05
小規模SaaS(Litestar + SQLite、WALモード)を1台のVPSで運用しています。バックアップは毎晩cronで sqlite3 app.db ".backup backup.db" を実行してS3へアップロードしていますが、先日リストア訓練をしたところ、2週間前のバックアップファイルが破損していて開けませんでした。幸い本番DBは無事でしたが、「壊れたバックアップを黙々と保存し続けていた」ことが判明して青ざめています。 試したこと: アップロード前に PRAGMA integrity check を実行(DBが8GBあり1回約40秒。夜間なので許容範囲) Litestreamの導入検討(WALのレプリケーションは魅力ですが、リストアできるかの検証は結局別途必要そう) S3側でチェックサム検証(転送中の破損は防げるが、生成時点の破損は検出できない) 制約: VPSは2vCPU/4GBでCPUに余裕が少ない 検証用の予備サーバはなく、この1台で完結させる必要がある integrity check が通れば破損検知として十分と考えてよいでしょうか。それとも別ファイルに実際にリストアして代表クエリを数本流すところまで自動化すべきでしょうか。皆さんの運用を知りたいです。
回答(あすか)
公式ドキュメントの記述と実運用のギャップがある部分なので、検証済みの手順を書きます。 落とし穴 web backend でよくある誤解 : デフォルト設定のまま本番に出すこと。負荷特性が変わると挙動が一変します リトライは冪等性が担保されている操作にだけ入れる 監視は成功率だけでなく分布(p95/p99)を見る 切り分け手順 1. まず現状のベースラインを計測する(p50/p95 を分けて見る) 2. ボトルネックを特定してから対策を選ぶ 3. 変更は1つずつ入れて差分を確認する 再現手順を含む検証ログ: https://example.com/gist/23 。環境差がある場合はバージョンを教えてください。 補足: 過去に同種の構成で 4 件の本番導入を経験しています。
回答(デモ 貢献者)
この問題は3つの原因に分解できます。順に切り分けるのが早いです。 落とし穴 web backend でよくある誤解 : デフォルト設定のまま本番に出すこと。負荷特性が変わると挙動が一変します リトライは冪等性が担保されている操作にだけ入れる 監視は成功率だけでなく分布(p95/p99)を見る 切り分け手順 1. まず現状のベースラインを計測する(p50/p95 を分けて見る) 2. ボトルネックを特定してから対策を選ぶ 3. 変更は1つずつ入れて差分を確認する 再現手順を含む検証ログ: https://example.com/gist/2 。環境差がある場合はバージョンを教えてください。
回答(あすか)
公式ドキュメントの記述と実運用のギャップがある部分なので、検証済みの手順を書きます。 切り分け手順 1. まず現状のベースラインを計測する(p50/p95 を分けて見る) 2. ボトルネックを特定してから対策を選ぶ 3. 変更は1つずつ入れて差分を確認する 実装のポイント バッチサイズは 32 前後から始めて、レイテンシ要件に合わせて調整します。 検証環境: 手元の再現リポジトリで動作確認済みです。参考: https://example.com/docs/web backend と https://example.com/blog/3