SAN ortamında SQL dizinlerini birleştirmenin bir faydası var mı?


16

SQL sunucumuz bir SAN üzerinde yaşıyor. Bazıları 1 metreden fazla kayıt içeren düzinelerce OLTP veritabanı içerir.

Ola Hallengren'in haftalık bakım senaryolarını haftalık olarak çalıştırıyoruz ve her seferinde birkaç saat çalışıyor. Parçalanma eşiğine göre, komut dosyası bir dizini yeniden düzenler veya yeniden dizine ekler. Yeniden endeksleme sırasında, günlük dosyalarının çok büyük olduğunu gözlemledik, bu da günlük gönderimi sırasında aşırı bant genişliği tüketimine neden oldu.

Ardından Brent Ozar'dan SQL dizinleri hakkında endişelenmeyi bıraktığını söyleyen bir makale geliyor :

Sabit sürücüleriniz aynı zamanda sürücü istekleri yapan diğer sunucularla paylaşılır, böylece sürücüler her zaman veri almak için her yere atlar. Dizinlerinizi birleştirmek anlamsız yoğun bir iştir.

Bu soruyu araştırmak, çoğu çok kısa veya zayıf görünen argümanlarla desteklenen çeşitli görüşlere yol açar. Geçici planımız, bakım komut dosyamızdaki parçalanma eşiğini, yeniden endekslerinden çok daha sık yeniden düzenleyecek şekilde ayarlamaktır.

Nihai karar nedir? Haftalık bakım işleri ile ilgili yükleri göz önünde bulundurarak bir SAN'daki SQL dizinlerini birleştirmeye değer mi?

Yanıtlar:


10

Birleştirme stratejileri diske / diskten tarama hızını artırmaya yardımcı olur .

Geniş görüş çeşitliliği, bir ortamın ideal birleştirme stratejisinin birçok farklı faktöre bağlı olması gerektiğidir. Ayrıca oyunda çoklu potansiyel parçalanma katmanları da vardır .

Veritabanlarınızın bir SAN'da depolandığını söylemek yeterli bilgi değildir. Örneğin:

  • Veritabanı dosyaları ayrı fiziksel RAID gruplarında veya aynı RAID grubunda mı depolanıyor? Aynı cihazda başka hangi işlemler etkin? Yedek dosyalarınız da orada mı bitiyor? Her zaman şeffaf olmadığı için SAN yöneticinizden bu bilgileri istemeniz gerekebilir.

  • Veritabanlarına erişim kalıpları nelerdir? OLTP genellikle rastgele erişimdir, ancak bazen bir uygulama tablo taramasından memnun olur ve davranışını değiştiremezsiniz (ISV uygulaması). Başvurular çoğunlukla okunuyor, çoğunlukla yazılıyor mu veya aradaki bir yerde mi?

  • Kurtarma / yük devretme döneminde performans SLA'ları var mı?

Brent'in görevi, dev bir depolama havuzu olduğunu ve her şeyin onu paylaştığını varsayar. Bu, fiziksel disklerin nadiren boşta olduğu ve dolayısıyla erişimin çoğunun rasgele olduğu anlamına gelir. Durumunuz buysa, o zaman tavsiye geçerlidir ve çoğunlukla buna katılıyorum. Bu tür bir stratejinin yönetilmesi çok daha kolay olsa da, mutlaka (a) ortamınızda neler olduğu veya (b) ortamınız için en iyi çözüm hangisi değildir.

Endeks bakımı külfetli ise, bunu daha az agresif bir şekilde yapmayı düşünün ve / veya maliyeti hafta boyunca amortismana tabi tutun (yani haftada bir kez yoğun bakım yerine günde bir kez hafif bakım yapın).

SortInTempdbKullanıcı veritabanlarında gerçekleşen günlük tutma miktarını azaltma seçeneğini de açabilirsiniz .


Vay, tam cevap. Muhtemelen tüm araştırmaları yapmak benim için biraz zaman alacak, ama beni doğru yolda yönlendirdiğinden şüphem yok. Şu anki stratejimiz aslında bakımı hem yeniden yapılanma hem de yeniden yapılanma açısından daha az agresif bir şekilde yürütmek. Oradan bahsettiğiniz diğer faktörler hakkında daha fazla araştırma yapacağım.
dev_etter

