Menonaktifkan logging pada tabel tertentu

9

Saya menggunakan SQL Server 2005. Saya memiliki dua tabel yang berisi informasi agregat. Informasi ini terus diperbarui, menghasilkan hampir 5GB data log sehari. (Itu lebih besar dari seluruh basis data!) Saya ingin menonaktifkan pencatatan pada tabel ini, karena memutar kembali tidak terlalu diperlukan. Namun saya ingin tetap masuk pada tabel lain dalam database.

Apakah mungkin untuk menonaktifkan pencatatan pada tabel tertentu dalam database? Jika tidak, dapatkah saya menempatkan kedua tabel dalam skema yang sama, kemudian menonaktifkan logging pada skema? Apakah satu-satunya pilihan untuk memindahkan kedua tabel ke database terpisah, dan menonaktifkan pencatatan di sana?

Pembaruan: Saya kira saya akan menjelaskan mengapa saya benar-benar tidak perlu mencatat aktivitas di tabel ini.

Kedua tabel diisi dengan data GPS, sehingga cukup besar. Tabel pertama menangkap lokasi mentah dari enam tabel Android di lapangan. Data baru dari masing-masing tablet datang setiap 5-10 detik. Informasi itu kemudian dikumpulkan sebagai locationA, locationB, travelTime. Tujuannya adalah untuk memiliki waktu tempuh terpendek di antara semua lokasi, berdasarkan data mengemudi aktual. Data hanya untuk kota kecil, dan hanya akurat untuk empat tempat desimal, sehingga dapat dikelola. Namun, saat data mentah baru masuk, ada waktu perjalanan yang lebih lambat yang perlu diperbarui, dan yang baru perlu dimasukkan.

Setelah data mentah dikumpulkan, itu dihapus. Kami tidak akan mundur ke waktu perjalanan yang lebih lama, jadi itu sebabnya memutar kembali tidak terlalu penting di tabel ini.

dangowans
sumber

Jawaban:

8
  • Apakah mungkin untuk menonaktifkan pencatatan pada tabel tertentu dalam database?
  • Bisakah saya menempatkan dua tabel dalam skema yang sama, kemudian menonaktifkan pencatatan pada skema?
  • Apakah satu-satunya pilihan untuk memindahkan kedua tabel ke database terpisah, dan menonaktifkan pencatatan di sana?

Pencatatan operasi pengguna tidak dapat dinonaktifkan.

Ada kelas operasi yang disebut operasi minimal-log yang hanya memungkinkan transaksi harus digulung kembali (sebagai lawan juga mampu memutar ke depan ). Namun, itu tidak terdengar seperti apa yang Anda lakukan akan memenuhi kriteria untuk itu berlaku, saya juga tidak berpikir ini akan menyelesaikan masalah.

Solusi SQL Server akan mendaratkan tabel pementasan dalam database baru dalam SIMPLEpemulihan, terpisah dari database hasil agregasi, yang saya asumsikan dalam FULLpemulihan. Meskipun ini tidak akan mengurangi volume logging, ini akan menghilangkan kebutuhan untuk membuat cadangan log yang dihasilkan oleh data load. (Lihat posting blog saya di sini tentang pencatatan, dan beberapa faktor yang terlibat dalam memilih model pemulihan basis data.)

Memisahkan tabel ke dalam database lain akan memberikan fleksibilitas untuk mendaratkan file log pada subsistem I / O yang lebih cepat, mungkin sejumlah kecil solid-state drive yang terpasang secara lokal.

Juga, pertimbangkan bahwa SQL Server saja mungkin bukan solusi terbaik untuk menyelesaikan masalah. Ada solusi RDBMS lain yang menawarkan kemampuan untuk sepenuhnya menonaktifkan logging untuk tabel tertentu. Data dapat dipentaskan dan dikumpulkan dalam sistem lain, dan hasilnya digabungkan ke dalam database SQL Server yang ada, yang dilindungi dengan baik oleh pencatatan dan pencadangan penuh.

Jon Seigel
sumber
@dangowans: Sama-sama.
Jon Seigel
3

Tidak, tidak ada cara untuk mencegah masuknya SQL Server terlepas dari tingkat skema, tabel atau database.

Faktanya setiap transaksi yang melakukan modifikasi atau perubahan dalam database SQL Server dicatat kecuali transaksi terkait versi toko yang melibatkan TempDB ketika isolasi snapshot digunakan. (masuk log transaksi menjamin bahwa transaksi dapat dibatalkan (Untuk operasi tertentu Anda dapat mengurangi log (disebut operasi dengan log minimal) dengan mengubah model pemulihan menjadi BULK Logged --- Anda dapat mempelajari lebih lanjut di SQL Server Books Online di sini

Pelajar SQL
sumber
0

Jawabannya adalah, seperti biasa, itu tergantung.
Ketika Anda berkata:

Saya memiliki dua tabel yang berisi informasi agregat. Informasi ini terus diperbarui

Agregasi macam apa itu?
Coba gunakan VIEW sebagai gantinya, tidak perlu memperbarui, dan tidak ada logging.

Jika itu bukan opsi, coba gunakan transaksi yang lebih pendek, dan buat cadangan log di antaranya.

Menggunakan Database yang berbeda berarti overhead administrasi keamanan, dll. Dan akan memiliki log transaksi sendiri (bahkan dengan model pemulihan SEDERHANA log ditulis, SQL Server hanya memotong log secara otomatis, tetapi tidak melepaskan ruang disk) sehingga saya tidak akan merekomendasikan opsi itu .

Roi Gavish
sumber
Saya memperbarui pertanyaan dengan jenis agregasi yang terjadi.
dangowans
@dangowans Saya berpikir tentang model pemulihan yang dicatat secara massal, apakah DRP Anda memerlukan kemampuan untuk melakukan pemulihan ke titik-waktu-ke-waktu? Apakah Anda menggunakan replikasi? coba baca tentang prasyarat untuk operasi penebangan minimum
Roi Gavish