SQL Server için çok yeniyim ve aşağıdaki çok basit select
ifadenin herhangi bir kilit alıp almayacağını anlamak istiyorum .
Select * from Student;
Lütfen ifadenin bir begin tran
blok içinde çalışmadığı durumu göz önünde bulundurun .
SQL Server için çok yeniyim ve aşağıdaki çok basit select
ifadenin herhangi bir kilit alıp almayacağını anlamak istiyorum .
Select * from Student;
Lütfen ifadenin bir begin tran
blok içinde çalışmadığı durumu göz önünde bulundurun .
Yanıtlar:
Evet, varsayılan olarak okuduğu satırlarda paylaşılan bir kilit alır (ayrıca, okuyacağı kümelenmiş dizinin tüm sayfalarında bir Amaç Paylaşımlı kilit alır), bu kirli okumaları önlemek için yapılır. Ancak bunu atlamanın yolları vardır (SQL Server'da nolock ipucu vardır). İfade bir BEGIN TRAN'da değilse, SELECT ifadesi çalıştıktan sonra kilit serbest bırakılır.
Daha fazla bilgi burada bulunabilir:
http://msdn.microsoft.com/en-us/library/ms184286(v=sql.105).aspx http://www.sqlteam.com/article/introduction-to-locking-in-sql-server
Aşağıdaki, çok basit select deyiminin herhangi bir kilit alıp almayacağını anlamak istiyorum
Bu bir olan yaygın bir yanlış kanı bir o SELECT
varsayılan çalışan sorgu READ COMMITTED
hareket yalıtım düzeyi olacak hep kirli okur önlemek için kilitleri paylaşılan take.
SQL Server, bunlar olmadan taranmamış verileri okuma tehlikesi olmadığında paylaşılan satır düzeyinde kilitler almaktan kaçınabilir (ancak daha yüksek düzey Niyet Paylaşımlı (IS) kilitler alınmasına rağmen).
Paylaşılan satır kilitleri bile vardır alındıklarında çok önce serbest bırakılabilir (eşzamanlı başka işlem sayfayı değiştirdi belki de satır üzerindedir) SELECT
deyimi tamamlar.
Çoğu durumda, sunucu bir sonraki satırı işlemeden hemen önce satırın kilidi 'açılır'. Varsayılan yalıtım düzeyinde alınan paylaşılan kilitlerin, işlemin sonuna kadar değil, geçerli ifadenin sonuna kadar tutulduğu durumlar vardır .
Mevcut izolasyon düzeyini NOLOCK
tablo ipucu ile geçersiz kılmak neredeyse her zaman kötü bir fikirdir .
Kilitleme bir uygulama detayıdır. SQL Server , geçerli yalıtım düzeyi tarafından sağlanan anlamsal garantileri karşıladığından emin olmak için gerektiğinde kilitler alır . Kilitlerin neden alındığına dair biraz bilgi sahibi olmanın kesinlikle yararlı olduğu zamanlar vardır, ancak bunları tahmin etmeye çalışmak çoğu zaman karşı üretkendir.
SQL Server çok çeşitli yalıtım seviyeleri sağlar; veri tüketicilerinizin ihtiyaç duyduğu garantileri ve davranışları sağlayanı seçin.