Setiap kali saya me-restart server saya, database selalu dalam mode pemulihan, dan dibutuhkan sekitar 20 menit untuk berperilaku seperti biasa. Ini selalu dan hanya terjadi ketika saya me-restart server, jadi saya punya beberapa pertanyaan ...
- Saya diberitahu ini bisa disebabkan oleh file log yang besar? Mungkinkah itu benar? Jika tidak, apa penyebab lainnya?
- Saya perlu menurunkan ruang file log untuk mencegah pemulihan. Apa yang lebih baik: menyusut atau memotong?
- Bagaimana saya bisa mengecilkan atau memotong file log / database untuk menurunkan ukuran? Apa itu sintaks?
Saat ini saya menggunakan Microsoft SQL Server 2008.
Jawaban:
Saya memiliki masalah yang sama dan saya yakin telah menyelesaikannya, tetapi saya belum dapat mengujinya sepenuhnya untuk mengonfirmasi.
Saya percaya masalah ini terkait dengan jumlah VLF yang Anda miliki di file log Anda dan bukan ukurannya. Jika Anda memiliki logfile besar, kemungkinan ia tumbuh secara organik melalui peristiwa pertumbuhan otomatis dan itu bukan pertumbuhan yang direncanakan secara disengaja. Jika demikian, Anda mungkin memiliki ribuan VLF di dalam file log.
Berikut ini permintaan untuk melihat berapa banyak VLF yang Anda miliki yang saya gunakan dari sini :
Untuk penjelasan lebih lanjut tentang VLF apa yang melihat tautan ini .
Saya percaya masalahnya adalah bahwa dengan begitu banyak VLF dibutuhkan SQL server lama untuk menilai keadaan mereka dan kemudian membawa database keluar dari pemulihan. Jika Anda mengecilkan file log Anda ke ukuran terkecil yang Anda bisa, sering kali ukuran VLF pertama yang dibuat dalam file log, maka Anda dapat langsung dengan sengaja menumbuhkannya lagi dan dengan demikian membuatnya membuat jumlah VLF yang tepat (sesuatu yang kurang dari 16).
Setelah ini selesai saya yakin Anda akan dapat melihat bahwa database Anda keluar dari pemulihan lebih cepat.
Saya belum memiliki kesempatan untuk menguji kegagalan atas contoh produksi kami setelah saya menyelesaikan masalah VLF kami sendiri sehingga saya akan sangat ingin tahu jika Anda dapat mengonfirmasi ini adalah penyebab utama masalah ini. Secara eksperimental saya telah melihat waktu yang diperlukan untuk memulihkan lingkungan pementasan kami berkurang secara dramatis karena ini, semoga saja begitu.
sumber
Dari artikel MSDN ini :
Biasanya tidak disarankan untuk menjalankan jenis DBCC shrinkfile apa pun pada basis data produksi. Log juga perilaku pemotongan telah berubah dari versi sebelumnya ke 2008 (terima kasih @Edward) - per blog ini :
Sekali lagi, saya akan menyebutkan, seberapa sering Anda membuat cadangan database? Biasanya, cadangan biasa "kelola" ukuran log terbaik.
sumber
Mengurangi ukuran log transaksi online dapat memperbaiki masalah, yaitu mempercepat database menjadi online, tetapi Anda harus berpikir tentang pemulihan bencana sebelum Anda melakukannya. Perhatikan bahwa jika Anda berada dalam model pemulihan sederhana, Anda tidak akan dapat mengembalikan ke titik waktu. Di sisi lain, jika Anda berada dalam model pemulihan LENGKAP, cara terbaik untuk menjaga ukuran log transaksi online adalah dengan membuat cadangan log transaksi secara reguler (jadwalkan).
Memotong log transaksi tidak membebaskan ruang hard disk fisik, itu hanya memungkinkan SQL Server untuk menggunakan kembali ruang itu untuk transaksi yang telah terjadi sejak CHEKPOINT terakhir (sejak cadangan log transaksi terakhir).
Jika Anda mengecilkan basis data, Anda akan mengurangi ukuran file. Untuk mengecilkan basis data MyDB sebesar 15 persen:
DBCC SHRINKDATABASE (MyDB, 15); PERGILAH
sumber