2

実行時間の長いクエリを実行する ColdFusion テンプレートがあります。リクエストのタイムアウトを 3600 から 6600 に増やしましたが、テンプレートは引き続きタイムアウトします。リクエストのタイムアウトを 6600 から 9600 に再度増やしたいのですが、そうする前に、リクエストのタイムアウトを大幅に増やすことによる不利益やリスクがあるかどうかを知りたいですか?

基本的に、私の cfm ファイルの機能は次のとおりです。テーブルからレコードを取得し、Excel シートに挿入する必要があります。テーブルは約 30,000 レコードで構成されています。cfm ファイルは、一度に 1000 レコードごとに取得して Excel に挿入し、次の 1000 レコードを取得します。このプロセス全体を完了するために、タイムアウトの問題が原因で突然停止することがあります。したがって、「requesttimeout」を増やす前に知りたいのですが、requesttimeout を大幅に増やすと問題 (RAM の使用、パフォーマンス) が発生するでしょうか。

4

3 に答える 3

5

必要に応じてタイムアウトを上げても問題ありません。cfsetting requestTimeOut="xxx" を使用して、すべてのテンプレートに影響するため、アドミニストレータでタイムアウトを設定するのではなく、必要な場所でタイムアウトを設定する必要があります。

欠点は、リクエストを処理するためのスレッドのプールがあり、実行時間の長いリクエストを処理している間、他のことを行うことができないことです。これは、長時間実行されるリクエストを一度に 1 人または 2 人だけが実行することが確実である限りは問題ありませんが、多くの人が実行する可能性がある場合は問題があります。CF が 8 つの要求を同時に実行し、8 つすべてが長時間実行される要求を処理している場合、サイトは事実上オフラインです。CF は特定のポイントまでリクエストをキューに入れますが、そもそもこの状態にはなりたくありません。

私は、最大 1 時間かかるバックグラウンドの管理者専用タスクがあるアプリに取り組んできましたが、2 人以上でそれらを実行することはないと確信していました。

ページをブロックせずにクエリを実行するためにcfthreadを使用することもできますが、ユーザーにフィードバックを提供するのは難しくなります。

于 2012-09-13T13:23:50.967 に答える
1

状況をもう少し理解していただければ助かると思います。これは実行される夜間ジョブのようなものですか? それとも、ユーザーがレポートを待っている間にナビゲートしてレポートを生成するページですか? あなたのページが何をしているかについての基本的な情報を教えてください。

また、リクエストのタイムアウトを増やす方法はいくつかあります。管理者によるシステム全体または<cfsetting requestTimeOut="">タグによるページ固有。どっちが増えてる?システム全体の設定を上げないことをお勧めしますが、必要に応じてページ レベルの設定を上げてもかまいません。

<cfquery>タグのタイムアウト属性もあります。それ使ってる?

<cfquery>がタイムアウトしているのか、それとも cfquery の後でデータ出力中にタイムアウトが発生しているのか教えていただけますか?

また、クエリを可能な限り最適化することをお勧めします。インデックスを設定できますか (まだ設定されていない場合)? 返されるレコードのサブセットだけが本当に必要ですか?

おそらく、この 1 ページを複数のページに分割して、それぞれがより高速に実行されるようにすることができます。

于 2012-09-13T12:26:43.253 に答える
0

タイムアウト制限を増やすだけでなく、リクエストを開始したユーザーが結果を待つ必要がない場合(つまり、1日の終わりや夜間のレポート)、タイムアウトを0に設定したcfthreadを使用します(決して- out)終了するまでバックグラウンドで実行したままにするか、1時間などの非常に長いタイムアウトを設定します。また、cflockを使用して、スレッドが2回以上処理できないようにします。そうしないと、多くの重いスレッドでシステムを停止する可能性があります。

この-docs-を読んで、あなたの考えを見てください

于 2012-09-13T14:34:05.737 に答える