Yırtık Sayfa Algılama ve sağlama toplamı SQL Server'a ne zaman tanıtıldı ve yükseltme davranışları nelerdir?


15

Modern SQL Server'da sayfa doğrulaması için iki farklı seçenek vardır; varlık Sayfa Detection Yırtılmış ve Checksum . Hiçbiri elbette bir seçenek de değil.

Checksum'un SQL Server 2005'te tanıtıldığını ve bir DB'nin önceki bir sürümden yükseltilmesinin veya geri yüklenmesinin önceki sayfa doğrulama yöntemini koruyacağına inanıyorum . yani örtük bir yükseltme olmadı.

Sorun, SQL Server 2000 kullanarak üretime giren ve o zamandan beri SQL Server 2008 R2 sunucusuna taşınan bir üretim veritabanına sahip olmamızdır. Sayfa Doğrulama, Yırtık Sayfa Algılama olmasını beklediğimde Yok olarak ayarlanmış . Bu süreye geri dönersek, DB'nin SQL Server 7.0'da geliştirildiğini ve daha sonra SQL Server 2000'e geçtiğini düşünüyoruz ve bu gözlemlenen sonucu açıklayabilir.

Yırtık Sayfa Algılama ve Checksum'un ne zaman SQL Server'ın bir özelliği haline geldiğini ve yeni sürümlere taşındığında veya yükseltildiklerinde nasıl davrandıklarını merak ediyordum .

Düzenleme: Bazı cevapların özetlenmesi:

Yırtık Sayfa Algılama'nın SQL Server'a geldiği bazı tarihler üzerinde küçük bir tutarsızlık vardır.
Bağlantı 1: http://support.microsoft.com/kb/230785
Bağlantı 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

İlk bağlantı SQL 7.0 ve ikinci SQL2000'i gösterir. SQL7.0 öneri benim inanç eğilimindedir ve bu bağlantı iki SQL7.0 varsayılan olarak kapalı ve SQL2000 varsayılan olarak kapalı karıştırıldı.


2
kod işlendiğinde tanıtıldı.
swasheck

Neden fark eder? Burada çözülen problem nedir?
Marian

@swasheck - Üzgünüm yorumunuzu anlamıyorum.
Paul

1
@Paul yeniden açmaya oy verdi
swasheck

1
@Paul Cevabımda bozuk sayfa veya sağlama toplamı bitlerini kontrol etmek için dbcc sayfa bilgisi ekledim.
Kin Shah

Yanıtlar:


15

SQL Server 2000'de, bozuk sayfaları tanımlamak istiyorsanız, TORN_PAGE_DETECTION veritabanı seçeneğinin TRUE olarak ayarlanması gerekir.

Ancak, SQL 2005 ve sonraki sürümlerde, eski TORN_PAGE_DETECTION ayarının yerini iki farklı sayfa doğrulama türü arasından seçim yapma olanağı veren TORN_PAGE_DETECTION ve CHECKSUM değiştirdi.

Şimdi soru hangisini ayarlamak için geliyor - TORN_PAGE_DETECTION veya CHECKSUM?

TORN_PAGE_DETECTION - bir sayfanın her 512 baytına bir sayfa yazar ve bir sayfanın diske başarıyla yazılmadığını tespit etmenizi sağlar. Yakalama, bu 512 baytta depolanan verilerin gerçekte doğru olup olmadığını size söylemeyecektir, çünkü birkaç bayt yanlış yazılmış olabilir.

CHECKSUM - üzerinde bir sağlama toplamı olduğu varsayılarak, bir sayfa yazıldığında ve bir sayfa okunduğunda sayfanın sağlama toplamını hesaplar.

SQL Server, sağlama toplamını sayfadaki bit desenine göre hesaplar, sayfa başlığında depolar ve ardından sayfayı yazmak için bir G / Ç yayınlar. SQL Server sayfayı okuduğunda, aynı mantığı kullanarak sağlama toplamını yeniden hesaplar ve ardından sayfa başlığında bulunan değerle karşılaştırır. Sağlama toplamı değeri eşleşirse, sayfanın yazma-okuma döngüsü sırasında bozulmadığı varsayılır.

