SQL カーソルを開いたままにする「妥当な」時間はどれくらいですか?

StackOverflow https://stackoverflow.com/questions/10727

  •  08-06-2019
  •  | 
  •  

質問

アプリケーションにおいて、コミットまたはロールバックする前にトランザクションを開いたままにする「長い時間」はどれくらいですか?分?数秒?時間?

そしてどのデータベースにあるのでしょうか?

役に立ちましたか?

解決

@lomaxx、@ChanChan:私の知る限り、カーソルは SQL Server と Sybase (T-SQL バリアント) 上でのみ問題になります。選択したデータベースが Oracle の場合、カーソルはあなたの友人です。カーソルを使用すると実際にパフォーマンスが向上するケースを数多く見てきました。カーソルは非常に便利なメカニズムですが、「カーソルを使用すると解雇される」などという言い方は少しばかげています。

そうは言っても、必要な絶対最小限の場合にのみカーソルを開いたままにしておく必要があります。問題領域を理解していなければ、最大時間を指定することは恣意的で無意味です。

他のヒント

おそらくこれについては激怒されるでしょうが、カーソルはパフォーマンスに重大な影響を与えるため、カーソルの使用は絶対に避けるべきです。どうしても使用しなければならない場合は、カーソルによってブロックされているリソースをできるだけ早く解放するために、可能な限り最小限の時間だけ開いたままにしておく必要があります。

トランザクション:分。

カーソル:最大 0 秒。カーソルを使用すると解雇されます。

これは、SQL サーバーを実行する必要がある高可用性の Web 環境にあり、正確にバージョンを管理して保守できないためにストアド プロシージャさえ許可していないことを考えると、ばかげたものではありません。oracle を使用していればそうなるかもしれません。

一般的に、私は他の回答に同意します。可能な限り (ほとんどの場合) カーソルを避け、できるだけ早くカーソルを閉じます。

しかし:それはすべて、作業している環境によって異なります。

  • 多くのユーザーがいる運用 Web サイト環境の場合は、誰かがタイムアウトになる前にカーソルが消えるようにしてください。
  • たとえば、他には何もしない独自のマシン上で「ログ分析ストアド プロシージャ」(またはその他)を作成している場合:やりたいことは何でも自由にやってください。待たなければならないのはあなただけです。カーソルを使用するからといって、データベース サーバーが停止するわけではありません。ただし、時間の経過とともに使用行動が変化し、ある時点でそのアプリケーションを 10 人が使用する可能性があることを考慮する必要があります。だから別の方法を見つけてください;)

@nineside:パフォーマンスの問題はさておき、仕事に適したツールを使用することも重要です。カーソルをクエリからコードに移動するという選択をした場合、100 回中 99 回、そのループ ロジックを何らかのマネージド コードに組み込んだ方が良いと思います。そうすることで、デバッガの使用、コンパイル時のエラー チェック、タイプ セーフなどの利点を得ることができます。

質問に対する私の答えは同じです。カーソルを使用している場合は、できるだけ早く閉じてください。Oracleでは、明示的なカーソルも使用しようとしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top