Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Özgün ürün sürümü: SQL Server
Özgün KB numarası: 230785
Özet
Bu makalede, Microsoft SQL Server günlüğü ve veri algoritmalarının veri güvenilirliğini ve bütünlüğünü nasıl genişlettiği açıklanır.
Altyapıların temel kavramları ve Kurtarma ve YalıtımDan Yararlanma Semantiği Algoritması (ARIES) hakkında daha fazla bilgi edinmek için aşağıdaki Veritabanı Sistemlerinde ACM İşlemleri belgesine bakın (Birim 17, Sayı 1, Mart 1992 altında):
Dış bağlantı: ARIES: Önceden Yazma Günlüğü Kullanarak Ayrıntılı Kilitlemeyi ve Kısmi Geri Almaları Destekleyen İşlem Kurtarma yöntemi
Belge, hatalarla ilgili olarak veri güvenilirliğini ve bütünlüğünü genişletmek için SQL Server tekniklerini ele alır.
Önbelleğe alma ve alternatif hata modu tartışmaları hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki aşağıdaki makaleleri okumanızı öneririz:
Bu makalede kullanılan terimler
Ayrıntılı tartışmaya başlamadan önce, bu makale boyunca kullanılan terimlerden bazıları aşağıdaki tabloda tanımlanmıştır.
| Süre | Tanım |
|---|---|
| Pil destekli | Veri kaybını önlemek için doğrudan kullanılabilir ve önbelleğe alma mekanizması tarafından denetlenen ayrı ve yerelleştirilmiş pil Yedekleme tesisi. Bu kesintisiz bir güç kaynağı (UPS) değildir. UPS herhangi bir yazma etkinliğini garanti etmez ve önbelleğe alma cihazıyla bağlantısı kesilebilir. |
| Önbellek | Fiziksel G/Ç işlemlerini iyileştirmek ve performansı geliştirmek için kullanılan ara depolama mekanizması. |
| Kirli Sayfa | Henüz kararlı depolama alanına boşaltılmayan veri değişikliklerini içeren sayfa. Kirli sayfa arabellekleri hakkında daha fazla bilgi için bkz . SQL Server Books Online'da Sayfa Yazma. İçerik, Microsoft SQL Server 2012 ve sonraki sürümler için de geçerlidir. |
| Hata | SQL Server işleminde beklenmeyen bir kesintiye neden olabilecek her şey. Örnekler şunlardır: güç kesintisi, bilgisayar sıfırlama, bellek hataları, diğer donanım sorunları, kötü kesimler, sürücü kesintileri, sistem hataları vb. |
| Sifon | Önbellek arabelleğinin kararlı depolamaya zorlanma. |
| Mandal | Bir kaynağın fiziksel tutarlılığını korumak için kullanılan eşitleme nesnesi. |
| Geçici olmayan depolama | Sistem hatalarında kullanılabilir durumda kalan herhangi bir ortam. |
| Sabitlenmiş sayfa | Veri önbelleğinde kalan ve tüm ilişkili günlük kayıtları kararlı bir depolama konumunda güvenliği sağlanana kadar kararlı depolama alanına boşaltılmayan sayfa. |
| Kararlı depolama | Geçici olmayan depolama ile aynıdır. |
| Geçici depolama | Hatalar arasında bozulmadan kalacak herhangi bir ortam. |
Önceden Yazma Günlüğü (WAL) protokolü
Protokol terimi WAL'yi tanımlamak için mükemmel bir yoldur. Verilerin doğru şekilde depolandığından ve değiştirildiğinden ve bir hata olduğunda bilinen bir duruma kurtarılabildiğinden emin olmak için gereken belirli ve tanımlı bir uygulama adımları kümesidir. Bir ağ tutarlı ve korumalı bir şekilde veri alışverişi yapmak için tanımlanmış bir protokol içerdiği gibi WAL da verileri korumak için protokolü açıklar.
ARIES belgesi WAL'yi aşağıdaki gibi tanımlar:
WAL protokolü, değiştirilen verilerin kalıcı olmayan depolamadaki verilerin önceki sürümünü değiştirmesine izin verilmeden önce bazı verilerdeki değişiklikleri temsil eden günlük kayıtlarının zaten kararlı depolamada olması gerektiğini onaylar. Başka bir ifadeyle, sayfa güncelleştirmelerinin kararlı depolamaya yazıldığını açıklayan günlük kayıtlarının en azından geri alma bölümlerine kadar sistemin sayfanın kalıcı olmayan depolama sürümüne güncelleştirilmiş bir sayfa yazmasına izin verilmez.
Önceden yazma günlüğü hakkında daha fazla bilgi için SQL Server Books Online'daki Önceden Yazma İşlem Günlüğü konusuna bakın.
SQL Server ve WAL
SQL Server WAL protokolünü kullanır. Bir işlemin doğru şekilde işlendiğinden emin olmak için işlemle ilişkili tüm günlük kayıtlarının kararlı depolama alanında güvenliği sağlanmalıdır.
Bu durumu netleştirmek için aşağıdaki özel örneği göz önünde bulundurun.
Not
Bu örnekte dizin olmadığını ve etkilenen sayfanın 150. sayfa olduğunu varsayalım.
BEGIN TRANSACTION
INSERT INTO tblTest VALUES (1)
COMMIT TRANSACTION
Ardından, aşağıdaki tabloda açıklandığı gibi etkinliği basit günlük adımlarına bölün.
| Deyim | Gerçekleştirilen eylemler |
|---|---|
| İŞLEM BAŞLAT | Günlük önbelleği alanına yazılır. Ancak, SQL Server herhangi bir fiziksel değişiklik yapmadığından kararlı depolamaya boşaltmak gerekli değildir. |
| INSERT INTO tblTest | 1. Veri sayfası 150, henüz kullanılabilir değilse SQL Server veri önbelleğine alınır. 2. Sayfa mandallanır, sabitlenir ve kirli olarak işaretlenir ve uygun kilitler elde edilir. 3. Günlük Kaydı Ekle oluşturulur ve günlük önbelleğine eklenir. 4. Veri sayfasına yeni bir satır eklenir. 5. Mandal serbest bırakılır. 6. İşlem veya sayfayla ilişkili günlük kayıtlarının bu noktada boşaltılması gerekmez çünkü tüm değişiklikler geçici depolamada kalır. |
| İŞLEME IŞLEMI | 1. İşleme Günlüğü kaydı oluşturulur ve işlemle ilişkili günlük kayıtları kararlı depolamaya yazılmalıdır. Günlük kayıtları kararlı depolamaya doğru şekilde atanana kadar işlem işlenmez. 2. Veri sayfası 150, SQL Server veri önbelleğinde kalır ve kararlı depolama alanına hemen boşaltılamaz. Günlük kayıtları doğru şekilde güvenli hale getirildiğinde, gerekirse kurtarma işlemi yineleyebilir. 3. İşlem kilitleri serbest bırakılır. |
"Kilitleme" ve "günlüğe kaydetme" terimleri kafanız karışmasın. Önemli olsa da, WAL ile ilgilenirken kilitleme ve günlüğe kaydetme ayrı sorunlardır. Önceki örnekte, SQL Server genellikle 150. sayfadaki mandalı, işlemin tamamında değil, sayfadaki fiziksel ekleme değişikliklerini gerçekleştirmek için gereken süre boyunca tutar. Satır, aralık, sayfa veya tabloyu gerektiği gibi korumak için uygun kilit türü oluşturulur. Kilit türleri hakkında daha fazla bilgi için SQL Server Books Online kilitleme bölümlerine bakın.
Örne daha ayrıntılı olarak baktığınızda LazyWriter veya CheckPoint işlemleri çalıştırıldığında ne olacağını sorabilirsiniz. SQL Server, kirli ve sabitlenmiş sayfayla ilişkili işlem günlüğü kayıtları için kararlı depolamaya tüm uygun temizlemeleri gönderir. Bu, ilişkili işlem günlüğü kayıtları boşaltılana kadar WAL protokolü veri sayfasının hiçbir zaman kararlı depolamaya yazılmamasını sağlar.
SQL Server ve kararlı depolama
SQL Server, disk kesimi boyutları (genellikle 4.096 bayt veya 512 bayt) bilgilerini ekleyerek günlük ve veri sayfası işlemlerini geliştirir.
Bir işlemin ACID özelliklerini korumak için SQL Server'ın hata noktalarını hesaba eklemesi gerekir. Bir hata sırasında, birçok disk sürücüsü belirtimi yalnızca sınırlı sayıda kesim yazma işlemi garanti eder. Çoğu belirtim, bir hata oluştuğunda tek bir kesim yazmanın tamamlanmasını garanti eder.
SQL Server, kesim boyutunun katları üzerinde 8 KB veri sayfaları ve günlük (boşaltıldıysa) kullanır. (Çoğu disk sürücüsü varsayılan kesim boyutu olarak 512 bayt kullanır.) Bir hata varsa, SQL Server günlük eşlik ve yırtılmış yazma teknikleri kullanarak bir kesimden daha büyük yazma işlemlerini hesaba katabilir.
Yırtılmış sayfa algılama
Bu seçenek, SQL Server'ın güç kesintilerinden veya diğer sistem kesintilerinden kaynaklanan eksik G/Ç işlemlerini algılamasına olanak tanır. Doğru olduğunda, sayfa diske her yazıldığında 8 kilobaytlık (KB) bir veritabanı sayfasında her 512 baytlık kesim için bir bit çevrilmeye neden olur. Sayfa daha sonra SQL Server tarafından okunduğunda bir bit yanlış durumdaysa, sayfa yanlış yazılmıştır; bozuk bir sayfa algılanır. Hatalı yazılmış tüm sayfaların kurtarma tarafından okunma olasılığı yüksek olduğundan, kurtarma sırasında yırtılmış sayfalar algılanır.
SQL Server veritabanı sayfaları 8 KB olsa da, diskler 512 baytlık bir kesim kullanarak G/Ç işlemleri gerçekleştirir. Bu nedenle veritabanı sayfası başına 16 kesim yazılır. İşletim sisteminin diske ilk 512 baytlık kesimi yazması ile 8 KB G/Ç işleminin tamamlanması arasında sistem başarısız olursa (örneğin, güç kesintisi nedeniyle) yırtılmış bir sayfa oluşabilir. Veritabanı sayfasının ilk kesimi hatadan önce başarıyla yazılırsa, disk üzerindeki veritabanı sayfası güncelleştirilmiş olarak görünür, ancak başarılı olmayabilir.
Pil destekli disk denetleyicisi önbelleklerini kullanarak verilerin diske başarıyla yazıldığından veya hiç yazılmadığından emin olabilirsiniz. Bu durumda, bu gerekli olmadığından yırtılmış sayfa algılamayı "true" olarak ayarlamayın.
Not
Yırtılmış sayfa algılama, SQL Server'da varsayılan olarak etkin değildir. Daha fazla bilgi için bkz . ALTER DATABASE SET Options (Transact-SQL).
Günlük eşlik
Günlük eşlik denetimi bozuk sayfa algılamaya benzer. Her 512 baytlık kesim eşlik bitleri içerir. Bu eşlik bitleri her zaman günlük kaydıyla yazılır ve günlük kaydı alındığında değerlendirilir. SQL Server, günlük yazma işlemlerini 512 baytlık bir sınıra zorlayarak işleme işlemlerinin fiziksel disk kesimlerine yazıldığından emin olabilir.
Performans etkileri
SQL Server'ın tüm sürümleri, Win32 CreateFile işlevini kullanarak günlük ve veri dosyalarını açar. dwFlagsAndAttributes üyesi, SQL Server tarafından açıldığında seçeneğini içerir FILE_FLAG_WRITE_THROUGH .
FILE_FLAG_WRITE_THROUGH sisteme herhangi bir ara önbellek üzerinden yazmasını ve doğrudan diske gitmesini sağlar. Sistem yine de yazma işlemlerini önbelleğe alabilir, ancak bunları boşaltamaz.
seçeneği FILE_FLAG_WRITE_THROUGH , bir yazma işlemi başarılı bir tamamlama döndürdüğünde verilerin kararlı depolamada doğru şekilde depolanmasını sağlar. Bu, verilerin sağlanmasını sağlayan WAL protokolüyle hizalanır.
Birçok disk sürücüsü (SCSI ve IDE), 512 KB, 1 MB veya daha büyük yerleşik önbellekler içerir. Ancak, sürücü önbellekleri genellikle pil destekli bir çözüme değil, bir kapasitöre dayanır. Bu önbelleğe alma mekanizmaları, bir güç döngüsünde veya benzer bir hata noktasında yazma işlemini garantileyemez. Bunlar yalnızca kesim yazma işlemlerinin tamamlanmasını garanti eder. Bu, yırtılmış yazma ve günlük eşlik algılamasının SQL Server 7.0 ve sonraki sürümlerde yerleşik olmasının nedenidir. Sürücülerin boyutu artmaya devam ettikçe önbellekler büyür ve bir hata sırasında daha fazla miktarda veri ortaya çıkarabilir.
Birçok donanım satıcısı, pil destekli disk denetleyicisi çözümleri sağlar. Bu denetleyici önbellekleri, önbellekteki verileri birkaç gün boyunca koruyabilir ve hatta önbelleğe alma donanımının ikinci bir bilgisayara yerleştirilmesine izin verebilir. Güç doğru şekilde geri yüklendiğinde, daha fazla veri erişimine izin verilmeden önce yazılmamış veriler boşaltılır. Bunların çoğu, en iyi performans için okuma ve yazma önbelleği yüzdesi oluşturulmasına izin verir. Bazıları büyük bellek depolama alanları içerir. Aslında, bazı donanım satıcıları pazarın belirli bir kesimi için 6 GB önbellekli üst düzey pil destekli disk önbelleğe alma denetleyicisi sistemleri sağlar. Bunlar veritabanı performansını önemli ölçüde geliştirebilir.
Gelişmiş önbelleğe alma uygulamaları, sistem sıfırlama, güç kesintisi veya başka bir hata noktası durumunda gerçek yeniden yazma özellikleri sağlayabildiği için denetleyici önbelleğini devre dışı bırakmayarak isteği işler FILE_FLAG_WRITE_THROUGH .
Sürücü kafalarını, dönüş hızlarını ve diğer sınırlayıcı faktörleri taşımak için gereken mekanik süre nedeniyle önbellek kullanılmadan G/Ç aktarımları daha uzun olabilir.
Sektör sıralaması
G/Ç performansını artırmak için kullanılan yaygın bir teknik, sektör sıralamasıdır. Mekanik kafa hareketini önlemek için okuma/yazma istekleri sıralanır ve başın verileri alması veya depolaması için daha tutarlı bir hareket sağlar.
Önbellek birden çok günlük ve veri yazma isteğini aynı anda tutabilir. WAL protokolü ve WAL protokolünün SQL Server uygulaması, sayfa yazmanın düzenlenebilmesi için önce günlük yazma işleminin kararlı depolamaya boşaltılması gerekir. Ancak önbellek kullanımı, veriler gerçek sürücüye (kararlı depolamaya yazılır) yazılmadan günlük yazma isteğinden başarı döndürebilir. Bu, SQL Server'ın veri sayfası yazma isteğini vermesine neden olabilir.
Yazma önbelleği katılımıyla, veriler hala geçici depolamada olarak kabul edilir. Ancak Win32 API WriteFile çağrısından SQL Server'ın etkinliği tam olarak nasıl gördüğü başarılı bir dönüş kodu elde edildi. SQL Server veya WriteFile API çağrısını kullanan herhangi bir işlem yalnızca verilerin kararlı depolamayı doğru bir şekilde edindiğini belirleyebilir.
Tartışma amacıyla, veri sayfasının tüm kesimlerinin eşleşen günlük kayıtlarının kesimlerinden önce yazacak şekilde sıralandığını varsayalım. Bu, WAL protokolünü hemen ihlal eder. Önbellek, günlük kaydından önce bir veri sayfası yazıyor. Önbellek tamamen pille yedeklenmediği sürece, bir hata yıkıcı sonuçlara neden olabilir.
Veritabanı sunucusu için en iyi performans faktörlerini değerlendirirken dikkate almanız gereken birçok faktör vardır. Bunlardan en önemlisi, "Sistemim geçerli FILE_FLAG_WRITE_THROUGH özelliklere izin verir mi?"
Not
Kullandığınız tüm önbellekler, pil destekli çözümü tam olarak desteklemelidir. Diğer tüm önbelleğe alma mekanizmaları veri bozulmasına ve veri kaybına açıktır. SQL Server, 'yi etkinleştirerek WAL'yi güvence altına almak için her çabayı gösterir FILE_FLAG_WRITE_THROUGH.
Test, birçok disk sürücüsü yapılandırmasının uygun pil Yedeklemesi olmadan yazma önbelleği içerebileceğini göstermiştir. SCSI, IDE ve EIDE sürücüleri yazma önbelleklerinden tam olarak yararlanır. SSD'lerin SQL Server ile birlikte nasıl çalıştığı hakkında daha fazla bilgi için aşağıdaki CSS SQL Server Mühendisleri Blog makalesine bakın:
SQL Server ve SSD'ler - RDORR'un Öğrenme Notları - Bölüm 1
Birçok yapılandırmada, bir IDE veya EIDE sürücüsünün yazma önbelleğini doğru bir şekilde devre dışı bırakmanın tek yolu, belirli bir üretici yardımcı programını kullanmak veya sürücünün kendisinde bulunan jumper'ları kullanmaktır. Yazma önbelleğinin sürücünün kendisi için devre dışı bırakıldıdığından emin olmak için sürücü üreticisine başvurun.
SCSI sürücülerinin yazma önbellekleri de vardır. Ancak bu önbellekler genellikle işletim sistemi tarafından devre dışı bırakılabilir. Herhangi bir soru varsa, uygun yardımcı programlar için sürücü üreticisine başvurun.
Yazma Önbelleği Yığınlama
Yazma Önbelleği Yığınlama, Kesim Sıralaması'na benzer. Aşağıdaki tanım doğrudan önde gelen bir IDE sürücü üreticisinin web sitesinden alınmıştır:
Normalde bu mod etkindir. Yazma önbelleği modu, arabellek dolana veya konak aktarımı tamamlanana kadar ana bilgisayar yazma verilerini arabelleğe kabul eder.
Bir disk yazma görevi konak verilerini diske depolamaya başlar. Ana bilgisayar yazma komutları kabul edilmeye devam edilir ve yazma komut yığını dolana veya veri arabelleği dolana kadar veriler arabelleğe aktarılır. Sürücü, sürücü aktarım hızını iyileştirmek için yazma komutlarını yeniden sıralayabilir.
Otomatik Yazma Yeniden Yükleme (AWR)
Verileri korumak için kullanılan bir diğer yaygın teknik de veri işleme sırasında hatalı kesimleri algılamaktır. Aşağıdaki açıklama önde gelen bir IDE sürücü üreticisinin web sitesinden gelir:
Bu özellik, yazma önbelleğinin bir parçasıdır ve ertelenmiş yazma işlemleri sırasında veri kaybı riskini azaltır. Disk yazma işlemi sırasında bir disk hatası oluşursa, disk görevi durur ve şüpheli kesim, sürücünün sonunda bulunan alternatif kesimlerden oluşan bir havuza yeniden ayrılır. Yeniden yükleme sonrasında disk yazma görevi tamamlanana kadar devam eder.
Önbellek için pil Yedeklemesi sağlanmışsa bu güçlü bir özellik olabilir. Bu, yeniden başlatıldıktan sonra uygun değişiklikleri sağlar. Disk hatalarını algılamak tercih edilir, ancak WAL protokolünün veri güvenliği bunun ertelenmiş bir şekilde değil gerçek zamanlı olarak yapılmasını gerektirir. WAL parametrelerinde AWR tekniği, kesim hatası nedeniyle günlük yazma işleminin başarısız olduğu ancak sürücünün dolu olduğu bir durumu hesaba ekleyemez. İşlemin doğru şekilde durdurulabilmesi, yöneticinin uyarılabilmesi ve verilerin güvenliğini sağlamak ve medya hatası durumunu düzeltmek için doğru adımların atılması için veritabanı altyapısının hatadan hemen haberdar olması gerekir.
Veri güvenliği
Bir veritabanı yöneticisinin verilerin güvenliğini sağlamak için alması gereken çeşitli önlemler vardır.
- Yedekleme stratejinizin yıkıcı bir hatadan kurtarmak için yeterli olduğundan emin olmak her zaman iyi bir fikirdir. Site dışı depolama ve diğer önlemler uygundur.
- veritabanı geri yükleme işlemini ikincil veya test veritabanında sık sık test edin.
- Tüm önbelleğe alma cihazlarının tüm hata durumlarını (güç kesintisi, bozuk kesimler, hatalı sürücüler, sistem kesintisi, kilitlemeler, ani güç artışı vb.) işleyebileceğinden emin olun.
- Önbelleğe alma cihazınızın:
- Tümleşik pil Yedeklemeye sahiptir
- Açma/kapamada yazma işlemleri yeniden başlatılabilir
- Gerekirse tamamen devre dışı bırakılabilir
- Hatalı kesim yeniden eşlemeyi gerçek zamanlı olarak işler
- Bozuk sayfa algılamayı etkinleştirin. (Bunun performans üzerinde çok az etkisi vardır.)
- Mümkünse hatalı bir disk sürücüsünün çalışırken değişimine izin veren RAID sürücülerini yapılandırın.
- İşletim sistemini yeniden başlatmadan daha fazla disk alanı eklemenize olanak sağlayan daha yeni önbelleğe alma denetleyicileri kullanın. Bu ideal bir çözüm olabilir.
Sürücüleri test etme
Verilerinizin güvenliğini tam olarak sağlamak için tüm veri önbelleğe alma işlemlerinin doğru şekilde işlendiğinden emin olmanız gerekir. Birçok durumda, disk sürücüsünün yazma önbelleğini devre dışı bırakmanız gerekir.
Not
Alternatif bir önbelleğe alma mekanizmasının birden çok hata türünü doğru işleyebileceğinden emin olun.
Microsoft, yardımcı programını kullanarak çeşitli SCSI ve IDE sürücülerinde SQLIOSim test gerçekleştirmiştir. Bu yardımcı program, sanal veri cihazına ve günlük cihazına ağır zaman uyumsuz okuma/yazma etkinliğinin benzetimini sağlar. Test performansı istatistikleri, devre dışı yazma önbelleğe alma ve 5.200 ile 7.200 arasında RPM aralığı olan bir sürücü için saniyede ortalama yazma işlemlerini 50 ile 70 arasında gösterir.
Yardımcı program hakkında SQLIOSim daha fazla bilgi için Microsoft Bilgi Bankası'ndaki aşağıdaki makaleye bakın:
Birçok bilgisayar üreticisi, yazma önbelleğini devre dışı bırakarak sürücüleri sipariş etmektedir. Ancak test, her zaman böyle olmayabileceğini gösterir. Bu nedenle, her zaman tamamen test edin.
Veri cihazları
Günlüğe kaydedilmemiş durumlar dışında tüm durumlarda SQL Server yalnızca günlük kayıtlarının boşaltılması gerekir. Günlüğe kaydedilmemiş işlemler yapılırken veri sayfalarının da kararlı depolama alanına boşaltılması gerekir; bir hata durumunda eylemleri yeniden oluşturmak için tek tek günlük kaydı yoktur.
LazyWriter veya CheckPoint işlemi bunları kararlı depolama alanına boşaltana kadar veri sayfaları önbellekte kalabilir. Wal protokolünü kullanarak günlük kayıtlarının doğru bir şekilde depolandığından emin olmak, kurtarmanın bir veri sayfasını bilinen bir duruma kurtaramasını sağlar.
Bu, veri dosyalarının önbelleğe alınmış bir sürücüye yerleştirildiğini göstermez. SQL Server veri sayfalarını kararlı depolama alanına boşalttığında, günlük kayıtları işlem günlüğünden kesilebilir. Veri sayfaları geçici önbellekte depolanıyorsa, hata durumunda bir sayfayı kurtarmak için kullanılacak günlük kayıtlarını kesebilirsiniz. Hem verilerinizin hem de günlük cihazlarınızın kararlı depolamayı doğru şekilde barındırdığından emin olun.
Performansı artırma
Size olabilecek ilk soru şudur: "Önbelleğe alan bir IDE sürücüm var. Ama devre dışı bırakınca performansım beklenenden az oldu. Neden?"
Microsoft tarafından test edilen IDE sürücülerinin çoğu 5.200 RPM ve SCSI sürücüleri 7.200 RPM'de çalışır. IDE sürücüsünün yazma önbelleğini devre dışı bırakırsanız mekanik performans bir faktör haline gelebilir.
Performans farkını gidermek için izleyebileceğiniz yöntem açıktır: "İşlem oranını ele alın."
Birçok çevrimiçi işlem işleme (OLTP) sistemi yüksek işlem oranı gerektirir. Bu sistemler için, uygun bir yazma önbelleğini destekleyebilecek ve veri bütünlüğünü sağlamaya devam ederken istenen performans artışını sağlayabilecek bir önbellek denetleyicisi kullanmayı göz önünde bulundurun.
Önbelleğe alma sürücüsünde SQL Server'da gerçekleşen önemli performans değişikliklerini gözlemlemek için küçük işlemler kullanılarak işlem hızı artırıldı.
Test, 512 KB'tan küçük veya 2 MB'tan büyük arabelleklerin yüksek yazma etkinliğinin yavaş performansa neden olabileceğini gösterir.
Aşağıdaki örneği inceleyin:
CREATE TABLE tblTest ( iID int IDENTITY(1,1), strData char(10))
GO
SET NOCOUNT ON
GO
INSERT INTO tblTest VALUES ('Test')
WHILE @@IDENTITY < 10000
INSERT INTO tblTest VALUES ('Test')
SQL Server için örnek test sonuçları şunlardır:
SCSI(7200 RPM) 84 seconds
SCSI(7200 RPM) 15 seconds (Caching controller)
IDE(5200 RPM) 14 seconds (Drive cache enabled)
IDE(5200 RPM) 160 seconds
Tüm işlem serisini INSERT tek bir işleme sarmalama işlemi, tüm yapılandırmalarda yaklaşık dört saniye içinde çalıştırılır. Bunun nedeni, gerekli günlük boşaltma sayısıdır. Tek bir işlem oluşturmazsanız, her INSERT işlem ayrı bir işlem olarak işlenir. Bu nedenle, işlem için tüm günlük kayıtlarının boşaltılması gerekir. Her temizleme 512 bayt boyutundadır. Bunun için önemli mekanik tahrik müdahalesi gerekir.
Tek bir işlem kullanıldığında, işlemin günlük kayıtları paketlenebilir ve toplanan günlük kayıtlarını temizlemek için tek, daha büyük bir yazma kullanılabilir. Bu, mekanik müdahaleyi önemli ölçüde azaltır.
Uyarı
İşlem kapsamınızı artırmamanızı öneririz. Uzun süre çalışan işlemler aşırı ve istenmeyen engellemeye ve ek yükün artmasına neden olabilir. İşlem günlüğü tabanlı sayaçları görüntülemek için SQL Server:Databases SQL Server performans sayaçlarını kullanın. Özel olarak, Boşaltılan Günlük Baytları/sn, yüksek mekanik disk etkinliğine neden olabilecek birçok küçük işlemi gösterebilir.
Boşaltılan Günlük Baytları/sn değerinin azaltılıp azaltılamayacağını belirlemek için günlük temizleme ile ilişkili deyimleri inceleyin. Önceki örnekte tek bir işlem kullanılmıştır. Ancak, birçok senaryoda bu istenmeyen kilitleme davranışına neden olabilir. İşlemin tasarımını inceleyin. Sık ve küçük günlük temizleme etkinliğini azaltmak için toplu işleri çalıştırmak için aşağıdaki koda benzer bir kod kullanabilirsiniz:
BEGIN TRAN
GO
INSERT INTO tblTest VALUES ('Test')
WHILE @@IDENTITY < 50
BEGIN
INSERT INTO tblTest VALUES ('Test')
if(0 = cast(@@IDENTITY as int) % 10)
BEGIN
PRINT 'Commit tran batch'
COMMIT TRAN
BEGIN TRAN
END
END
GO
COMMIT TRAN
GO
SQL Server, sistemlerin kararlı medyaya garantili teslimi desteklemesini gerektirir. Daha ayrıntılı bilgi için bkz. Microsoft SQL Server Veritabanı Altyapısı Giriş/Çıkış Gereksinimleri.