Untuk MySQL saya tahu database didukung tabel demi tabel dalam Pernyataan SQL, ini menghasilkan penguncian dan jika Anda memperbarui kolom saat membuat cadangan Anda mungkin berakhir dengan masalah integritas.
Untuk pemahaman saya ini tidak berlaku untuk Microsoft SQL Server, tetapi bagaimana SQL Server menangani ini? Apakah ada pembekuan internal agar db konsisten?
Saya juga mendengar bahwa pencadangan adalah satu utas yang berarti hanya menggunakan satu inti, dengan asumsi Anda membuat cadangan ke satu file. Juga dengan asumsi Anda memiliki mesin multicore, misalnya 16 core, atau setidaknya jumlah yang lebih besar dari satu.
Dari pengalaman pribadi saya, saya tidak pernah memiliki masalah saat mengambil cadangan, tidak mengunci atau masalah overhead, tetapi pengalaman saya terbatas. Itu sebabnya saya selalu merekomendasikan untuk mengaktifkan kompresi cadangan di properti server.
Jadi apa yang terjadi ketika pekerjaan cadangan sedang berjalan? Dan apakah ada perbedaan signifikan untuk versi yang berbeda? misalnya 2008, 2012 dan 2014 (bukan lisensi).
sumber
Jawaban:
Semua poin Anda tercakup dalam mitos cadangan - oleh Paul Randal
30-01) operasi cadangan menyebabkan pemblokiran
Tidak. Operasi pencadangan tidak mengambil kunci pada objek pengguna . Cadangan memang menyebabkan beban baca yang sangat berat pada subsistem I / O sehingga mungkin tampak seperti beban kerja sedang diblokir, tetapi sebenarnya tidak. Itu hanya diperlambat. Ada kasus khusus di mana cadangan yang harus mengambil luasan yang dicatat secara massal akan mengambil kunci file yang dapat memblokir operasi pos pemeriksaan - tetapi DML tidak pernah diblokir.
Pencadangan bila dilakukan untuk satu file atau perangkat akan menggunakan 1 utas penulis. Jadi, jika Anda mencadangkan ke Beberapa file / perangkat (selain itu beberapa file .bak) akan memiliki satu utas penulis per file / perangkat.
Memeriksa
sumber
Artikel yang ditulis oleh Paul mengenai internal backup sangat bagus dan Anda harus membacanya. Menambah apa yang orang lain katakan dan tekankan pada bagian spesifik dari pertanyaan Anda
Operasi pencadangan
can use parallelism
tetapi ingat ini Bukan paralelisme yang didorong oleh Pengoptimal dalam SQL Server, didorong oleh jumlah disk yang terlibat dari mana cadangan harus membaca file data dan di mana cadangan menulis file data dan jumlah file cadangan yang dibuat.Anda tidak dapat menggunakan
MAXDOP
petunjuk saat mengambil cadangan SQL ServerAnda tidak dapat membuat rencana eksekusi di SSMS untuk operasi pencadangan TSQL sederhana.
Paralelisme yang didorong oleh pengoptimal permintaan dalam SQL Server pada dasarnya adalah untuk operator yang terlibat (sebenarnya ini lebih kompleks tetapi demi kesederhanaan Anda dapat mengambil ini) karena operasi cadangan tidak melibatkan operator apa pun karena itu tidak dapat menggunakan paralelisme yang didorong oleh pengoptimal.
Saya menulis sebuah artikel di Technet Wiki tentang Pencadangan dan paralelisme di mana saya menggunakan contoh sederhana untuk menjelaskan paralelisme selama pencadangan SQL Server. Berikut ini adalah kesimpulannya
Jika file basis data ada di beberapa disk, operasi pencadangan akan dimulai pada utas per drive perangkat untuk membaca data. Dengan cara yang sama jika pemulihan dilakukan pada beberapa drive / titik pemasangan operasi cadangan akan memulai satu utas per titik drive / pemasangan
Bahkan jika Anda membuang banyak salinan cadangan pada drive yang sama, kami akan mencabut satu utas per file cadangan.
Paralelisme yang terkait dengan cadangan terkait dengan garis-garis. Setiap strip mendapatkan utas pekerjanya sendiri dan itu benar-benar satu-satunya bagian cadangan / pemulihan yang harus dipertimbangkan sebagai operasi paralel.
Tingkat paralelisme maks tidak memengaruhi operasi cadangan.
Saya mendapat pendapat ahli tentang hal ini dari Paul dan Bob Dorr.
Saya sarankan Anda untuk membaca artikel blog.msdn ini oleh Bob Dorr. Beberapa poin penting yang ia tekankan adalah
Saat pencadangan dimulai, ia menciptakan serangkaian buffer, dialokasikan dari memori di luar kumpulan buffer. Target biasanya 4MB untuk setiap buffer menghasilkan sekitar 4 hingga 8 buffer. Rincian tentang perhitungan ada di: http://support.microsoft.com/kb/904804/en-us
Buffer ditransisikan antara antrian bebas dan data. Pembaca menarik buffer gratis, mengisinya dengan data dan menempatkannya pada antrian data. Penulis menarik buffer data yang terisi dari antrian data, memproses buffer dan mengembalikannya ke daftar gratis.
Anda mendapatkan penulis per perangkat cadangan, masing-masing mengambil dari antrian data. Jadi perintah cadangan dengan empat (4) spesifikasi disk akan memiliki empat penulis dan satu pembaca. Pembaca menggunakan async I / O sehingga dapat mengimbangi penulis.
Anda dapat mengaktifkan
trace flags 3213 and 3605
, keduanya tidak berdokumen jadi silakan gunakan di lingkungan pengujian, dan lihat pesan menarik apa yang dibuang di SQL Server errorlog. Sesuatu seperti di bawah ini akan munculSaya tidak mengetahui adanya perubahan signifikan dalam kode cadangan untuk berbagai versi, hal-hal seperti itu tidak didokumentasikan. Saya hanya tahu tentang peningkatan yang diperkenalkan pada
SQL Server 2012 SP1 Cumulative Update 2,
cadangan dan pemulihan yang diaktifkan dari layanan penyimpanan Windows Azure Blob dari SQL Server menggunakan TSQL atau SMO. Baca di sinisumber
Pada dasarnya, SQL Server melakukan salinan kotor dari semua halaman pada disk. Halaman-halaman itu kemungkinan tidak konsisten jika ada aktivitas bersamaan atau jika sebelumnya ada cara non-checkpointed.
Kemudian, SQL Server juga menyalin bagian yang diperlukan dari log transaksi yang diperlukan untuk membawa halaman kedaluwarsa ke versi terbaru dan membuat semuanya konsisten pada pemulihan.
Saya tidak dapat berbicara dengan multi-utas operasi pencadangan. Saya berharap itu bisa diparalelkan. Bagaimana lagi Anda bisa membuat cadangan basis data 10TB pada subsistem IO 10GB / detik?
sumber