2010-01-08 8 views
1

Il existe une requête de sélection sql (sélectionnez * from table1 e.g.) dans un objet de transaction dans C#. Normalement il y a une transaction ambiante mais si je supprime la transaction ambiante lors de l'exécution de cette requête sql, y a-t-il un gain de performance ou pas?Exécution de la requête select sql dans une étendue de transaction supprimée

using (TransactionScope scope1 = new TransactionScope()) 
{ 
    // here there are some business processes 

    using (TransactionScope scope1 = new TransactionScope(TransactionScopeOption.Suppressed)) //Is this suppressed transaction scope useful in terms of performance? 
    { 

     //Here there is a select sql query with no lock table hint. 
    } 
} 

Répondre

1

Yes- depuis TransactionScope (comme vous l'avez utilisé dans votre échantillon) utilise le niveau d'isolation sérialisable, supprimant pour certaines requêtes qui ne nécessitent pas la protection de ce niveau d'isolation empêchera d'être verrous en lecture pris sur le serveur de base de données (en particulier si vous utilisez READ COMMITTED SNAPSHOT comme niveau d'isolation par défaut). De même, si d'autres choses que vous avez faites vont promouvoir la transaction au DTC (c.-à-d., Connexions multiples, etc.), vous gagnerez du temps pour coordonner les DTC, qui peuvent être lents.

+0

merci nitzmahone. J'ai mis à jour ma question. Cette requête select utilise un indicateur de table "no lock". – mkus