Kapan Torn Page Detection dan Checksum diperkenalkan ke SQL Server dan apa saja perilaku upgrade?

15

Ada dua opsi berbeda dalam SQL Server modern untuk verifikasi halaman; menjadi Torn Page Detection dan Checksum . Tidak ada juga tentu saja pilihan.

Saya percaya Checksum diperkenalkan di SQL Server 2005 dan bahwa memutakhirkan atau mengembalikan DB dari versi sebelumnya akan mempertahankan metode verifikasi halaman sebelumnya. yaitu tidak ada peningkatan implisit.

Masalahnya adalah kita memiliki database produksi yang mulai diproduksi menggunakan SQL Server 2000 dan sejak itu pindah ke server SQL Server 2008 R2. Verifikasi Halaman diatur ke Tidak Ada ketika saya mengharapkan itu menjadi Deteksi Halaman Torn . Kembali ke jumlah waktu ini kita tampaknya berpikir bahwa DB pada awalnya dikembangkan dalam SQL Server 7.0 kemudian bermigrasi ke SQL Server 2000 dan ini dapat menjelaskan hasil yang diamati.

Saya bertanya-tanya kapan Torn Page Detection dan Checksum menjadi fitur dari SQL Server, dan bagaimana mereka berperilaku ketika dimigrasi atau ditingkatkan ke versi yang lebih baru.

Sunting: Ringkas beberapa jawaban:

Ada sedikit perbedaan pada beberapa tanggal ketika Torn Page Detection masuk ke SQL Server.
Tautan 1: http://support.microsoft.com/kb/230785
Tautan 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

Tautan pertama menunjukkan SQL 7.0 dan SQL2000 kedua. Saya cenderung menaruh kepercayaan saya pada saran SQL7.0 dan tautan dua bingung karena dinonaktifkan secara default di SQL7.0 dan aktif secara default di SQL2000.

Paul
sumber
2
itu diperkenalkan ketika kode itu dilakukan.
swasheck
Mengapa itu penting? Apa masalah yang dipecahkan di sini?
Marian
@swasheck - maaf saya tidak mengerti komentar Anda.
Paul
1
@ Paul memilih untuk membuka kembali
swasheck
1
@ Paul Saya telah menambahkan info halaman dbcc untuk memeriksa halaman yang robek atau bit checksum dalam jawaban saya.
Kin Shah

Jawaban:

15

Di SQL Server 2000, jika Anda ingin mengidentifikasi halaman yang rusak, maka opsi database TORN_PAGE_DETECTION harus disetel ke TRUE.

Tetapi dalam SQL 2005 dan lebih baru, PAGE_VERIFY pengaturan baru menggantikan TORN_PAGE_DETECTION lama yang memungkinkan untuk memilih dari dua jenis verifikasi halaman yang berbeda: TORN_PAGE_DETECTION dan CHECKSUM.

Sekarang muncul pertanyaan yang mana yang harus diatur - TORN_PAGE_DETECTION atau CHECKSUM?

TORN_PAGE_DETECTION - menulis sedikit untuk setiap 512 byte di halaman yang memungkinkan Anda mendeteksi kapan halaman tidak berhasil ditulis ke disk. Tangkapannya adalah ia tidak akan memberi tahu Anda apakah data yang disimpan dalam 512 bye itu benar atau tidak karena fakta bahwa beberapa byte mungkin telah ditulis secara tidak benar.

CHECKSUM - akan mengkalibrasi sebuah checksum dari halaman baik ketika sebuah halaman ditulis maupun ketika sebuah halaman dibaca, dengan asumsi ia memiliki checksum di atasnya.

SQL Server menghitung checksum berdasarkan pola bit pada halaman, menyimpannya di header halaman dan kemudian mengeluarkan I / O untuk menulis halaman. Ketika SQL Server membaca halaman, itu kembali menghitung checksum menggunakan logika yang sama dan kemudian membandingkannya dengan nilai yang tersedia di header halaman. Jika nilai checksum cocok maka diasumsikan halaman tidak rusak selama siklus baca-baca.

