Apakah log transaksi menyusut secara otomatis di SQL Server?

10

Ketika database SQL Server dalam mode SIMPLE, Anda tidak perlu peduli dengan bakcup log transaksi. Tetapi dalam mode SIMPLE, log transaksi tampaknya tumbuh seperti dalam mode FULL. Apakah terpotong secara otomatis pada titik waktu tertentu? Atau apakah saya harus memotong / mengecilkannya secara manual?

jrara
sumber

Jawaban:

19

Ini akan terpotong secara otomatis tetapi itu sangat berbeda untuk menyusut. Pemotongan mengklaim kembali ruang log untuk digunakan kembali, menyusut secara fisik mengurangi ukuran file untuk melepaskan ruang kembali ke OS. Jika log Anda telah tumbuh ke ukuran saat ini, kemungkinan log itu akan tumbuh lagi jika Anda menyusutkannya.

Saya sarankan menangani apa yang khas dan maksimum penggunaan log untuk sistem Anda. Kueri di bawah ini (bukan milik saya, didorong dari skrip DMV Glen Berrys) dapat dijalankan secara manual atau Anda dapat menangkap output ke tabel melalui pekerjaan agen. Jika Anda log ke meja selama seminggu atau lebih, Anda akan mendapatkan gambar penggunaan yang khas dan yang lebih penting, ketika suatu proses menyebabkan log tumbuh melebihi apa yang Anda harapkan.

SELECT 
     db.[name] AS [Database Name]
   , db.recovery_model_desc AS [Recovery Model]
   , db.log_reuse_wait_desc AS [Log Reuse Wait Description]
   , ls.cntr_value AS [Log Size (KB)]
   , lu.cntr_value AS [Log Used (KB)]
   , CAST(
        CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) 
        AS DECIMAL(18,2)
     ) * 100 AS [Log Used %]
   , db.[compatibility_level] AS [DB Compatibility Level]
   , db.page_verify_option_desc AS [Page Verify Option]
   , db.is_auto_create_stats_on, db.is_auto_update_stats_on
   , db.is_auto_update_stats_async_on, db.is_parameterization_forced
   , db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on
FROM sys.databases AS db
   INNER JOIN sys.dm_os_performance_counters AS lu 
     ON db.name = lu.instance_name
   INNER JOIN sys.dm_os_performance_counters AS ls 
     ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%' 
   AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
   AND ls.cntr_value > 0 
OPTION (RECOMPILE);

Pemotongan Log Transaksi menjelaskan kapan dan mengapa pemotongan log terjadi.

Jika catatan log tidak pernah dihapus dari log transaksi, pada akhirnya akan mengisi semua ruang disk yang tersedia untuk file log fisik. Pemotongan log secara otomatis membebaskan ruang dalam log logis untuk digunakan kembali oleh log transaksi.

Faktor-faktor yang dapat menunda pemotongan log adalah referensi yang berguna untuk memahami mengapa log Anda gagal dipotong dan karena itu tumbuh lebih besar dari yang diharapkan.

Mark Storey-Smith
sumber
4

Tidak dan tidak

  • itu tidak akan menyusut atau terpotong (dalam arti LDF fisik, itu akan dilakukan secara logis)
  • itu harus ukurannya sehingga Anda tidak menyusut

Jika Anda mengecilkannya, itu akan tumbuh lagi dan Anda akan memiliki file yang terfragmentasi

gbn
sumber
0

Seperti disebutkan sebelumnya, tidak itu tidak akan menyusut secara otomatis. Namun itu akan membersihkan beberapa sampah.

Alasannya adalah bahwa dalam model pemulihan penuh, Anda memberi tahu SQL bahwa Anda ingin melakukan backup tlog untuk pemulihan waktu, sehingga mencatat semua transaksi yang dilakukan terhadap database.

Karena Anda mengatakan bahwa Anda ingin pemulihan waktu, Anda perlu melakukan backup penuh dan backup tlog. Ketika Anda menyelesaikan cadangan tlog Anda, itu akan menyiram isi log (selain ujung ekor) dan mulai lagi dari awal.

Mungkin membantu jika Anda menganggap file-file ini sebagai wadah.

Saran saya adalah jika tlog menjadi besar dan tidak dapat dikelola, potong cadangan penuh. Beralihlah ke model SIMPLE recover dan SHRINK file tlog. Beralih kembali ke model pemulihan penuh dan lakukan perawatan fragmentasi *. Seperti yang diposkan orang lain, ini bukan praktik terbaik dan akan menyebabkan tingkat fragmentasi yang tinggi.

Merencanakan dan memulai rezim cadangan setelah itu.


* Indeks membangun kembali / menata ulang operasi dan defragmentasi level disk . Ini bukan bagian dari pemeliharaan log: Anda memelihara Log T Anda dengan mencadangkannya. Mereka adalah wadah yang tumbuh ketika mendekati kapasitas. Rebuild / reorganisasi dapat membantu memulihkan dari manajemen log yang tidak tepat yang mengarah ke penggunaan drive besar.

Ryan
sumber