3

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

そしてどのデータベースで?

4

5 に答える 5

8

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

于 2008-08-14T06:10:46.197 に答える
5

トランザクション: 分。

カーソル: 最大 0 秒、カーソルを使用すると発射されます。

SQL Server を実行する必要がある高可用性 Web 環境にいることを考えると、これはばかげたことではありません。また、ストアド プロシージャを正確にバージョン管理して維持することができないため、ストアド プロシージャも許可していません。オラクルを使用していた場合は、おそらく。

于 2008-08-14T06:10:22.983 に答える
2

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

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

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

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

そうは言っても、必要な絶対最小値の間だけカーソルを開いたままにしておきたいだけです。最大時間を指定することは、問題のドメインを理解していなければ、恣意的で無意味です。

于 2008-08-14T08:59:38.023 に答える
2

@ninesided:パフォーマンスの問題はさておき、それは仕事に適したツールを使用することでもあります。カーソルをクエリからコードに移動するという選択を考えると、100回のうち99回は、そのループロジックをある種のマネージコードに入れる方がよいと思います。そうすることで、デバッガーの使用、コンパイル時のエラーチェック、safteyの入力などの利点を得ることができます。

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

于 2008-08-14T13:05:04.733 に答える