Karena biaya komputasi checksum dikeluarkan pada setiap halaman baca dan tulis, itu dapat menambah overhead CPU dan mungkin dapat mempengaruhi throughput beban kerja Anda. Hal lain yang perlu diingat adalah bahwa checksum tidak unik untuk pola bit tertentu pada halaman. Dua halaman mungkin bisa dipetakan ke nilai checksum yang sama. Jadi ada kemungkinan kecil bahwa korupsi halaman dapat tidak terdeteksi.

Referensi: Checksum dalam SQL2005

Untuk secara khusus menjawab pertanyaan Anda:

Saya percaya Checksum diperkenalkan di SQL2005 dan bahwa memutakhirkan atau mengembalikan DB dari versi sebelumnya akan mempertahankan metode verifikasi halaman sebelumnya. yaitu tidak ada peningkatan implisit.

Ya CHECKSUM diperkenalkan di SQL Server 2005 dan merupakan DEFAULT . Ketika Anda meningkatkan dari 2000 ke 2005, Anda harus secara eksplisit mengubah opsi database Page Verify untuk menggunakan CHECKSUM.

Jika Anda mengembalikan database yang sudah dibuat pada sql 2005 ke server lain yang menjalankan sql 2005, Anda tidak perlu mengaturnya. Ini akan bertahan pada apa yang telah Anda atur opsi Verifikasi Halaman.

Saya belum berhasil meneliti ketika Deteksi Halaman Torn masuk

Dari: http://support.microsoft.com/kb/230785

Versi SQL Server lebih awal dari 7.0

Versi SQL Server lebih awal dari 7.0 tidak menyediakan fasilitas deteksi paritas log atau robekan bit. Faktanya, versi-versi itu dapat menulis halaman log yang sama beberapa kali sampai catatan log mengisi halaman log 2-KB. Ini dapat mengekspos transaksi yang telah berhasil dilakukan. Jika halaman log sedang ditulis ulang selama kegagalan, sektor dengan transaksi yang dilakukan mungkin tidak dapat ditulis ulang dengan benar.

Dengan demikian, TORN_PAGE_DETECTION telah ada sejak SQL Server 7.0. Bahkan kemudian, standarnya adalah tidak diaktifkan (tautan yang sama) .

Catatan Deteksi halaman sobek tidak diaktifkan secara default di SQL Server 7.0. Lihat sp_dboption untuk cara mengaktifkan deteksi pada sistem Anda.

Oleh karena itu, jika database dikembangkan terhadap instance 7.0 dan kemudian ditingkatkan, itu akan meningkatkannya dengan opsi PAGE VERIFY NONE yang masih ada (seperti yang dicatat oleh @ThomasStringer dalam jawabannya).


Sunting: 09/24/2013 Untuk meningkatkan jawabannya:

Mengacu pada catatan internal SQL Server SQL saya dari SQLSkills, saya menemukan bahwa menggunakan dump halaman, Anda dapat memverifikasi apakah deteksi bit robek - TORN_PAGE_DETECTION atau CHECKSUM diaktifkan atau tidak:

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 : Ini menampung checksum halaman atau bit yang dipindahkan oleh bit perlindungan halaman robek - tergantung pada apa bentuk perlindungan halaman dihidupkan untuk database.

Catatan : Saya tidak memiliki versi server sql lama yang berjalan. Di bawah ini dikonfirmasi dari sql server 2000 dan lebih tinggi . Jika Anda memiliki 7.0 atau 6.5 berlarian, Anda dapat mengkonfirmasinya juga :-)

masukkan deskripsi gambar di sini

Kin Shah
sumber
@ Kin aye Saya tahu itu ada di SQL2000 juga, ingin tahu kapan pertama kali diperkenalkan. dengan frase "pindah ke versi sebelum" mari kita berpura-pura TPD diperkenalkan di SQL2000 lalu pindah dari SQL7 ke SQL2000 akan berpindah antar versi sebelum SQL2005. Saya tertarik untuk mengetahui apakah TPD diaktifkan selama migrasi tersebut. Saya sepenuhnya berharap itu tidak akan tetapi belum dapat memverifikasi seperti itu.
Paul
@ paul saya menghapusnya karena saya merasa bahwa edit saya mencakup komentar
swasheck
@Kin Saya mencoba kode DBCC Anda pada SQL2008R2 dan mendapat nilai m_tornbits dari 1711843878 .. jadi ini ukuran daripada boolean menurut Anda?
Paul
@ Paul itu berarti bahwa halaman checksum atau siksaan HIDUP. Pada a2005 ke atas, Anda harus menggunakan CHECKSUM Saja. Ingin tahu apakah Anda memiliki 7,0 berbaring untuk menguji?
Kin Shah
6

