0

現在のデータベースとアーカイブ用の 2 つのデータベースを持つ出席記録システムがあります。サーバーは出席記録を処理し、完了とマークされた記録をアーカイブに入れます。アーカイブ データベースで行われる処理はありません。

これが問題です。要件の 1 つは、各スタッフの毎日の空白の記録を作成することでした。これを行うエージェントは、いくつかのプロシージャを呼び出し、データベース内でいくつかのチェックを行います。現在、毎日約 1,800 件の空白レコードが作成されています。開発用 PC では、各レコードの処理に約 2 ~ 3 秒かかり、平均で 1 時間半かかります。ただし、サーバーにデプロイした場合、各レコードの処理には約 7 秒かかり、完了するまでに約 3 時間半かかります。エージェントが完了するまでに 4.5 ~ 5 時間かかる場合があります。

両方のインスタンスで、エージェントがスケジュールされていることに注意してください。サーバーには他のロータス アプリはなく、ほとんどの時間、サーバーは空いていてアイドル状態です (Windows Server と Lotus Notes 以外のアプリケーションはありません)。開発用 PC とサーバーに比べて処理時間が長くなる原因は何かありますか?

4

1 に答える 1

1

あなたのプロセスは毎日 1800 の新しいドキュメントを生成しており、ドキュメントも定期的にアーカイブしているとのことで、アーカイブ後にそれらを削除していると推測されます。このようなアプリケーションでは、時間の経過とともにパフォーマンスの問題が発生する可能性があります。データベースに多数の削除スタブがあり、NSF ファイルが (内部および/または外部で) 高度に断片化されている可能性があります。

無料のNotesPeekユーティリティを使用してデータベースを調べ、データベースに含まれる削除スタブの数を確認してください。次に、パージ間隔の設定を確認し、快適な最小値に下げることを検討してください。(つまり、すべてのサーバーとユーザーがその時間内に複製されることがわかるように十分に大きく、削除スタブが大量に蓄積されないように十分に小さくします。) パージ間隔を変更した場合は、スタブが複製されるまで 24 時間待つことができます。または、サーバー コンソールでデータベースに対して updall を手動で実行して、強制的に削除することができます。

次に、NSF ファイルに対して compact -c を実行し、NSF が存在するサーバー ディスク ボリュームに対してデフラグを実行する必要があります。

これらの手順によってパフォーマンスが向上する場合は、削除スタブ、データベースの増大、および断片化を最小限に抑えるコーディング手法を使用して、問題の再発を防ぐためにコードで手順を実行することをお勧めします。

つまり、アーカイブ用のコードに移動し、アーカイブ後に削除されないように変更します。代わりに、コードに などのフィールドでマークを付けますFreeDocList := "1"(FreeDocList)次に、 の選択式で呼び出される隠しビューを追加しFreeDocList = "1"ます。& (!(FreeDocList = "1"))また、データベース内の他のビューに移動して、選択式に追加します。次に、新しい空白のドキュメントを追加するコードを変更して、新しいドキュメントを作成する代わりに、FreeDocListビューに移動して最初のドキュメントを見つけ、 を設定FreeDocList = "0"し、以前のフィールド値をすべてクリアします。もちろん、FreeDocList ビューに十分なドキュメントがない場合、コードは古い動作に戻り、新しいドキュメントを作成します。

上記の変更により、新しい文書を削除して作成する代わりに、可能な限り既存の文書を再利用することになります。このようなコードでベンチマークを実行したところ、役立つことがわかりました。しかし、すべての場合において保証することはできません。アプリケーションで他に何が起こっているかに大きく依存します。

于 2013-04-08T16:21:31.197 に答える