Apa yang bisa saya tambahkan ke server untuk membuat SQL mengembalikan lebih cepat?

8

Saya memiliki database SQL 2.8TB (kebanyakan file data, sekitar 400GB file log) yang saat ini membutuhkan sekitar 9 jam untuk dipulihkan. Basis data ini digunakan untuk tujuan pengujian dan harus dihapus dan dipulihkan dari cadangan di antara setiap proses, untuk memastikan kami selalu memulai dari titik yang sama.

Pertanyaan saya adalah, server saat ini memiliki 12 core dan 92GB RAM, dengan subsistem disk RAID 5 yang menjadi basis datanya. Area apa yang biasanya menyebabkan kemacetan untuk proses pengembalian SQL? Apakah itu disk, memori, atau CPU?

Sean Long
sumber
3
Media cadangan apa yang Anda pulihkan? Omong-omong, RAID 5 menimbulkan penalti tulis yang berat bila dibandingkan dengan sebagian besar level RAID lainnya, jadi ini mungkin bukan yang terbaik untuk pengujian kinerja.
Chris McKeown
The .bak's (8 dari mereka berpisah) berada pada array RAID 5 yang sama dengan yang sedang mereka kembalikan, yang membuat saya sadar bahwa saya mungkin dapat menangani itu dengan lebih baik di masa depan. Saya tidak memiliki array lain yang cukup besar untuk menampung semua .bak, tetapi saya mungkin dapat membaginya menjadi berbagai drive terpasang langsung yang berbeda. Juga, poin bagus tentang RAID 5. Saya sadar akan hal itu, tapi kami belum melakukan stress testing, jadi tidak apa-apa jika bottlenecking di disk drive sekarang selama tes beban yang sebenarnya. Setelah kami melanjutkan sedikit, kami akan meningkatkan kinerja disk melalui SAN, RAID 0 atau RAID 1 + 0
Sean Long
2
Tentu saja penderitaan Anda terlalu parah karena memiliki cadangan di drive yang Anda pulihkan juga. Berapa banyak disk di RAID5 Anda saat ini?
Mark Storey-Smith
Jadi Anda menggunakan kompresi, saya akan berasumsi. Apa opsi cadangan lain yang Anda gunakan? Bagaimana data Anda dipartisi? Apakah Anda dapat mendistribusikan data secara cerdas di seluruh grup file (Anda kemudian dapat melakukan backup grup file dan mengembalikan data yang diubah)?
swasheck
Masalahnya adalah bahwa tes menyentuh persentase yang sangat besar dari database, jadi kami harus mengembalikan seluruh grup file (dan tes akan berubah berdasarkan kebutuhan dan pengembangan beban kerja). Jadi, kita harus terus melihat makeup tes dan mengembalikan grup file tertentu. Meskipun itu pilihan, saya tidak yakin itu akan memberi kita banyak waktu yang dihemat.
Sean Long

Jawaban:

6

Hambatan utama Anda pada pemulihan adalah disk IO. Untuk memperbaikinya pada dasarnya Anda membutuhkan disk yang lebih cepat atau konfigurasi yang berbeda. Saya tidak cukup tahu tentang RAID atau SAN untuk menyarankan apa pun di sana. Anda bahkan mungkin mempertimbangkan SSD. Mereka sangat cepat. Saya tidak ingin menggunakannya pada sesuatu yang tidak dapat dibuat ulang secara teratur (tempdb selalu merupakan kandidat yang bagus untuk ini) tetapi karena Anda sering mengembalikannya mungkin ok. Di sisi lain Anda mungkin ingin memastikan server pengujian Anda sedekat mungkin dengan server produksi Anda jika Anda melakukan pengujian kinerja.