1
@dev_etter: Sadece birkaç faktör listeledim; daha çok var. Ana nokta ilk cümledir. Eğer çevrenizi düşünürken bunu aklınızda tutarsanız, kararınızı doğru bir şekilde yönlendirecektir. Her şey bundan kaynaklanıyor. (Ayrıca, tüm bunlar SSD'lerin dahil olmadığını varsayar.)
Jon Seigel

FWIW, bir şeyi tamamen gözden kaçırmıştım - iş adımındaki gerçek komut dosyası (kaynak yerine), minimum parçalanma yüzdesi 1 olan her dizine hitap edecek şekilde yapılandırıldı. İş şimdi 8 yerine 3 saatten biraz fazla sürüyor. Daha az agresif olma öneriniz doğruydu. Benim hatam, işin zaten daha az agresif olmak için uygulandığını düşündüğümde yalan söyledi. Bu yaklaşım muhtemelen bizim için en iyisidir, hala dokun ve git ama zaten biraz acıyı hafifletti.
dev_etter

@JonSeigel Bu yanıta tamamen katılıyorum. Seyahatlerimde çoğu DBA'nın tek bir havuzu veya en azından aynı RAID düzeyinde bir diziyi paylaştığını görüyorum. Ben sadece 100 + TB veritabanları tek tek dosya gruplarını birleştirmek için 3 am 24x7 DBA'lar vardı ... ve tam olarak ne için? Disklerde tamamen rastgele IO vardı ve gecikme 15 ms idi. Bu noktada sadece 15 ms'yi göstermeli ve geliştiricilere beni yalnız bırakmalarını söylemeliyim.
Ooutwire

2

İdeal olarak, SADECE dikkat edilmesi gereken dizinler için yeniden organize olmanız / yeniden dizine eklemeniz gerekir, aksi takdirde kaynakları israf edersiniz ve potansiyel olarak başka sorunlara neden olursunuz.

Bir performans taban çizgisi oluşturmanız gerekir ve her değişiklik yaptığınızda, değişikliğinizin uygulanmaya değip değmeyeceğini belirlemek için performans değişikliğini taban çizgisiyle karşılaştırın.


Anında stratejimiz bunu yapmak - bu komut dosyasındaki minFragmentation ve rebuildThreshold değişkenleri için ayarları değiştireceğiz: sqlfool.com/2011/06/index-defrag-script-v4-1
dev_etter

0

Tamam, soru, bir dosyanın veya dosya kümesinin yapısı olan Veritabanı Dizinleri ile ilgilidir. Yukarıdaki yanıtları okumak, bir kişinin bir dosyanın içindeki dizinlerden değil, disk düzeyinde parçalanma hakkında konuştuğumuza inanmasına yol açacaktır. Bu tamamen ayrı konular.

Buradaki miyop yaklaşım, veri içerisindeki verileri alırken performans gösterecek ve Dizinler Parçalanırsa veya Yeniden Oluşturulursa OLTP Veritabanı iyileştirilir. Cevap Evet! Bununla birlikte, disk parçalanmasının da bir faktör olduğunu belirtmek önemlidir.

Genel olarak en düşük "maliyet"? Veritabanı Bakımı yapın. İkinci en düşük maliyet, veritabanını çıkarın, başka bir yere taşıyın, disklerinizi yeniden biçimlendirin ve Disk Bölümü Hizalama için en iyi uygulamaları izleyin http://msdn.microsoft.com/en-us/library/dd758814.aspx . Son olarak, Diskkeeper gibi 3. taraf gelişmiş bir birleştirici kullanın.

Bunun SADECE NTFS tipi depolama (örneğin Windows işletim sistemi) için önerildiğini ve bunun herhangi bir ürün için bir onay olmadığını veya Condusiv Technologies veya yan kuruluşlarına bağlı olmadığımı unutmayın.


2
Muhtemelen kategorik olarak "Cevap EVET!" Demekten kaçınmak istersiniz. diğer posterlerin tartıştığı sorunlu mekanlara. Brent Ozar'ın blog yazısında gösterdiği gibi bazen cevabın bazen "Evet" olduğu doğru olsa da, durum her zaman böyle değildir.
Max Vernon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.