Sağlama toplamı hesaplama maliyeti, her bir okuma ve yazma sayfasında gerçekleştiğinden, CPU ek yüküne eklenebilir ve muhtemelen iş yükünüzün verimini etkileyebilir. Akılda tutulması gereken başka bir şey, sağlama toplamının sayfadaki belirli bir bit deseni için benzersiz olmamasıdır. İki sayfa muhtemelen aynı sağlama toplamı değerine eşlenebilir. Bu nedenle, sayfa bozulmasının algılanamayacağı uzak bir olasılık var.

Referans: SQL2005'te sağlama toplamı

Sorularınızı özel olarak cevaplamak için:

Checksum'un SQL2005'te tanıtıldığını ve bir DB'nin önceki bir sürümden yükseltilmesinin veya geri yüklenmesinin önceki sayfa doğrulama yöntemini koruyacağına inanıyorum. yani örtük bir yükseltme yoktu.

Evet CHECKSUM SQL Server 2005'te tanıtıldı ve VARSAYILAN . 2000'den 2005'e yükselttiğinizde, CHECKSUM'u kullanmak için Sayfa Doğrulama veritabanı seçeneğini açıkça değiştirmeniz gerekir.

Sql 2005'te oluşturulmuş veritabanını sql 2005 çalıştıran başka bir sunucuya geri yüklerseniz, onu ayarlamanız gerekmez. Sayfa Doğrulama seçeneğini ayarladığınız şeye devam edecektir.

Yırtık Sayfa Algılama geldiğinde araştırma yapmayı başaramadım

Gönderen: http://support.microsoft.com/kb/230785

SQL Server'ın 7.0'dan önceki sürümleri

SQL Server'ın 7.0'dan önceki sürümleri, günlük paritesi veya yırtık bit algılama olanakları sağlamadı. Aslında, bu sürümler, günlük kayıtları 2 KB günlük sayfasını doldurana kadar aynı günlük sayfasını birden çok kez yazabilir. Bu, başarılı bir şekilde gerçekleştirilmiş işlemleri ortaya çıkarabilir. Bir hata sırasında günlük sayfası yeniden yazılıyorsa, taahhüt edilen işleme sahip bir sektör doğru şekilde yeniden yazılmayabilir.

Bu nedenle, TORN_PAGE_DETECTION SQL Server 7.0'dan beri var olmuştur. O zaman bile, varsayılan ayar etkinleştirilmemesiydi (aynı bağlantı) .

Not SQL Server 7.0'da bozuk sayfa algılama varsayılan olarak etkin değildir. Sisteminizde algılamanın nasıl etkinleştirileceğini öğrenmek için sp_dboption adresine bakın .

Bu nedenle, veritabanı 7.0 örneğine karşı geliştirilmiş ve daha sonra yükseltilmiş olsaydı, HİÇBİR'in mevcut PAGE VERIFY seçeneğiyle (cevabında @ThomasStringer'ın belirttiği gibi) yükseltilmiş olurdu.


Edit: 09/24/2013 Cevabı geliştirmek için:

SQLSkills'den SQL Server Dahili notlarıma bakıldığında, bir sayfa dökümü kullanarak, yırtılmış bit algılamanın - TORN_PAGE_DETECTION veya CHECKSUM'un etkin olup olmadığını doğrulayabildiğini buldum:

use database_name -- change here for your database !!
checkpoint
go 
dbcc traceon (3604)   -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604)  -- turn off the trace flag
go

m_tornBits : Bu, veritabanı için hangi sayfa korumasının türüne bağlı olduğuna bağlı olarak, sayfa sağlama toplamını veya yırtılmış sayfa koruma bitleri tarafından değiştirilen bitleri tutar.

Not : Çalışan herhangi bir eski sql sunucusu sürümüm yok. Aşağıda sql server 2000 ve üstü onaylanmıştır . Eğer etrafında 7,0 veya 6,5 ​​varsa, bunu da onaylayabilirsiniz :-)

resim açıklamasını buraya girin


@Kin aye SQL2000'de de olduğunu biliyorum, ilk ne zaman tanıtıldığını bilmek istiyorum. TPD'nin SQL2000'de tanıtıldığını varsayalım ve SQL7'den SQL2000'e geçmek SQL2005'ten önceki sürümler arasında hareket edecektir. Bu tür taşımalarda TPD'nin açılıp açılmadığını bilmek istiyorum. Ben tam olarak böyle olacağını doğrulamak mümkün değildi ama olamazdı.
Paul

@paul Onları sildim çünkü düzenlememin yorumları kapsadığını hissettim
swasheck

