パッキングの構造
ZODB FileStorage のパッキングは、あるファイルから別のファイルにデータを選択的にコピーするプロセスです (指定された年齢よりも「若い」トランザクションのみ)。このコピーが開始される前に、プロセスを支援するために一部のソフト インデックスがメモリに構築されます。したがって、ZODB パッキング全体には次の手順が含まれます。
- 建物パック インデックス
- 一時ファイルへのトランザクションのコピー
- 梱包開始後に行った追加取引
- 元の FileStorage をパックされたものに置き換え、読み取り/書き込みモードで再度開く
私は通常、top
、vmstat
/ dstat
、の組み合わせでプロセスを監視していますwatch ls -la var/filestorage
。
Geir が述べたように、パッキング専用の個別の ZEO クライアントを使用できます。これは、パッキングが完了するまでブロックされたパッキングを呼び出したスレッドとして妥当でした。現在、ZEO を使用している場合は必要ありません。ZEO サーバーはzeopack
、ZEO に直接接続し (専用の ZEO クライアントは必要ありません)、FileStorage パッキングを開始するユーティリティを提供します。利点の 1 つは、パスワードが不要で、ZEO コントロール ソケットにアクセスするための適切な権限があることです。
梱包の進捗
パッキングは ZEO サーバー (サーバーではなく FileStorage 自体) によって実行されるため、進行状況が ZEO クライアントに適切に伝達される可能性は限られています。ZEO プロトコルは、そのような種類の情報を通信するようには設計されていません。
IMHO FileStorage自体は、ログファイルを介して現在行っていることをより詳細に伝えることができます。なんらかの進行状況を組み込むことができます。また、進行状況インジケーターが必要な場合は、ログ モジュールを ZEO クライアント/Zope インスタンスに戻してブラウザーに通信することで、何らかのフィードバック チャネルを設計できます。
パッキング時のパフォーマンス
FileStorage のパッキングは非常に集約的なディスク操作であるため、ディスク サブシステムのスルー出力が減少します。さらに、キャッシュを再度ウォームアップする必要があるため、パッキングが完了した後でもディスクのパフォーマンスに影響を与えるディスク キャッシュ (より大きな FileStorage の場合) を消去します。パッキング時間が長くなるが、FileStorage のシステムへの影響が小さくなる可能性のある改善点は次のとおりです。
- 操作に戻る
O_DIRECT
(ファイルキャッシュには触れない)
ionice
パッキングを実行するスレッドのディスク スケジューリングの優先順位を下げる ( Linux の場合)
- スロットリング パッキング速度