2009-08-31 13 views
5

okudum makaleler: http://www.codinghorror.com/blog/archives/001166.html http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005-Snapshots.htmSQL Server'da kilitleme stratejisi nasıl değiştirilir? Bu gibi

Ve anladığım kadarıyla, SQL Server çok kötümser bir kilitleme stratejisi vardır . Ve performansı arttırmak için, Okuyan Anlık Görüntüyü kilitlemem gerekir.

Ancak bunu nerede yapacağımı bulamıyorum. Kilitleme stratejisini nerede değiştirebilirim?

cevap

5

Using Row Versioning-based Isolation Levels'dan, ALTER komutunu kullanarak bunları nasıl ayarlayacağınızla ilgili örnekleri okuyabilirsiniz. Row Versioning-based Isolation Levels in the Database Engine:

ALTER DATABASE YourDatabaseName SET READ_COMMITTED_SNAPSHOT ON; 

Daha iyi bir başlangıç ​​noktası ilgili konuları kapsar yukarıdaki belgelerin, üstüdür şu şekildedir:

Bu veritabanı düzeyinde ayarlanır.

DÜZENLEME: eklediğim linkler aşağıda yer alan yorumlarda belirtilmiştir.

+0

Tamam, ama sonra nasıl geçerli yalıtım düzeyi olan görüyorsunuz? Ve bu yalıtım seviyesi yalnızca işlemlerde veya tüm sorgularda çalışan sorgulara uygulanır mı? – Allrameest

+1

DBCC USEROPTIONS çalıştırın ve şu anki ayar olacaktır iade öğelerden biri olabilir "yalıtım düzeyi." İşte MSDN bağlantısı: http://msdn.microsoft.com/en-us/library/ms180065.aspx –

+0

Sorunuzun 2. bölümü ile ilgili olarak, bir işlemdeki yalıtım seviyesini kullanmak için, "BAŞLANGIÇ SEVİYESİ" ifadesinden önce "SET TRANSACTION ISOLATION LEVEL SNAPSHOT" komutunu kullanarak bunu özellikle ayarlamanız gerekecektir. Bu nedenle benim anlayışım, sadece sizin için açıkça bildirdiğiniz işlem sorgularını etkiler. Bunun bir örneği yukarıdaki bağlantılardadır. Bunu açıklayan güzel bir makale de burada okunabilir: http://www.databasejournal.com/features/mssql/article.php/3566746/Controlling-Transactions-and-Locks-Part-5-SQL-2005-Snapshots.htm –

1

SNAPSHOT Yalıtım Seviyesini kullanmak, veritabanı yükünüz arttıkça tempdb'ye çok miktarda yük ekler.

iyi sorguları ipuçlarını kilit ile, ya da yerleşik prosedür veya bağlantı için genel olarak İZOLASYON düzeyini değiştirerek yapılır kilitleme yöntemleri değiştirme. Bu, SET İZOLASYON SEVİYESİ komutuyla veya .NET'teki bağlantı nesnesindeki yalıtım düzeyini değiştirerek yapılır.

SQL Server'ın kilitlemesini varsayılan sayfa düzeyi (örn. Satır düzeyi kilitleme) dışındaki bir düzeyde ele almasını istiyorsanız, deyim düzeyindeki bir ifadede ele alınacak olan WITH (ROWLOCK) ipucunu kullanarak ifadeleri.

UPDATE YourTable (WITH ROWLOCK) 
    SET Col2 = 3 
WHERE Col1 = 'test' 

Orada bu kilitleme düzeyini değiştirmek için hiçbir genel bir ayardır ve rowlock sayfanın tamamını olduğu gibi yine sayfa düzeyinde gerçekleşecek anlık görüntü yalıtım düzeyi operasyonları ile birlikte kullanılırsa kapalı kopyalanacak Daha sonra tempdb veritabanı güncellendi eski sürümü tempdb veritabanından düşürülmesi gerekiyor.

+0

-1 SET İZOLASYON SEVİYESİ içinden "READ_COMMITTED_SNAPSHOT" seçeneğini seçemezsiniz, veya .NET bağlantı nesnesi aracılığıyla. Ahmad Mageed'in cevabında olduğu gibi ALTER DATABASE'a ihtiyacınız var. – Andomar

+0

@Andomar Eğer SNAPSHOT kullanacaksanız, bunu veritabanı düzeyinde etkinleştirmelisiniz. İşlemlerinizi kullanmanız için, her zaman varsayılan olan READ COMMITTED yerine SNAPSHOT kullanmak için bu işlemin yalıtım düzeyi için SET TRANSACTION ISOLATION LEVEL SNAPSHOT'u kullanmanız gerekir. – mrdenny

0

seni biz kurmak her bağlantı için bunu çalışmak

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

arayarak, veritabanına bağlantı ayarlarken Kilit yalıtım düzeyini ayarlayabilirsiniz, hepsi de ayarlanır Veritabanına erişim için paylaşılan bir bağlantı havuzu kullandığımız yer. READ UNCOMMITTED seçeneği, o bağlantı tarafından verilen tüm ifadelere uygulanır.

+0

Hmm 'OKUMA UNCOMMITTED' ayarını tahtada ayarlamanızı önermeyeceğim - gerçekten veritabanının kullanımınıza bağlı. SQL Server 2005+, temel sürümlerin Oracle'ın nasıl çalıştığına benzer şekilde dizdiği anlık görüntü yalıtımını destekler. – pjp

+0

"Okuma Gönderilmemiş" başlıklı "Okuyan Anlık Görüntüyü" karıştırıyorsunuz. Birincisi, "hareket yalıtım seviyesini belirle" ile seçim yapamayacağınız nispeten bilinmeyen bir ayardır, bkz. Ahmad Mageed'in yazısı. – Andomar

İlgili konular