Saya agak tidak sengaja DBA, menjadi pengembang yang mewarisi beberapa server basis data (2005 dan 2008) dari seseorang yang tidak banyak tahu tentang administrasi basis data, dan tampaknya memiliki minat yang lebih kecil untuk mempelajari lebih banyak tentang masalah ini.
Saya sedang belajar saat ini, dan saat ini saya mencoba mencari tahu file log transaksi.
Semua basis data kami telah diatur dengan model pemulihan sederhana dan autoshrink. Saya mengerti bahwa menggunakan autoshrink biasanya merupakan ide yang mengerikan, tetapi pemahaman saya ini dilakukan untuk menghentikan transaksi log dari tumbuh di luar kendali. (Apakah autoshrink sebenarnya mengecilkan file log atau hanya DB?)
Saya menemukan ini tentang SQL Server 2012, dan bertanya-tanya apakah itu benar tentang 2005 dan / atau 2008, dan apa artinya: "Ketika database menggunakan model pemulihan sederhana, Mesin Database memotong log transaksi setelah pos pemeriksaan. [. ..] Mesin Database memicu pos pemeriksaan otomatis di bawah model pemulihan sederhana ketika log virtual menjadi 70 persen penuh. " Di mana ukuran log virtual ditentukan?
Saya ingin menonaktifkan menyusut otomatis pada semua database, tetapi sebelum saya melakukannya, saya perlu tahu bahwa file log tidak akan tumbuh di luar kendali dengan cepat.
Bantuan apa pun akan sangat dihargai.
sumber
Jawaban:
File log transaksi tunggal memiliki ukuran fisik (yang Anda lihat pada disk), dan juga dipecah dalam file fisik menjadi bagian logis yang disebut file log virtual (VLF).
Auto-growth dan auto-shrink beroperasi pada file log transaksi fisik .
Pemotongan log transaksi (juga disebut "pembersihan log") beroperasi pada bagian logis dari log transaksi (VLF), dan tidak mempengaruhi ukuran file fisik. Bagian ini sering menjadi subjek kebingungan.
File log harus selalu tumbuh untuk mengakomodasi transaksi besar; mematikan menyusut otomatis akan meninggalkan file log dengan ukuran maksimum yang diperlukan, alih-alih secara fisik mengurangi ukurannya.
Jika Anda tidak memiliki transaksi besar, aman untuk menonaktifkan menyusut otomatis; file log tidak akan tumbuh tanpa terikat seperti yang akan terjadi jika database berada di
FULL
atauBULK_LOGGED
dan Anda tidak mengambil backup log transaksi.Perilaku ini sama untuk SQL Server 2005+.
sumber
Jadi, inilah yang saya temukan setelah membaca balasan lain di sini dan melakukan riset sendiri:
T: "Apakah autoshrink sebenarnya mengecilkan file log atau hanya DB?" A: Dari apa yang saya mengerti: ya, itu benar. Autoshrink diatur pada level database, dan memengaruhi semua file (terlihat jika Anda mengklik kanan database -> properties -> file, atau jika Anda menjalankan query 1). Autogrow, bagaimanapun, bekerja pada tingkat file per.
T: "Di mana ukuran log virtual ditentukan?" A: Lihat balasan Jon Seigel dan tautan yang diposting Remus. Untuk melihat ukuran log fisik dan logis, gunakan kueri 2
Satu masalah adalah bahwa jika database telah mengaktifkan mode pemulihan penuh, tumbuh ke ukuran besar, dan kemudian mode pemulihan diubah menjadi sederhana, sebuah pos pemeriksaan tidak akan dipicu karena VLF telah di-autogrown. Dimungkinkan untuk mencoba menyelesaikan ini (lihat balasan Remus untuk kemungkinan masalah dengan kepala / ekor file log) dengan menjalankan kueri 3, yang akan mengurangi logfile ke ukuran seperti saat awalnya dibuat.
Pertanyaan:
1)
2)
3)
sumber
Seperti yang Anda sebutkan dalam pertanyaan Anda, di SQL 2005 dan 2008 setelah pos pemeriksaan, file log transaksi akan terpotong juga.
Saran saya adalah mengatur model pemulihan menjadi penuh dan menciptakan pekerjaan untuk mengambil cadangan dari file log transaksi. Pekerjaan ini dapat dijadwalkan pada database Anda dan akan memotong log transaksi setelah mengambil cadangan. Secara otomatis akan memotong file log untuk Anda. Silakan lihat tautan di bawah ini:
SQL Server 2005: http://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx
SQL Server 2008: http://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx
sumber