Ada beberapa hal lain yang dapat Anda lakukan untuk membantu diri sendiri. Pertama kompres cadangan Anda jika Anda belum melakukannya. Ini tentu saja mengasumsikan SQL 2008 atau lebih tinggi. Ini akan mengurangi tidak hanya ruang disk untuk menyimpan cadangan tetapi IO untuk membacanya. Ada biaya CPU yang terlibat jadi waspada. Juga jangan hapus database Anda, cukup pulihkan. Dengan cara ini file sudah ada di tempatnya dan tidak ada overhead untuk membuatnya. Anda dapat mengaktifkan inisialisasi file instan (Ini adalah izin tingkat server) untuk secara dramatis mempercepat pembuatan / pertumbuhan file data Anda tetapi itu tidak akan berfungsi untuk file log Anda.

Kenneth Fisher
sumber
Informasi yang bagus, saya tidak menyadari bahwa memulihkan yang ada lebih baik daripada menjatuhkan / mengembalikan dari cadangan. Kami sudah menggunakan kompresi dan saya berencana memverifikasi bahwa inisialisasi file instan diaktifkan untuk akun yang melakukan pemulihan. Saya sangat menghargai kejelasan jawaban Anda, terima kasih!
Sean Long
Pastikan inisialisasi file instan dihidupkan pada akun yang menjalankan SQL Server juga. Untuk database kecil, mungkin itu bukan masalah besar, tetapi untuk ukuran yang Anda lihat bisa membuat perbedaan besar.
Kenneth Fisher
Panggilan yang bagus. Juga terima kasih karena menyadari bahwa pengujian kinerja tidak selalu berarti pengujian stres (dan bahwa saya cukup dibatasi oleh cara konfigurasi produksi saya diatur, saat ini).
Sean Long
OT: "pertimbangkan SSD. ... Saya tidak ingin menggunakannya pada sesuatu yang tidak dapat dibuat ulang secara teratur" ... mengapa?
Martin
Saya masih gelisah tentang kegagalan mereka. Semua yang saya baca mengatakan untuk menggunakannya untuk basis data seperti tempdb yang dibuat ulang setiap kali instance dimulai, tetapi tidak menggunakannya untuk basis data pengguna biasa. Meskipun saya yakin itu berubah seiring waktu.
Kenneth Fisher
7

Jangan melakukan backup dan restore; menggunakan Snapshots SQL Server. Dibutuhkan banyak ruang disk untuk menyimpan file jarang dengan ukuran yang sama dengan file yang Anda snapshotted, tetapi memutar kembali ratusan kali lebih cepat.

Mereka tersedia dalam edisi SQL Server Enterprise dan SQL Server Developer.

Mark Henderson
sumber
Itu ide yang bagus, dan jika ini adalah server lain selain server uji kinerja, sepertinya cara yang bagus untuk melakukannya. Namun, sepertinya snapshot DB tidak akan berfungsi karena akan menyebabkan overhead tambahan untuk sumber DB, yang tidak dapat saya miliki. Pengujian yang dilakukan adalah pengujian kinerja (beban, stres, dll.) Sehingga kita harus menghindari hal-hal eksternal yang dapat menyebabkan stres.
Secara pribadi saya belum melihat perbedaan kinerja dengan memiliki snapshot, tapi saya kira copy-on-write memang memiliki beberapa overhead; tidak tahu beban kerja Anda, saya tidak bisa menilai.
Mark Henderson
2
Saran @SongLong Mark mungkin merupakan opsi terbaik untuk skenario Anda. Apa yang saya pikir Anda salah pahami adalah kapan dan apa yang Anda ambil potretnya. Paket pada server uji adalah mengembalikan database uji dari cadangan langsung Anda, lalu memotret database pengujian, menjalankan siklus pengujian Anda, lalu mengembalikan foto, bilas & ulangi. Secara berkala Anda dapat kembali ke langkah 1 dan mengembalikan cadangan langsung untuk menguji lagi.
Mark Storey-Smith
Ah, begitu. Saya berpikir bahwa mempertahankan snapshot memerlukan jumlah overhead konstan dari database pengujian, yang akan mempengaruhi loadtests kami (sangat tulis / baca berat). Saya tidak keberatan jika beban kerja kami menyebabkan kemacetan di disk drive, saya hanya tidak ingin faktor eksternal (yang saya pikir akan menjadi penyebabnya).
Sean Long