it-swarm-tr.com

SQL Server otomatik küçültmenin açık olması güvenli midir?

Veritabanları için etkinleştirilebilen birçok SQL Server seçeneği vardır ve en yanlış anlaşılanlardan biri otomatik küçültmedir. Güvenli mi? Değilse, neden olmasın?

44
Paul Randal

(Aslında normal bir soru olarak sordum ama sonra doğru yöntemi buldum - teşekkürler BrentO)

Hayır asla.

Ben şimdi birkaç kez ServerFault üzerinde karşılaştım ve bazı iyi tavsiyeler ile Nice geniş bir kitleye ulaşmak istiyorum. İnsanlar bir şeyler yapmak için bu şekilde kaşlarını çattıysa, aşağı oy verin ve bunu memnuniyetle kaldıracağım.

Otomatik küçültme etkinleştirilmiş çok yaygın bir veritabanı ayarıdır. İyi bir fikir gibi görünüyor - veritabanındaki fazladan alanı kaldırın. Otomatik küçültmenin olumlu olarak kötü olduğunu bilmeyen birçok 'istemsiz DBA' var (TFS, SharePoint, BizTalk veya sadece normal eski SQL Server'ı düşünün).

Microsoft'ta SQL Server Storage Engine'e sahiptim ve otomatik küçültme özelliğini kaldırmaya çalıştım, ancak geriye dönük uyumluluk için kalması gerekiyordu.

Otomatik küçültme neden bu kadar kötü?

Veritabanının tekrar büyümesi muhtemeldir, neden onu küçültelim?

  1. Shrink-grow-shrink-grow dosya sistemi düzeyinde parçalanmaya neden olur ve çok fazla kaynak alır.
  2. Ne zaman başladığını kontrol edemezsiniz (normal olsa bile)
  3. Çok fazla kaynak kullanır. Veritabanındaki sayfaları taşımak CPU, çok sayıda GÇ gerektirir ve çok sayıda işlem günlüğü oluşturur.
  4. İşte gerçek kicker: veri dosyası küçültme (otomatik olsun ya da olmasın) büyük dizin parçalanmasına neden olur ve bu da düşük performansa neden olur.

Bir süre önce neden olduğu ve biraz daha ayrıntılı olarak açıkladığı sorunları gösteren örnek bir SQL komut dosyasına sahip bir blog yazısı yaptım. Bakınız Otomatik küçültme - KAPATIN! (blogumda böyle bir reklam veya önemsiz yok). Bu, günlük dosyasını daraltarak, bazen yararlı ve gerekli olan ile karıştırmayın.

Kendinize bir iyilik yapın - veritabanı ayarlarınıza bakın ve otomatik küçültmeyi kapatın. Aynı şekilde bakım planlarınızda da küçülmemelisiniz. Sözcüğü meslektaşlarınıza yayın.

Düzenleme: Bunu eklemeliyim, ikinci cevap tarafından hatırlatıldı - bir küçültme işlemini kesmenin yolsuzluğa neden olabileceği konusunda yaygın bir yanlış anlama var. Hayır olmaz. SQL Server'da shrink koduna sahiptim - kesilirse geçerli sayfa taşıma işlemini geri alır.

Bu yardımcı olur umarım!

71
Paul Randal

Tabii ki, Paul haklı.

Tüm DB'leri ve onların otomatik ayarını görün. Çok fazla veritabanınız varsa, biri gizlice girecektir.

sp_msforeachdb  @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'

Bu dmv bir yerde mi .... Acaba.

4
Sam

"Güvensiz" değil - hiçbir şeye zarar vermez.

Ancak, veritabanının kapanmaya ve pahalı bir yeniden düzenleme alıştırması başlatmaya karar verebileceği üretim ortamları için, bu isteklerin sunulması daha uzun sürdüğünden hemen önce önerilmez. Küçültme işlemlerini yedekleme gibi diğer bakım işlemleriyle birlikte (aslında yedeklemeden sonra - işlem günlüğünden daha fazla bu şekilde olur) kullanmak çok daha iyidir. Veya bir büyüme sorunu olmadıkça hiç küçülmüyor - kullanılmayan ayrılmış alanın belirli bir oranın veya sabit boyutun ötesinde büyüdüğünü size bildirmek için her zaman bir monitör ayarlayabilirsiniz.

IIRC seçeneği, Express hariç tüm MSSQL sürümlerindeki tüm veritabanları için varsayılan olarak kapalıdır.

2
David Spillett

TechNet'te SQL bakımını daha ayrıntılı olarak açıklayan bir teknik inceleme bulunmaktadır.

http://technet.Microsoft.com/en-us/library/cc262731.aspx

1
Jeremy Thake

Autogrow ve Autoshrink etkin bir SQL sunucusu gördüm. Bu (nispeten güçlü) sunucu son derece yavaştı, çünkü bütün gün yaptığı küçültmek ve veritabanı dosyalarını büyütmekti. Autoshrink yararlı olabilir, ancak iki şey öneriyorum:

  1. Otomatik ayarlamayı varsayılan olarak kapatın.
  2. Sunucunuzun yapılandırmalarını belgeleyin; böylece Autogrow ve Autoshrink'un nerede etkinleştirildiğini ve nerede etkinleştirilmediğini bilirsiniz.
1
Carl C

Bir veritabanını küçültmek zorunda kaldığım tek zaman, daha az disk alanı olan (üretim veritabanını tutmak için yetersiz) bir test sunucusunda bir kopyayı yenilemekti.

Üretim veritabanının dosyalarının cömert boş alanı vardı, maalesef yedeklediğiniz dosya ve boyutlardaki bir veritabanını geri yüklemelisiniz. Yani üretimi desteklemeden önce küçültmekten başka seçeneği yoktu. (Küçültme yıllar sürdü, çok fazla kaynak tüketildi ve daha sonraki işlem günlüğü büyümesi sorunlu oldu.)

1
SuperCoolMoss

Ayrıca bu video öğretici göz atın ....

Paul Randal'ın küçültme ve otomatik küçültmenin veritabanınız için nasıl ciddi parçalanma sorunlarına neden olabileceğini gösterdiğini izleyin http://wtv.watchtechvideos.com/topic194.html

1