SQLite本番運用で学んだ実践的なポイント

Judul asli: Learning a few things about running SQLite

Mengapa Ini Penting

SQLite本番運用の実例として、小規模サイト開発者にとって具体的な運用知見を提供する。

Julia Evans氏がDjangoサイトでSQLiteを本番利用した際に直面した、ANALYZE未実行による5秒遅延やバッチ削除時のタイムアウト問題などの実例をブログで公開した。

Julia Evans氏はDjangoサイトのデータベースにSQLiteを採用し、運用中に複数の課題を発見した。まずクエリ性能の問題として、FTS5(全文検索)を使った4000行のテーブルへのクエリが5秒かかる事象が発生。原因はANALYZEコマンドの未実行であり、実行後は0.05秒以下に改善された。ANALYZEはテーブルの行数などの統計情報を生成し、クエリプランナーが最適な実行計画を選択できるようにする。次にデータ削除の問題として、大量行を一括削除しようとすると5秒のタイムアウトが設定された別のワーカーが書き込みに失敗しVMがシャットダウンする事態が発生。現在は小さなバッチに分けて対処している。SQLiteは同時書き込みができないため、Postgresなど複数ライター対応DBの必要性も認識した。バックアップはresticとSQLiteの「VACUUM INTO」コマンドを組み合わせてS3へ保存する方法を採用している。

Sumber

jvns.ca — Baca artikel asli →