Lihatlah referensi dari BOL :

Ketika pengguna atau database sistem ditingkatkan ke SQL Server 2005 atau versi yang lebih baru, nilai PAGE_VERIFY (NONE atau TORN_PAGE_DETECTION) dipertahankan. Kami menyarankan Anda menggunakan CHECKSUM

Ini menentukan bahwa sebelum SQL Server 2005 opsi untuk TORN_PAGE_DETECTIONada, tetapi tidak CHECKSUM.

Dan untuk menjawab poin kedua Anda:

... dan bahwa memutakhirkan atau mengembalikan DB dari versi sebelumnya akan mempertahankan metode verifikasi halaman sebelumnya.

Ya itu benar. Anda perlu mengatur database secara eksplisit untuk menggunakan CHECKSUMmetode verifikasi halaman.

Thomas Stringer
sumber
Terima kasih untuk referensi @ Thomas tetapi itu tidak menjawab ketika TORN PAGE DETECTION pertama kali tersedia di SQL Server.
Paul
2
@ Paul Ini menjawab bahwa deteksi halaman sobek ada sebelum SQL Server 2005. Apakah Anda mencari versi SQL Server yang digunakan untuk verifikasi halaman? Selain pelajaran sejarah, saya tidak yakin apa yang ingin Anda dapatkan di sana. Masalah apa sebenarnya yang Anda coba selesaikan?
Thomas Stringer
Saya mencari tahu kapan itu muncul dan bagaimana perilakunya selama migrasi. Saya berharap untuk memahami bagaimana beberapa DB kami yang sangat lama memiliki pengaturan yang mereka lakukan pada beberapa server modern (ish, SQL2008R2) kami.
Paul
Jika database Anda memiliki TORN_PAGE_DETECTION, maka itu pasti bisa menghasilkan pemutakhiran dari pra-SQL Server 2005 dan opsi verifikasi halaman tersebut tetap ada.
Thomas Stringer
mereka tidak mengaktifkan TPD, itu adalah bagian yang membingungkan. Jawaban lain telah memberikan solusi untuk masalah ini sekarang (SQL7.0 memiliki TPD, tetapi tidak diaktifkan secara default dan ini adalah versi yang awalnya dikembangkan terhadap)
Paul
3

Ada dua opsi berbeda di SQL Server modern untuk verifikasi halaman

Ada tiga seperti yang Anda nyatakan: TORN_PAGE_DETECTION, CHECKSUM, dan NONE.

Saya percaya CHECKSUM diperkenalkan di SQL Server 2005

Seperti dikutip dari ini artikel MSDN berjudul "Buffer Management": deteksi halaman Robek diperkenalkan pada SQL Server 2000. Checksum diperkenalkan pada SQL Server 2005.

Sinopsis hal-hal lain yang dicatat dalam artikel ini adalah bahwa mekanisme verifikasi halaman ditentukan pada waktu pembuatan basis data. Jadi itu tergantung pada siapa dan bagaimana mereka membuat database untuk apa itu diatur, juga bisa dikontrol oleh model database yang dikonfigurasi. Juga menarik untuk dicatat adalah bahwa jika Anda mengubah pengaturan itu tidak mempengaruhi seluruh database, hanya ketika halaman ditulis ke berikutnya. Juga menurut Paul Randal itu hanya dilakukan ketika halaman dibaca ke dalam memori, diubah, dan kemudian ditulis kembali ke disk; info itu ada di sini .

Saya memiliki basis data produksi yang masuk ke produksi menggunakan SQL Server 2000, meskipun mungkin telah dikembangkan terhadap SQL Server 7.0, dan sejak itu pindah ke server SQL Server 2008 R2. Verifikasi Halaman disetel ke NONE meskipun saya perkirakan itu DETEKSI HALAMAN TORN.

