Saya pernah mengalami masalah ini sebelumnya.
- Anda memiliki database besar dan drive log kecil. Anda ingin mengatur ulang (karena berbagai alasan).
- Ketika Anda mencoba ini pada tabel terfragmentasi besar log mengisi sampai drive log penuh dan kemudian perintah dibatalkan.
- Jika dalam mode sederhana transaksi lain mungkin gagal sampai log dihapus di pos pemeriksaan berikutnya, dan jika dalam mode penuh transaksi lain mungkin gagal sampai cadangan log berikutnya. Padam!
- Jika Anda dalam mode penuh Anda meningkatkan frekuensi cadangan log Anda tetapi itu tidak membantu menghindari masalah karena reorganisasi dilakukan dalam transaksi implisit, log tidak menghapus sampai transaksi selesai atau dibatalkan atau dihentikan.
- Dan Anda BENAR-BENAR ingin agar reorganisasi berjalan hingga selesai.
Itu sedikit kontra-intuitif karena Anda tahu jika Anda membatalkan reorganisasi itu bisa berlanjut dari tempat sebelumnya, hanya saja sebuah aborsi melakukan transaksi daripada memutar balik.
Inilah yang Anda lakukan. Ini agak panjang tapi langsung.
- Pra-tumbuh file log Anda ke ukuran yang relatif besar, tetapi tidak maksimal. Pada dasarnya Anda ingin menyisakan cukup ruang untuk melakukan pekerjaan yang bermanfaat, ditambah untuk beberapa pertumbuhan kecil jika terjadi, sehingga operasi normal tidak akan berhenti.
- Buat pekerjaan untuk menjalankan indeks Anda mengatur ulang ('Atur Ulang').
Buat agen WMI alert ('Reorganize Relief Valve') pada kondisi kinerja.
- Objek: SQLServer: Database
- Penghitung: Log Persen Digunakan
- Instance: (nama database besar Anda)
- Peringatan jika penghitung naik di atas: 80
- Tanggapan: Jalankan pekerjaan ('Periksa Pengaturan Ulang')
Buat pekerjaan ('Atur Ulang Pemeriksaan')
- Dalam pekerjaan, periksa aktivitas msdb.dbo.sysjob untuk melihat apakah pekerjaan 'Reorganisasi' berjalan. Dan jika itu ...
- Hentikan pekerjaan dan polling sampai berhenti. Ini bisa memakan waktu beberapa detik.
- (Jika Anda dalam mode penuh) Memicu pekerjaan cadangan log Anda dan konfirmasi ketika selesai.
- Periksa kembali sys.dm_os_performance_counters bahwa penghitung ruang bebas log Anda telah berkurang di bawah ambang batas Anda.
- Mulai pekerjaan 'Atur Ulang'.
Uji semua ini di suatu tempat, bahkan kotak pasir pengembangan, untuk memastikannya berfungsi dengan baik sebelum menempelkannya ke server produksi Anda.
Apa yang akan Anda lihat adalah pekerjaan 'Reorganisasi' dimulai dan mulai mengisi log. Ketika log mencapai satu persen penuh, memicu peringatan WMI (dalam waktu sekitar 30-an) yang menjalankan pekerjaan Anda yang lain yang melihat bahwa pekerjaan 'Reorganisasi' sedang berjalan dan kemungkinan besar salah. Kemudian berhenti 'Atur Ulang', lakukan pencadangan, konfirmasi ruang bebas log kembali ke nilai yang masuk akal, kemudian mulai pekerjaan 'Atur Ulang' Anda lagi yang akan mengambilnya dari tempat sebelumnya.
Sehingga Anda dapat alasan Anda melakukan pra-ukuran log Anda ke angka yang masuk akal dalam skenario ini adalah untuk mengurangi jumlah pertumbuhan / pemicu / pekerjaan / berhenti / restart, sehingga bisa lebih efisien, dan juga menjaga ruang yang cukup untuk pertumbuhan sesekali yang tidak terjebak dalam waktu.
Ini semacam skenario aneh. Saya cukup yakin saya akan dibohongi ini beberapa tahun yang lalu dan jelas ada masalah mendasar yang mendasar di sini. Tetapi jika Anda berurusan dengan ratusan server, beberapa kasus tepi seperti ini akan muncul yang tidak dapat ditangani dengan cara apa pun, untuk alasan bisnis apa pun, kecuali dengan MacGyvering solusi sementara yang menyelesaikan pekerjaan.
Selama aman, logis, teruji, dan terdokumentasi dengan baik, seharusnya tidak ada masalah.