@Kin DBCC kodunuzu SQL2008R2'de denedim ve 1711843878 m_tornbits değerine sahip oldum .. Yani bir boolean yerine bir ölçü?
Paul

@Paul, sağlama toplamı veya torm sayfasının AÇIK olduğu anlamına gelir. A2005 ve üstü için, Yalnızca CHECKSUM'a gitmelisiniz. Test etmek için 7,0'ınız olup olmadığını mı merak ediyorsunuz?
Kin Shah

6

BOL referansına bir göz atın :

Bir kullanıcı veya sistem veritabanı SQL Server 2005 veya sonraki bir sürümüne yükseltildiğinde, PAGE_VERIFY değeri (NONE veya TORN_PAGE_DETECTION) korunur. CHECKSUM kullanmanızı öneririz

Bu, SQL Server 2005'ten önce seçeneğinin TORN_PAGE_DETECTIONvar olduğunu, ancak olmadığını belirtir CHECKSUM.

Ve ikinci noktanıza cevap vermek için:

... ve bir DB'nin önceki bir sürümden yükseltilmesi veya geri yüklenmesi, önceki sayfa doğrulama yöntemini koruyacaktır.

Evet doğru. CHECKSUMSayfa doğrulama yöntemini kullanmak için veritabanını açıkça ayarlamanız gerekir .


@Thomas referansı için teşekkür ederiz, ancak SQL Server'da TORN PAGE DETECTION ilk kez kullanılabilir olduğunda yanıt vermez.
Paul

2
@Paul Bu, yırtılmış sayfa algılamanın SQL Server 2005'ten önce var olduğunu cevaplar. Bu sayfa doğrulamasının hangi SQL Server sürümünün devreye girdiğini mi arıyorsunuz? Bir tarih dersinin yanı sıra, orada ne kazanmak istediğinizi de bilmiyorum. Tam olarak hangi sorunu çözmeye çalışıyorsunuz?
Thomas Stringer

Ne zaman ortaya çıktığını ve göç sırasında nasıl davrandığını bilmek istiyordum. Bazı eski DB'lerimizin bazı modern (ish, SQL2008R2) sunucularımızda yaptıkları ayarlara nasıl sahip olduklarını anlamayı umuyorum.
Paul

Veritabanlarınızda TORN_PAGE_DETECTION varsa, bu kesinlikle SQL Server 2005 öncesi bir yükseltmeye neden olabilir ve bu sayfa doğrulama seçeneği devam etti.
Thomas Stringer

