Cadangan Log Transaksi Serial atau Paralel?

15

Kami kebetulan menggunakan SQL Server 2012 Edisi Standar. Saya juga menggunakan skrip Ola Hallengren untuk memberikan kerangka kerja yang mudah dan lebih fleksibel untuk melakukan pencadangan dan pemeliharaan.

Pertanyaan ini bukan tentang skrip Ola, melainkan tentang praktik terbaik. Saya menyadari jawaban utamanya adalah "itu tergantung pada kebutuhan perusahaan Anda". Tetapi saya berusaha mencari saran masyarakat tentang cara terbaik untuk memenuhi apa yang saya pahami tentang persyaratan perusahaan kami.

Saya ingin mengatur backup log transaksi untuk setiap 15 menit. Dengan cara ini kami semoga kehilangan tidak lebih dari 15 menit data. Haruskah saya menyiapkan satu pekerjaan yang menggunakan ALL_DATABASES? atau lebih baik mengatur satu pekerjaan untuk setiap basis data dan menendang semuanya secara paralel? Saya bertanya, karena saya memiliki perasaan berdasarkan pada bagaimana saya melihat skrip Ola berfungsi bahwa cadangan dimunculkan secara serial. Kelemahan dari serial adalah bahwa setiap cadangan berturut-turut menunggu sampai yang lain selesai. Ini berpotensi meningkatkan jumlah waktu antara cadangan (yaitu, lebih dari 15 menit). Ditambah kekhawatiran saya adalah bahwa kegagalan dalam satu cadangan menghentikan yang lain terjadi, dan saya tidak ingin hal itu terjadi. Saya ingin yang lain terus mendukung.

Jadi apakah benar bahwa skrip Ola dieksekusi secara serial dan juga kegagalan menghentikan cadangan yang berurutan?

Dan apakah lebih baik memiliki pekerjaan untuk setiap basis data? atau satu pekerjaan yang melakukan semuanya? Kecenderungan saya adalah pada pekerjaan yang terpisah, tetapi saya ingin memahami apa yang cenderung dilakukan oleh SQL Server DBA.

Chris Aldrich
sumber
1
Saya condong ke suatu pekerjaan per database karena lebih mudah dikelola dengan cara itu, tapi kemudian saya seorang "orang gila kontrol", atau begitulah yang saya katakan ... Mungkin Anda memiliki satu database yang dapat bertahan selama 15 menit kehilangan data, tetapi lain yang hanya dapat memiliki 5 menit, hanya untuk pemula.
Max Vernon
1
Skenario kasus terburuk Anda (kecuali korupsi file cadangan) adalah jika server mogok di tengah-tengah pekerjaan tlog yang sedang berjalan. ini membuat Anda dapat memulihkan hingga cadangan log sebelumnya. Jika serial, db pertama yang dicadangkan akan memiliki kehilangan data 15 menit, setiap cadangan log berikutnya akan memiliki 15 menit - total waktu dari setiap kehilangan data cadangan sebelumnya. Memisahkan pekerjaan akan memungkinkan Anda untuk memiliki RPO yang berbeda per basis data (mis. Beberapa basis data akan baik-baik saja jika kehilangan data 1 jam)
Bob Klimes
@ MaxVernon - mungkin. Tetapi beberapa pertanyaan berdasarkan opini valid. Saya mencoba untuk mengajukan pertanyaan yang masuk akal untuk ditanyakan, daripada hanya memulai perang api. Ditambah lagi, saya cenderung menjadi DBA Kecelakaan / Junior di semua pekerjaan saya. DB2 pertama dan sekarang SQL Server. Jadi saya tidak punya senior untuk belajar. Satu-satunya sumber saya adalah komunitas. Jadi saya pikir pertanyaan seperti ini adil. Itu memungkinkan saya dan junior / kecelakaan lainnya untuk belajar darinya.
Chris Aldrich
Mungkin hanya mengambil cadangan log setiap 10 menit sehingga penundaan yang sebenarnya tidak pernah lebih dari 15 menit?
usr

Jawaban:

6

Haruskah saya menyiapkan satu pekerjaan yang menggunakan ALL_DATABASES? atau lebih baik mengatur satu pekerjaan untuk setiap basis data dan menendang semuanya secara paralel?

Saya akan menyarankan untuk mengatur satu pekerjaan yang akan membuat cadangan log transaksi (serial). Ini juga akan memastikan bahwa cadangan tidak banyak memanfaatkan I / O karena Anda menjalankan cadangan untuk basis data satu per satu.

Apa yang bisa menjadi kelemahan dengan menjalankan secara paralel

  1. Misalkan Anda memiliki 50 basis data dan Anda menjadwalkan pencadangan log transaksi dari semua basis data dan semuanya mulai berjalan secara paralel, ini pasti akan memanfaatkan banyak I / O. Dan jika disk di mana itu membuat cadangan file memiliki file data lain, Anda akan melihat kelambatan. Saya telah melihat cadangan menjadi lambat ketika permintaan yang buruk meminta banyak I / O berjalan bersama dengan pekerjaan cadangan.

  2. Sekali lagi Andaikan Anda memiliki 50 database, bukankah akan sulit untuk mengelola 50 pekerjaan dalam agen SQL Server dan bagaimana kondisi Anda jika Anda memiliki 100-200 basis data. Saya tidak akan suka bila Anda membuka agen SQL Server dan melihat banyak pekerjaan, tetap sederhana. Saya yakin kasus yang sama akan terjadi pada Anda.

