Definisi masalah
Pengguna kami membutuhkan kemampuan untuk meminta basis data yang sebagian besar mutakhir. Data dapat basi hingga 24 jam dan itu dapat diterima. Apa yang akan menjadi pendekatan biaya terendah untuk mendapatkan dan menjaga basis data kedua dengan salinan produksi? Apakah ada pendekatan yang tidak saya pikirkan?
Beban kerja
Kami memiliki aplikasi pihak ketiga yang kami gunakan untuk memantau aktivitas perdagangan saham. Pada siang hari, banyak perubahan kecil terjadi sebagai bagian dari berbagai aliran pekerjaan (ya, perdagangan ini valid. Tidak, ini mencurigakan, dll). Pada malam hari, kami melakukan operasi berbasis set yang besar (memuat perdagangan hari sebelumnya).
Solusi dan masalah saat ini
Kami menggunakan snapshot basis data . Pukul 10 malam kami turun dan membuat ulang snapshot. Pemrosesan ETL kemudian dimulai. Ini jelas membebani disk kami, tetapi memungkinkan pengguna kami kemampuan untuk query database tanpa mengunci database (mereka menggunakan ujung depan Access). Mereka menggunakannya larut malam dan dini hari sehingga mereka akan melihat waktu henti.
Masalah dengan pendekatan ini adalah dua kali lipat. Yang pertama adalah bahwa jika pemrosesan malam gagal, dan itu tidak terlalu jarang, kami bisa mengembalikan database yang mengakibatkan snapshot dijatuhkan. Masalah lainnya adalah waktu pemrosesan kami melewati SLA kami. Kami berusaha mengatasi ini dengan bekerja sama dengan vendor setelah mengidentifikasi pertanyaan yang ditulis dengan buruk dan kurangnya pengindeksan. Database snapshot juga merupakan penyebab pelambatan ini sebagaimana dibuktikan oleh perbedaan kecepatan ketika hadir versus tidak --- mengejutkan, saya tahu.
Pendekatan dipertimbangkan
Clustering
Kami memiliki pengelompokan basis data yang dihidupkan tetapi itu tidak menjawab kebutuhan membuat data tersedia dan hanya secara umum mempersulit kehidupan admin. Sejak itu dimatikan.
Replikasi SQL Server
Kami mulai melihat replikasi minggu lalu. Teori kami adalah bahwa kami dapat membuat katalog kedua berdiri dan disinkronkan dengan basis data produksi. Sebelum memulai ETL, kami akan memutuskan koneksi dan hanya mengaktifkannya kembali setelah proses ETL selesai.
Admin memulai dengan Replikasi Snapshot tetapi dia khawatir perlu beberapa hari penggunaan CPU yang tinggi untuk menghasilkan snapshot serta konsumsi disk yang diperlukan. Dia menunjukkan bahwa tampaknya untuk menulis semua data ke file fisik sebelum dikirim ke pelanggan sehingga basis data .6TB kami akan menelan biaya 1,8TB dalam biaya penyimpanan. Juga, jika perlu beberapa hari untuk menghasilkan snap, maka itu tidak akan cocok dengan SLA yang diinginkan.
Setelah membaca artikel yang bagus, sepertinya Snapshot mungkin merupakan cara untuk menginisialisasi pelanggan tetapi kemudian kami ingin beralih ke Replikasi Transaksional agar tetap sinkron setelah itu. Saya berasumsi bahwa menghidupkan / mematikan replikasi transaksional tidak akan memaksa reinisialisasi penuh? Kalau tidak, kita akan merusak jendela waktu kita
Mirroring Basis Data
Basis data kami berada dalam mode pemulihan LENGKAP sehingga mirroring basis data adalah pilihan, tetapi saya tahu lebih sedikit tentang hal itu daripada Replikasi. Saya memang menemukan jawaban SO yang mengindikasikan "Pencerminan basis data mencegah data diakses secara langsung, data pencerminan hanya dapat diakses melalui snapshot basis data."
Pengiriman Log
Kedengarannya seperti pengiriman log mungkin juga menjadi pilihan tetapi ini adalah hal lain yang tidak saya ketahui. Apakah ini akan menjadi solusi biaya yang lebih rendah (implementasi dan pemeliharaan) daripada yang lain? Berdasarkan komentar Remus, "Pengiriman log memungkinkan akses hanya baca ke salinan replika, tetapi akan memutuskan koneksi semua pengguna saat menerapkan log cadangan berikutnya yang diterima (mis. Setiap 15-30 menit)." Saya tidak yakin berapa lama waktu henti itu akan diterjemahkan sehingga dapat menyebabkan pengguna cemas.
Sinkronisasi MS
Saya hanya mendengar tentang menggunakan Sinkron pekan terakhir ini dan belum menyelidikinya. Aku benci untuk memperkenalkan teknologi baru untuk sesuatu dengan visibilitas tinggi seperti masalah ini, tetapi jika itu pendekatan terbaik, biarlah.
SSIS
Kami melakukan banyak SSIS di sini sehingga menghasilkan beberapa ratus paket SSIS untuk menjaga sinkronisasi sekunder adalah pilihan bagi kami, meskipun yang jelek . Saya bukan penggemar melakukan ini karena itu banyak overhead pemeliharaan Saya lebih suka tim saya tidak mengambil.
Snapshot "ajaib" SAN
Di masa lalu, saya pernah mendengar admin kami menggunakan beberapa teknologi SAN untuk membuat cadangan instan seluruh disk. Mungkin ada beberapa sihir EMC yang dapat digunakan untuk membuat salinan uberquick dari mdf / ldf dan kita kemudian dapat melepaskan / melampirkan database target.
Cadangkan dan pulihkan
Saya pikir kami mengambil backup penuh seminggu sekali, diferensial setiap malam dan tlog setiap 15 menit. Jika pengguna bisa hidup dengan pemadaman 3-4 jam untuk pengembalian penuh, saya kira ini mungkin pendekatan.
Kendala
Windows 2008 R2, SQL Server 2008 R2 (Edisi Perusahaan), VMWare v5 Edisi Enterprise, penyimpanan EMC SAN dengan drive yang dipetakan ke file vmdk, cadangan penanganan cadangan, dan .6TB data dalam katalog sumber. Ini adalah aplikasi pihak ketiga yang kami sediakan di rumah. Memodifikasi struktur mereka umumnya disukai. Para pengguna tidak dapat pergi tanpa menanyakan database dan menolak untuk dibatasi dengan secara proaktif mengidentifikasi tabel yang mereka monitor untuk melakukan pekerjaan mereka.
DBA kami adalah kontraktor murni saat ini. Full-timer telah berlayar dan kami belum menggantinya. Admin aplikasi tidak berpengalaman dalam masalah SQL Server dan kami memiliki tim admin Storage / VM yang dapat membantu / menghambat upaya ini. Tim pengembangan saat ini tidak terlibat tetapi dapat didaftar berdasarkan pendekatan. Jadi lebih mudah untuk mengimplementasikan dan memelihara solusi akan lebih disukai.
Saya, saya berada di sisi pengembangan rumah sakit sehingga saya hanya dapat mengusulkan pendekatan dan tidak harus berurusan dengan sisi administrasi hal-hal. Jadi tanpa waktu di pelana admin, saya ragu untuk mengatakan satu pendekatan akan lebih unggul dari yang lain --- semuanya tampak hebat menurut surat kabar. Saya sepenuhnya bersedia untuk menjalankan segala arah yang Anda sarankan karena seperti yang saya lihat, itu hanya akan membuat saya lebih berharga sebagai seorang profesional DB. Saya memiliki gerobak dorong tetapi tidak ada jubah holocaust yang tersedia .
Pertanyaan-pertanyaan Terkait
/programming/525637/what-are-the-scenarios-for-using-mirroring-log-shipping-replication-and-cluste
/programming/4303020/sync-databases-mirroring-replication-log-shipping
/programming/4303020/sync-databases-mirroring-replication-log-shipping
http://nilebride.wordpress.com/2011/07/24/log-shipping-vs-mirroring-vs-replication/
Suntingan
Untuk menjawab pertanyaan @ onpnt
Penerimaan latensi data
Pengguna saat ini melihat data yang tertinggal hingga 24 jam. Data hanya terkini pada 2200
Jumlah data berubah dalam menit, jam, dan hari tertentu. Tidak yakin bagaimana mengukurnya. Jam kerja, mungkin ratusan perubahan per jam. Pemrosesan setiap malam, jutaan baris per hari kerja
Konektivitas ke sekunder
Jaringan internal, host virtual terpisah dan penyimpanan khusus
Baca persyaratan pada instance sekunder
Grup Windows akan memiliki akses baca ke tabel sekunder, semua
Up-waktu dari instance sekunder
Tidak ada definisi yang kuat tentang persyaratan up-time. Pengguna ingin selalu tersedia tetapi apakah mereka bersedia membayar untuk itu, mungkin tidak begitu banyak. Secara realistis, saya katakan 23 jam sehari sudah cukup.
Perubahan skema yang ada dan semua objek
Modifikasi yang jarang, mungkin sekali per kuartal untuk objek tabel. Mungkin sebulan sekali untuk objek kode.
Keamanan
Tidak ada kebutuhan keamanan khusus. Izin produksi akan cocok dengan izin salinan. Meskipun ketika saya memikirkannya, kita bisa mencabut pengguna membaca akses ke prod dan hanya membolehkan mereka membaca salinannya ... Bukan keharusan.
Selat @darin
Mengembalikan ke snapshot bisa menjadi pilihan tapi saya pikir ada beberapa alasan mereka tidak mengejar itu. Saya akan periksa dengan admin
@cfradenburg
Asumsi saya adalah bahwa kami hanya akan menggunakan salah satu dari pendekatan ini tetapi itu adalah poin yang baik bahwa mengembalikan akan merusak teknologi sinkronisasi "lainnya". Mereka sedang menyelidiki melakukan menggunakan sihir snapshot EMC. Seperti yang dijelaskan admin, mereka akan mengambil snapshot pada 1900 dan memigrasikan gambar ke zona sekunder. Itu harus selesai pada 2200 dan kemudian mereka akan melakukan detach dan reattach dari database sekunder.
Bungkus
2012-10-29 Kami mengevaluasi sihir snapshot EMC dan beberapa opsi replikasi lainnya, tetapi DBA memutuskan bahwa mereka dapat menentukan Mirroring yang terbaik. Terpilih jawabannya karena mereka semua membantu dan memberi saya banyak pilihan serta "pekerjaan rumah" untuk diselidiki.
sumber
Jawaban:
Replikasi kemungkinan besar keluar dan saya akan membuang Sync sebelum itu. (dari tes transacitonal tinggi kehidupan nyata pada Sync Framework)
Jika 3-4 jam merupakan pengecualian latensi data Anda, pengiriman log mungkin akan menjadi taruhan terbaik Anda di sini hanya pada salinan read-only. Tetapi berapa banyak perubahan yang terjadi di log? temukan bahwa memantau itu untuk melihat seberapa cepat dan seberapa banyak Anda perlu mendorong.
Jika Anda tidak dapat pergi ke Mirroring atau meningkatkan ke perusahaan 2012, itu sudah keluar meskipun itu akan menjadi strategi yang baik jika Anda dapat pergi Enterprise jika tidak di dalamnya.
SSIS tidak dimaksudkan untuk hanya membuang data tetapi dapat melakukannya. Anda melihat terlalu banyak dalam hal transformasi pencarian dan tugas akan mahal dalam waktu dan sumber daya. Meskipun, seperti yang saya katakan, itu bisa melakukannya.
Sungguh, akan ada penyempitan pilihan yang berbeda berdasarkan menjawab beberapa pertanyaan
sumber
Ini akan menjadi salah satu hal yang perlu Anda coba sendiri untuk menemukan yang terbaik. Replikasi bisa rumit sehingga sementara mungkin tidak ada biaya moneter langsung akan ada biaya administrasi untuk mempertahankannya.
Untuk memperluas Pengiriman Log, Anda tidak perlu mengembalikan log setiap 15-30 menit. Jika Anda memilih, Anda bisa melakukannya setiap empat jam atau sekali sehari. Solusi yang mirip dengan ini yang telah saya terapkan adalah melakukan pencadangan penuh mingguan dan mengembalikan ke DB pelaporan (yang dapat memakan waktu cukup lama dan terjadi pada akhir pekan). Selama minggu ini, cadangan diferensial diambil dan dikembalikan ke database pelaporan setiap malam. Pengguna harus mendapatkan boot sebelum pemulihan tetapi karena DB pelaporan adalah aplikasi jam kerja, tidak ada masalah dengan itu. Data berumur satu hari yang seharusnya tidak menjadi masalah berdasarkan kebutuhan Anda.
Untuk menggunakan mirroring basis data untuk ini, Anda perlu membeli Enterprise untuk dapat menggunakan snapshot jika Anda belum menjalankan Enterprise. Itu juga tidak akan membuat data 100% up to date karena snapshot perlu dihapus (artinya semua pengguna harus keluar) dan kemudian diciptakan kembali untuk mendapatkan data baru. Namun, ini akan lebih sedikit waktu daripada mengembalikan log atau metode yang saya jelaskan di atas.
Jika memutakhirkan ke SQL 2012 merupakan opsi, dimungkinkan untuk menyiapkan sekunder hanya-baca yang akan terus diperbarui dengan basis data primer. Saya hanya menyebutkan ini karena itu kemungkinan akan menjadi solusi paling lancar.
sumber
Seperti halnya orang yang menggunakan replikasi transaksional, itu kedengarannya cocok untuk situasi Anda. Beberapa catatan:
sumber