0

トランザクションを使用してコンテンツを編集しているときに、コンテンツのロードに遅延を感じました (この状況をテストするのは、どのようにテストすればよいかわからないため、少し難しいです)。

Transactions使用法についていくつか疑問があります。

いくつかのマイナーな問題と、トランザクションについて理解しておくべきことがあり、これらの部分はこの質問に関連しています。

独自の CMS でトランザクションを使用する必要があるのはいつですか?

私のケース固有のメモ:

  1. Insert、Update、Retrieve に sprocs がある間、CMS でトランザクションを使用する必要がありますか?
  2. トランザクションを使用する必要があるのは、1 つ以上のテーブルで作業している場合だけですか?

私が使用したトランザクション戦略:

製品メソッドの追加 ( add Product sproc を使用):

            TransactionOptions txOptions = new TransactionOptions();
            using (TransactionScope txScope = new TransactionScope
              (TransactionScopeOption.Required, txOptions))
            {
                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                    LastInserted = (int)pInsertedID.Value;
                    txScope.Complete();                        
                }
                catch (Exception ex)
                {
                    logErrors.Warn(ex.Message);
                }
                finally
                {
                    command.Dispose();
                    connection.Close();
                }
4

1 に答える 1

0

トランザクションは、データベースの一貫性を確保するのに役立ちます。たとえば、製品を追加するために使用されるストアド プロシージャが複数のテーブルにデータを挿入し、途中で何かが失敗した場合、トランザクションは操作全体をロールバックするのに役立つ可能性があるため、データベースには中途半端な製品 (たとえば、関連するテーブルにいくつかの重要な情報が欠けています)。

トランザクション スコープ ( TransactionScope) は、コード ブロック内で実行されるすべてのコードに対して、周囲の暗黙的なトランザクションを提供するために使用されます。これらのスコープはコードを大幅に簡素化するのに役立つかもしれませんが、マルチスレッド環境では複雑さを増す可能性もあります (残念ながら、私はそのようなケースについてあまり知りません)。

したがって、特にコマンドが複数のテーブルを使用する場合、提供したコードはデータベースの一貫性を確保するのにおそらく意味があります。パフォーマンスのオーバーヘッドが追加される場合があります。ただし、最適化を行う前に何らかの感情を抱くよりも、収集したプロファイリング データに頼ったほうがよいでしょう (つまり、トランザクションがどれだけ遅いかについて定量的なデータを収集してみてください)。最新のデータベース エンジンは通常、トランザクションを非常に効率的に処理します。私自身の経験では、パフォーマンスのオーバーヘッドのために削除するトランザクションはありませんでした。

于 2012-09-14T11:07:15.867 に答える