Kami memiliki beberapa mesin di mana kami telah mengalokasikan ukuran log transaksi untuk 50GB. Ukuran tabel yang saya coba reorganisasi adalah 55 - 60 gb tetapi akan terus meningkat. Alasan utama saya ingin mengatur ulang adalah untuk mendapatkan kembali ruang dan manfaat kinerja karena itu adalah bonus tambahan.
Tingkat fragmentasi tabel adalah 30 - 35%. Pada beberapa mesin ini saya mendapatkan kesalahan "log transaksi penuh" dan mengatur ulang gagal. Ukuran log transaksi mencapai hingga 48GB. Apa cara yang baik untuk mengatasi ini? Kami tidak memiliki kenaikan otomatis diaktifkan dan saya enggan melakukannya.
Saya bisa meningkatkan ukuran log ke nilai yang lebih besar tetapi karena ukuran tabel meningkat di masa mendatang, nilainya mungkin tidak cukup. Juga mengalahkan tujuan melakukan reorganisasi untuk mendapatkan kembali ruang jika saya akan meningkatkan ukuran log sama. Adakah ide tentang bagaimana saya dapat mengatasi ini secara efektif? Menggunakan mode bulked bukan pilihan karena kehilangan data tidak dapat diterima.
sumber
REORGANIZE (seperti pada ALTER INDEX ... REORGANIZE) adalah operasi yang sangat cepat (yah, sebagian besar ...), yang memerlukan sejumlah kecil log, dapat diinterupsi kapan saja dan dilanjutkan kemudian, dan bekerja secara internal dalam transaksi batch kecil :
Apakah Anda yakin tidak sedang membicarakan pembangunan kembali ? Indeks REBUILD lambat, mahal, mengkonsumsi sejumlah besar log (jika tidak offline dan tidak dapat ditebang secara minimal , rekondisi online tidak dapat ditebang secara minimal), adalah transaksi raksasa tunggal dan tidak dapat diinterupsi tanpa kehilangan semua pekerjaan.
Sepertinya saya melakukan pembangunan kembali, yang merupakan operasi yang sangat luar biasa yang tidak boleh Anda lakukan kecuali Anda memiliki alasan yang dipikirkan dengan sangat baik. Reklamasi ruang apa yang Anda lakukan? Adakah yang
DBCC CLEANTABLE
tidak akan menangani? Sudahkah Anda memeriksa struktur fisik tabel, apakah sudah melayang dari struktur logis (lihat kolom tabel SQL Server di bawah tenda untuk detailnya)?Jika Anda benar - benar harus membangun kembali tabel maka saya khawatir Anda tidak punya pilihan selain menggigit peluru dan mengalokasikan log yang diperlukan. Jangan biarkan itu tumbuh secara otomatis, itu hanya akan memperlambat proses. Pra-tumbuh hingga 2,5 kali ukuran tabel.
Jika tabel dipartisi maka Anda dapat membangun kembali offline (dan mengatur ulang) satu partisi sekaligus. Rekondisi online hanya dapat dilakukan di seluruh level tabel.
sumber
Saya pernah mengalami masalah ini sebelumnya.
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.
Buat agen WMI alert ('Reorganize Relief Valve') pada kondisi kinerja.
Buat pekerjaan ('Atur Ulang Pemeriksaan')
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.
sumber
Inilah yang biasanya saya lakukan (saya juga punya beberapa tabel dengan masing-masing 80 + GB besar) untuk indeks reorg (karena indeks reorg dapat dihentikan kapan saja tanpa kehilangan pekerjaan reorg sebelumnya).
Dalam kerangka pemeliharaan indeks saya, saya mengkategorikan indeks menjadi dua kelompok, satu untuk membangun kembali indeks dan satu lagi untuk indeks reorg. Untuk indeks membangun kembali, saya akan menggunakan pendekatan yang agak berbeda karena saya tidak ingin menghentikan sesi pembangunan kembali indeks (yang akan menyebabkan kemunduran dan kehilangan semua pekerjaan sebelumnya). Selama indeks dibangun kembali, jika sesi pemantauan saya memperhatikan skenario ruang kosong file tlog, sesi pemantauan akan secara otomatis meningkatkan file tlog, dan dalam skenario terburuk (mis. Disk penuh), sesi pemantauan saya akan membuat file log lain ( tetapi nanti saya akan menjatuhkannya) di drive lain (drive cadangan)
sumber
Saya memiliki masalah yang sama dengan penulis pertanyaan, dan melihat komentarnya, saya dapat mengatakan saya memiliki pengaturan yang sama. Ketika saya mencoba untuk melakukan
REORGANIZE
, log tumbuh penuh, terlepas dari ukuran, bahkan beberapa kali ukuran seluruh tabel.Masalahnya disebabkan oleh replikasi transaksional . Rupanya, log tidak dapat dicadangkan hingga
REORGANIZE
operasi selesai. Saya membaca di suatu tempat bahwa itu adalah masalah yang diketahui oleh Microsoft, tapi saya tidak yakin di mana.Setelah saya menonaktifkan replikasi transaksional, cadangan log berfungsi normal kembali, dan melakukan pencadangan log setiap 30 detik sambil mengatur ulang bekerja dengan baik untuk saya.
sumber
Saya berasumsi Anda menjalankan sesuatu seperti:
ALTER INDEX TENTANG REORGANISASI
Sayangnya, tidak ada cara untuk menjalankan pengaturan parsial (cara Anda dapat mengecilkan sebagian file log misalnya). Cara saya dapat memikirkan masalah ini adalah:
1) mengatur database ke mode pemulihan sederhana saat Anda menjalankan reorganisasi, tetapi Anda mengatakan itu tidak dapat diterima
2) mempartisi indeks - jika dapat memikirkan cara untuk mempartisi indeks untuk mendapatkan partisi berukuran kira-kira sama, Anda kemudian dapat mengatur ulang (atau membangun kembali dengan opsi online) setiap partisi secara mandiri dan dengan demikian membatasi pertumbuhan file log
Saya yakin Anda melakukan ini, tetapi jika tidak, Anda mungkin ingin memulai cadangan file log sebelum dan setelah Anda melakukan optimasi indeks apa pun, yang akan memungkinkannya untuk mendapatkan kembali ruang yang digunakan.
sumber