Siapa pun yang memiliki izin ke instance database dapat mengubah nilai itu. Itu bisa bertahan melalui peningkatan seperti yang dinyatakan pada MSDN di sini :

Ketika pengguna atau basis data sistem ditingkatkan ke SQL Server 2005 atau versi yang lebih baru, nilai PAGE_VERIFY (NONE atau TORN_PAGE_DETECTION) dipertahankan

Bisa juga dimodifikasi di lain waktu karena seseorang salah mengerti konfigurasi dan menembak dalam gelap untuk mencoba dan memecahkan masalah.

Saya bertanya-tanya kapan DETEKSI HALAMAN TORN menjadi fitur Verifikasi Halaman

SQL Server 2000 seperti yang dinyatakan di atas.

bagaimana perilakunya ketika dimigrasikan atau ditingkatkan ke edisi yang lebih baru.

Pengaturan sebelumnya dipertahankan selama peningkatan seperti yang disebutkan di atas.

Sekarang saya ingin menunjukkan fakta bahwa tautan lain yang disediakan oleh orang-orang menyatakan bahwa SQL Server 7.0 adalah ketika deteksi halaman sobek tersedia. Yang sebagaimana dinyatakan dalam artikel-artikel itu benar, namun terbukti berkali-kali bahwa dokumentasi Microsoft tidak boleh dianggap sebagai kebenaran dalam segala keadaan. Ada banyak kesalahan. Maka dengan itu dikatakan bagaimana Anda bisa menentukan jawaban mana yang bisa diterima? Kami semua menyediakan dokumentasi oleh Microsoft untuk mendukung jawaban kami.

Juga catat bahwa deteksi halaman sobek ada di daftar penyusutan pada SQL Server 2012, jadi apa masalahnya dengan bagaimana hal itu diatur pada database Anda untuk memulai. Jika saya melihatnya diatur selain CHECKSUM, saya segera mengubahnya dan beralih ke tugas lain yang lebih penting. Saya tidak khawatir tentang bagaimana konfigurasi yang buruk dilakukan, lebih penting untuk memperbaikinya dan kemudian memastikan mereka yang memiliki izin untuk mengubahnya diberitahu tentang mengapa item konfigurasi itu tidak boleh diubah ke hal lain. Hanya $ 0,02 saya


sumber
Saya pikir 2000 adalah ketika TPD default ke ON. Seperti banyak fitur SQL Server baru lainnya, mereka akan melepaskannya dinonaktifkan / dinonaktifkan secara default dan memaksa DBA untuk menyalakannya. Bagaimanapun, +1 dari saya untuk peringatan penghentian.
swasheck
Ini poin yang bagus, Anda memiliki tautan bagus yang sepertinya mendukung apa yang Anda katakan. Tapi saya merasa tautan yang diberikan orang lain ( support.microsoft.com/kb/230785 ) menggantikannya. Saya lebih cenderung berpikir bahwa bagian manajemen buffer salah setengahnya daripada tautan lain salah mengerti. Jika itu masuk akal, tidak sepenuhnya yakin saya menempatkan diri saya dengan sangat baik!
Paul
Itu salah satu hal seperti lisensi, tidak ada yang MS
0

Seperti @Thomas Stringer dan @Kin mengatakan itu diperkenalkan dalam SQL Server 2005 dan saya percaya ini bekerja di semua edisi SQL Server. Untuk TempDB meskipun CHECKSUM diperkenalkan di SQL Server 2008

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

DaniSQL
sumber
Terima kasih @DaniSQL, namun belum ada yang menjawab pertanyaan secara penuh. yaitu kapan DETEKSI HALAMAN TORNYA diperkenalkan dan bagaimana perilakunya selama peningkatan / migrasi.
Paul
Saya akan membiarkan hal itu bagi sejarawan untuk mencari tahu :-) Adapun untuk upgrade / migrasi tidak akan terjadi kecuali Anda mengubah opsi verifikasi halaman secara manual ke CHECKSUM di setiap database. Bahkan kemudian halaman yang sudah ada tidak akan memiliki checksum. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/...
DaniSQL
terima kasih @DaniSQL, begitulah cara saya memahami migrasi ke SQL2005 ke atas untuk bekerja. Saya hanya ingin memastikan versi sebelumnya juga mempertahankan perilaku ini
Paul