Ada banyak opsi SQL Server yang dapat diaktifkan untuk basis data, dan salah satu yang paling disalahpahami adalah auto-shrink. Apakah ini aman? Jika tidak, mengapa tidak?
Ada banyak opsi SQL Server yang dapat diaktifkan untuk basis data, dan salah satu yang paling disalahpahami adalah auto-shrink. Apakah ini aman? Jika tidak, mengapa tidak?
Jawaban:
(Awalnya saya bertanya sebagai pertanyaan biasa tetapi kemudian menemukan metode yang benar - terima kasih BrentO)
Tidak, tidak pernah.
Saya telah menemukan ini beberapa kali sekarang di ServerFault dan ingin menjangkau khalayak luas yang bagus dengan beberapa saran bagus. Jika orang-orang tidak menyukai cara melakukan hal-hal ini, downvote dan saya akan menghapus ini dengan senang hati.
Penyusutan otomatis adalah pengaturan database yang sangat umum untuk diaktifkan. Sepertinya ide yang bagus - hapus ruang ekstra dari database. Ada banyak 'DBA yang tidak disengaja' di luar sana (pikirkan TFS, SharePoint, BizTalk, atau SQL Server lama yang biasa) yang mungkin tidak tahu bahwa auto-shrink benar-benar jahat.
Sementara di Microsoft saya dulu memiliki SQL Server Storage Engine dan mencoba untuk menghapus fitur auto-shrink, tetapi harus tetap untuk kompatibilitas mundur.
Mengapa menyusut otomatis sangat buruk?
Basis data cenderung tumbuh lagi, jadi mengapa mengecilkannya?
Saya melakukan posting blog beberapa waktu lalu yang memiliki contoh skrip SQL yang menunjukkan masalah yang disebabkannya dan menjelaskan sedikit lebih detail. Lihat Penyusutan Otomatis - nonaktifkan! (tidak ada iklan atau sampah seperti itu di blog saya). Jangan bingung dengan menyusutkan file log, yang berguna dan perlu sesekali.
Jadi bantulah dirimu sendiri - lihat di pengaturan database Anda dan matikan auto-shrink. Anda juga seharusnya tidak menyusut dalam rencana perawatan Anda, untuk alasan yang persis sama. Sebarkan berita ini ke kolega Anda.
Sunting: Saya harus menambahkan ini, diingatkan oleh jawaban kedua - ada kesalahpahaman umum bahwa mengganggu operasi psikiater dapat menyebabkan korupsi. Tidak, tidak akan. Saya dulu memiliki kode menyusut dalam SQL Server - itu memutar kembali langkah halaman saat ini yang dilakukannya jika terganggu.
Semoga ini membantu!
Tentu saja, Paul benar.
Lihat semua DB dan pengaturan autoshrink-nya. Jika Anda memiliki banyak basis data, seseorang akan menyelinap masuk.
sp_msforeachdb @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'
Apakah ini di dmv di suatu tempat .... Aku ingin tahu.
Itu bukan "tidak aman" - tidak akan merusak apa pun.
Tetapi tidak disarankan untuk lingkungan produksi di mana basis data dapat memutuskan untuk memulai dan memulai latihan penataan ulang yang mahal sesaat sebelum setumpuk permintaan masuk membuat permintaan tersebut membutuhkan waktu lebih lama untuk dilayani. Anda jauh lebih baik menggunakan penjadwalan operasi menyusut bersama dengan operasi pemeliharaan lainnya seperti cadangan (sebenarnya, setelah cadangan - itu akan lebih dari log transaksi seperti itu). Atau tidak menyusut sama sekali kecuali ada masalah pertumbuhan - Anda selalu dapat mengatur monitor agar Anda tahu kapan ruang yang dialokasikan tidak digunakan tumbuh melampaui rasio tertentu atau ukuran tetap.
IIRC opsi tidak aktif secara default untuk semua database di semua edisi MSSQL kecuali Express.
Ada whitepaper tersedia di TechNet yang menjelaskan pemeliharaan SQL lebih terinci.
Saya telah melihat server SQL dengan Autogrow dan Autoshrink diaktifkan. Server (relatif kuat) ini sangat lambat, karena semua yang dilakukannya sepanjang hari adalah menyusut dan menumbuhkan file database. Autoshrink dapat berguna, tetapi saya akan merekomendasikan dua hal:
Satu-satunya waktu saya terpaksa menyusutkan database adalah menyegarkan salinan pada server uji dengan ruang disk lebih sedikit (tidak cukup untuk menyimpan basis data produksi).
File database produksi memiliki ruang kosong yang luas, sayangnya Anda harus mengembalikan database dengan ukuran file yang sama seperti saat Anda membuat cadangannya. Jadi tidak punya pilihan selain mengecilkan produksi sebelum mendukungnya. (Penyusutan itu memakan waktu lama, banyak sumber daya dikonsumsi dan pertumbuhan log transaksi selanjutnya bermasalah.)
Lihat juga tutorial video ini ....
Tonton Paul Randal menunjukkan bagaimana menyusut dan menyusut otomatis dapat menyebabkan masalah fragmentasi serius untuk database Anda http://wtv.watchtechvideos.com/topic194.html