TPD etkin değil, bu şaşırtıcı kısımdı. Diğer cevaplar şimdi soruna çözüm sağladı (SQL7.0'da TPD vardı, ancak varsayılan olarak etkin değil ve bu aslında karşı geliştirilen sürüm)
Paul

3

Modern SQL Server'da sayfa doğrulaması için iki farklı seçenek vardır

Belirttiğiniz gibi üç tane var: TORN_PAGE_DETECTION, CHECKSUM ve NONE.

CHECKSUM'un SQL Server 2005'te tanıtıldığını düşünüyorum

"Tampon Yönetimi" başlıklı bu MSDN makalesinde belirtildiği gibi : Yırtık sayfa algılama SQL Server 2000'de tanıtıldı. Checksum SQL Server 2005'te tanıtıldı.

Bu makalede belirtilen diğer şeylerin bir özeti, sayfa doğrulama mekanizmasının veritabanı oluşturma zamanında belirtilmesidir. Bu nedenle, veritabanını neye ve nasıl oluşturulduğuna göre nasıl oluşturduklarına bağlıdır, ayrıca hangi model veritabanının yapılandırıldığına göre kontrol edilebilir. Ayrıca, ayarı değiştirirseniz tüm veritabanını etkilemediğini, yalnızca sayfa bir sonrakine yazıldığında dikkat çekicidir. Paul Randal'a göre, sadece sayfa belleğe okunduğunda, değiştiğinde ve daha sonra diske yazıldığında yapılır; bu bilgi burada .

SQL Server 7.0 karşı geliştirilmiş ve SQL Server 2008 R2 sunucusuna taşınmış olsa da, SQL Server 2000 kullanarak üretime geçti bir üretim veritabanı var. TORN PAGE DETECTION olmasını beklememe rağmen Sayfa Doğrulama HİÇBİRİ olarak ayarlanmış.

Veritabanı örneği için izinleri olan herkes bu değeri değiştirebilir. MSDN üzerinde belirtildiği gibi yükseltmeleri yoluyla kalıcı olabilirdi burada :

Bir kullanıcı veya sistem veritabanı SQL Server 2005 veya sonraki bir sürümüne yükseltildiğinde, PAGE_VERIFY değeri (NONE veya TORN_PAGE_DETECTION) korunur

Birisi yapılandırmayı yanlış anladığı ve bir sorunu çözmek için karanlıkta çekim yaptığı için daha sonra değiştirilmiş olabilir.

TORN PAGE DETECTION'un ne zaman Sayfa Doğrulama özelliği olduğunu merak ediyordum

Yukarıda belirtildiği gibi SQL Server 2000.

yeni sürümlere geçirildiğinde veya yeni sürüme geçirildiğinde nasıl davranacağı.

Önceki ayar, yukarıda belirtildiği gibi yükseltme sırasında korunur.

Şimdi millet tarafından sağlanan diğer bağlantılar yırtık sayfa algılama kullanılabilir olduğunda SQL Server 7.0 olduğunu belirtmek istiyorum. Bu makalelerde belirtildiği gibi doğrudur, ancak Microsoft belgelerinin her durumda gerçek olarak tutulmaması gerektiği birçok kez kanıtlanmıştır. Yanlış oldukları birçok yer var. Peki bununla birlikte hangi cevabın kabul edilebilir olduğunu nasıl belirleyebilirsin? Yanıtımızı desteklemek için hepimiz Microsoft tarafından belgeler sağladık.

Yırtık sayfa algılamanın SQL Server 2012 itibariyle amortisman listesinde olduğunu unutmayın, bu yüzden başlamak için veritabanlarında nasıl ayarlandığına dair endişe nedir. CHECKSUM dışında herhangi bir şeye ayarlandığını görürsem, hemen değiştirir ve daha önemli başka bir göreve geçerim. Kötü bir yapılandırmanın nasıl yerleştirildiği konusunda hiçbir endişem yok, düzeltmek ve daha sonra değiştirmek için izinleri olanların, bu yapılandırma öğesinin neden başka bir şeyle değiştirilmemesi gerektiği konusunda bilgilendirilmesi daha önemlidir. Sadece benim 0.02 $


TPD'nin varsayılan olarak AÇIK olduğu 2000 olduğunu düşünüyorum. Diğer birçok yeni SQL Server özelliğinde olduğu gibi, varsayılan olarak devre dışı / kapalı bırakacak ve DBA'ları açmaya zorlayacaklardır. Her halükarda, kullanımdan kaldırma uyarısı için benden +1.
2013

Bu iyi bir nokta, söylediklerinizi yedekleyen iyi bir bağlantınız var. Ama başka birinin sağladığı bağlantıyı hissediyorum ( support.microsoft.com/kb/230785 ) supercedes. Ben arabellek yönetimi bölümü diğer link wholey yanlış aldığından daha yarı yanlış olduğunu düşünüyorum daha olasıdır. Bu mantıklıysa, kendimi çok iyi bir şekilde yerleştirdiğimden emin değilim!
Paul

Lisanslama gibi şeylerden biri, MS'in bu konuda açıkladığı hiçbir şey çok açık değil ...

0

Hem @Thomas Stringer hem de @Kin, SQL Server 2005'te tanıtıldığı gibi SQL Server'ın tüm sürümlerinde çalıştığına inanıyorum. TempDB için CHECKSUM SQL Server 2008'de tanıtıldı

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx


Teşekkürler @ DanSQL, ancak henüz kimse tam olarak soruyu cevaplamadı. yani TORN PAGE DETECTION ne zaman tanıtıldı ve yükseltme / taşıma işlemleri sırasında nasıl davrandı.
Paul

Ben tarihçiler bulmak için bırakacaktır :-) Yükseltme / taşıma gelince el ile her doğrulama veri tabanına onayla seçeneği doğrulamak sürece hiçbir şey olmayacak. O zaman bile mevcut sayfalarda sağlama toplamı olmaz. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL

@DaniSQL teşekkürler, bu yüzden çalışmak için SQL2005 ve üzeri geçişleri anlamak. Daha önceki sürümlerin de bu davranışı sürdürdüğünden emin olmak istedim
Paul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.