Kelemahan dari serial adalah bahwa setiap cadangan berturut-turut menunggu sampai yang lain selesai. Ini berpotensi meningkatkan jumlah waktu antara cadangan (yaitu, lebih dari 15 menit).

Cadangan log transaksi sebagian besar kecil dan jika Anda memiliki database sibuk yang menghasilkan banyak catatan log, Anda mungkin perlu mengubah frekuensi cadangan. Sebagian besar saya telah melihat cadangan transaksi log baik-baik saja ketika frekuensi adalah 15 menit. Saya tidak berpikir seharusnya menjadi masalah bagi Anda.

Ditambah kekhawatiran saya adalah bahwa kegagalan dalam satu cadangan menghentikan yang lain terjadi, dan saya tidak ingin hal itu terjadi

Saya akan mengatakan, jangan khawatir tentang hal itu. Pencadangan log transaksi tidak dapat gagal kecuali Anda melakukan kesalahan. Kesalahannya bisa saja

  1. Pemilik yang menjalankan pekerjaan dihapus dari AD

  2. Seseorang mengubah model pemulihan basis data.

  3. Ruang disk tidak mencukupi

Terlepas dari di atas saya belum melihat alasan untuk cadangan log transaksi gagal. Sangat kuat, Anda bisa mengandalkannya.

Shanky
sumber
6

Secara umum, selalu jalankan cadangan T-log Anda secara serial; banyak contoh saya memiliki beberapa lusin basis data, dan beberapa yang sangat aktif, dan pencadangan log transaksi hanya membutuhkan total beberapa detik; hingga setengah menit ketika itu sangat sibuk.

Menjalankan cadangan secara paralel hanya benar-benar akan bermanfaat jika semua kondisi berikut ini benar:

  • Database dan file log Anda semuanya pada spindel independen unik (atau berada di disk solid state dalam kombinasi apa pun)

    • Untuk cadangan T-log saja, hanya file log yang harus memenuhi persyaratan ini.
  • Target cadangan Anda untuk setiap basis data berada pada spindle terpisah.

  • Anda tidak menggunakan SAN HBA atau iSCSI atau bandwidth lain yang dibagikan antara contoh SQL Server dan media.

  • yaitu IOPS dari membaca Database A dan menulis Backup A JANGAN menggunakan disk yang sama seperti membaca Database B dan menulis Backup B.

Jika semua ini benar, maka mungkin beberapa derajat paralelisme akan mengurangi jumlah total waktu kalender. Jika semua ini tidak benar, kemungkinan besar Anda akan menyebabkan satu atau lebih set disk memecah, dan cadangan paralel Anda sebenarnya akan membutuhkan lebih banyak waktu kalender daripada serial, tetapi juga dapat menyebabkan sistem file OS atau fragmentasi tingkat penyimpanan, karena Anda sedang menulis Cadangan A dan C Backup pada saat yang sama!

Jangan khawatir tentang satu cadangan gagal dan sisanya berhasil - jika ada yang gagal, Anda harus memeriksa semuanya, dan satu-satunya saat saya melihat cadangan gagal adalah karena:

  • Kerusakan disk

  • Kegagalan perangkat lunak kompresi kompresi Hyperbac / Litespeed / pihak ketiga (jika Anda memiliki perangkat lunak antara SQL dan disk yang gagal)

    • Sebagai peringatan, kegagalan mungkin mengambil bentuk pekerjaan cadangan yang tidak pernah selesai, jadi memeriksa "pekerjaan yang berjalan lebih lama dari yang diharapkan" yang mengirimkan peringatan sangat berharga.
  • Kegagalan produk enkripsi (jika Anda memiliki perangkat lunak antara SQL dan disk yang gagal)

  • Kegagalan jaringan (jika file database, atau lebih mungkin file cadangan, ada di jaringan)

  • Izin

    • paling umum dengan pemasangan baru

    • atau lokasi cadangan baru

    • mengubah pengguna Layanan SQL Server (yang membutuhkan izin untuk pencadangan normal)

    • mengunci pengguna layanan SQL Server karena digunakan oleh lebih dari satu contoh SQL Server

  • Kesalahan konfigurasi

  • Masalah listrik

  • OS crash

Sebagian besar tidak akan memengaruhi satu dan bukan yang lain kecuali jika persyaratan di atas terpenuhi.

Kata sandi yang lemah
sumber
2

Sebagai tambahan, Ola mendesain skripnya di mana jika satu cadangan basis data gagal cadangan untuk alasan apa pun, yang berikutnya dicoba. Seperti yang dinyatakan sebelumnya, Anda bisa mengatur peringatan untuk memberi tahu Anda tentang kegagalan pekerjaan karena pekerjaan cadangan masih akan gagal, bahkan jika hanya satu cadangan basis data yang gagal dari semua basis data pengguna - dengan asumsi Anda mencadangkan semua basis data (satu pekerjaan untuk semua).

rvsc48
sumber