SQL Server 2008R2 için en uygun sürücü yapılandırması


19

Aşağıdaki kurulumu olan SQL Server 2008 R2 çalıştıran oldukça meşgul bir veritabanı sunucum var:

  • SATA RAID 1 (2 Sürücü) - İşletim Sistemi / Programlar
  • SAS RAID 10 (4 Sürücü) - SQL Veritabanı Dosyaları (veri ve günlükler)
  • SAS RAID 1 (2 Sürücü) - TempDB (veri ve günlükler)

Bu sunucuya ek sürücü ekleyemediğimi varsayarsak, elimdeki yapılandırmayı en iyi şekilde kullandım mı? Yoksa burada veri dosyalarından günlüklerin izole edildiği başka bir şema düşünmeli miyim?

Güncelleme:

Daha fazla donanım bilgisi isteyenler için:

  • SATA sürücüler (OS / Program bölümü için kullanılır): WD 7200 RPM 3 Gb / sn 3,5 İnç SATA
  • Diğer dizilerde kullanılan SAS diskler şunlardır: Seagate 15K RPM 6 Gb / sn 3,5 inç SAS
  • Kullanılan RAID denetleyicisi: LSI 9260-8i SAS / SATA 6 Gb 8 bağlantı noktası

Güncelleme 2:

Ben seçim için aşağıdaki uygun seçenekler var gibi aldığımız görüşlere dayanarak, görünüşe - Ben hangi bana söyleyebilir birine ödül ödüllendireceğinizi olasılıkla ben açıkladık bu ortamda en iyi olmak için:

  1. Her şeyi olduğu gibi bırak - muhtemelen daha iyisini yapmayacağım
  2. Toplam 2 diskten oluşması için 2 SAS RAID 1 sürücümü mevcut RAID 10 dizime taşıyın
  3. Günlük dosyalarımı SAS RAID 1'e taşıyın ve / veya TempDB'yi (veriler veya günlükler) RAID 10'a geri yerleştirin

2. güncellemeniz orijinal sorunuzla aynı soruları soruyor, bu yüzden orijinal cevap geçerlidir. “... genel olarak anlattığım ortamın en iyisi olması muhtemeldir” ... bize iş yükünün herhangi bir analizini göstermediniz, sadece "oldukça meşgul", bu yüzden yine aynı cevap geçerli .
Mark Storey-Smith

Piyasadaki Yüksek Performanslı NVMe ve diğer SSD disklerle RAID, SQL Server Disk Configuration Best Practices açısından artık çok önemli değil . Disk Havuzları (Depolama Alanları) ilerlemenin yoludur. Bununla birlikte, diskle ilgili performans sorunlarını daha iyi gidermek için birimleri mantıksal olarak ayırmanız gerekir.
Yüzler

Yanıtlar:


14

Bu sorunun varyantları yarı düzenli olarak gelir:

Ayrıca veri / günlük ayırma "en iyi uygulama" hakkında topuz kavgalar da vardır.

Bu sunucunun ne yaptığını daha ayrıntılı analiz etmeden, daha önce verildiği gibi aynı tavsiyeler geçerlidir.

  • İşletim sistemi için RAID 1
  • Veri / günlükler / tempdb için RAID 10 (6 disk)

Çok az iğ bulunan bir bölmede nadiren herhangi bir nokta vardır. Daha büyük GİB kapasitesine sahip tek bir dizi, tipik olarak iş yükünüzün topaklarını ve darbelerini 2 küçük diziden daha iyi emer.

Test edilmeye değer bir varyant OS sürücüsüne tempdb koymaktır. Bunu, yalnızca yapılandırmanın adil bir şekilde karşılaştırılmasını sağlamak için tekrar tekrar yürütebileceğiniz temsili bir iş yükünüz varsa yapın. Üretimde bu düzenlemeye giderseniz, tempdb büyümesinin kısıtlandığından emin olun, böylece yanlışlıkla OS sürücüsünde tüm boş alanı tüketmeyin.

İşletim sistemi sürücülerinizin 7200RPM altlıkları olduğu göz önüne alındığında, OS sürücü yapılandırmasındaki tempdb herhangi bir fayda sağladıysa şaşırırım.


7

Her şey iş yükünüze bağlıdır, ancak sadece 6 sürücü ile seçeneklerinizi sınırlar. İş yükünüz, sıralama, karma tablolar ve anlık görüntü yalıtımı gibi şeyler için tempdb'ye büyük ölçüde bağımlı değilse, RAID 10'da 6 SAS sürücüsünü birlikte kullanmaktan daha iyi olabilirsiniz. Ancak, bunu kanıtlayacak metrikleri biliyorsanız veya varsa tempdb yoğun bir şekilde kullanılır, o zaman olduğu gibi ayrı tutmalısınız.


Cevabınız için teşekkürler, aralıkların yapılandırmasını değiştirmek (ne yazık ki) bu sunucu üretimde olduğu için bir seçenek değildir. Tempdb'yi tekrar RAID 10'a geçirmeyi ve tüm günlük dosyalarını RAID 1'e koymayı merak ediyorum - bu akıllı bir seçenek mi?
Mart'ta DanP

2
SQL Server'ın tüm işlemleri günlüğe kaydetme işleminin bir parçası olarak fiziksel olarak yazması gerektiğini unutmayın, böylece yapılandırmanızda mümkün olan en hızlı yazma performansını istersiniz. RAID 10, RAID 1'den daha iyi yazma performansı sunar, bu yüzden günlükleri daha hızlı birime bırakırım.
Patrick Keisler

2

Bu, "çok meşgul" ile ne demek istediğinize bağlıdır: farklı iş yükü kalıpları (ağır ya da değil, toplu işlemler ortak ya da değil, eşzamanlı erişim düzeyi, ancak birçok değişkenin üçü), herhangi bir iğ düzenlemesinin performansı.

Günlükleri verilerden ayıran ağır bir durum için, her yazma hem günlüğü hem de veri dosyalarını güncellemeyi içerdiğinden, önemli bir fark yaratabilir, bu nedenle, her iki dosya kümesi de aynı iğ kümesinde ise, makul miktarda ekstra kafa çevirme içerir .

İş yükünüze (ve bu sürücülerin ve bunlar ile makine arasındaki herhangi bir denetleyicinin özellikleri) daha fazla başvurmadan, üç birim için gitmeye meyilli olurum: biri OS + programları ve tempdb (veri), biri ana DB için veri ve günlükler için üçüncü (hem tempdb hem de ana DB).

Tabii ki iş yükleriniz yazma işlemlerinde çok hafifse, veri ve günlükleri ayrı tutmak konusunda çok fazla zaman harcamamalısınız, çünkü performans farkı çok az olacaktır ve onlar için tüm bir birimi ayırmak oldukça israf edilebilir olacaktır. Uzay.


Çevremizi kesinlikle "ağır yazma" olarak tanımlıyorum - sorumu Pazartesi günü daha ayrıntılı donanım özellikleriyle güncelleyeceğim.
DanP

OP'nin sahip olduğu sürücü sayısı hakkında bir fikriniz var mı? Daha çok günlük dosyaları için Raid 1 düşünüyorum. Bu, yazma amaçları için harika bir seçenek gibi gelmiyor ve AFAIK günlük dosyaları sınırlı okunmuyor, ancak yazılıyor ..
Marian

Makinenin donanımı hakkında ek özellikler ekledim.
DanP

1
Bu yanlış anlama, veri / günlük ayırma sıralarının çoğunun kökünde olabilir, bu yüzden özür dilerim ama bunu çağıracağım. "... her yazma hem günlüğü hem de veri dosyalarını güncellemeyi içerdiğinden" - hayır, içermez. Veri sayfalarına yazma işlemleri her değişiklikte değil kontrol noktasında gerçekleşir.
Mark Storey-Smith

1
@DavidSpillett Doğru, bölünmenin her zaman faydalı olduğu durumlar olacaktır. Anahtar, yapılandırmanın söz konusu iş yükü için yararlı olduğunu test etmeniz ve doğrulamanızdır.
Mark Storey-Smith

2

Asıl cevap ihtiyaçlarınıza bağlıdır, ancak genel olarak "farklı dizilere veri koy ve oturum aç", "tempdb'yi kendi dizisine koy" dan daha önemlidir.

Kullanabileceğiniz disk sayısı göz önüne alındığında, başlangıç ​​noktam:

  1. İki sürücü, RAID 1 - İşletim sistemi, yürütülebilir dosyalar, sayfa dosyası.
  2. Dört sürücü, RAID 5 - Tüm veri dosyaları (alternatif olarak RAID 1 + 0)
  3. İki sürücü, RAID 1 - Tüm günlük dosyaları

Yapılması gereken , farklı sürücü yapılandırmalarının performansını test etmek için SQLIO'yu kullanmaktır .


Bu kesinlikle okuduğum tavsiyenin "diğer tarafını" temsil eder. Bir üretim ortamında "denemek" başvurmadan hangi seçeneklerin daha iyi olacağını belirlemek için kesin bir yöntem olsaydı.
Mart'ta DanP

2
@DanP Ben şahsen Mark'ın tavsiyesi ile giderdim ve sürücülerin geri kalanıyla (işletim sistemi hariç) bir RAID10 seçerdim. Günlük dosyaları yoğun yazıyor ve düşündüğüm kadarıyla RAID 1'in sunduklarından daha iyi performans gerektiriyor. Ama ben bir donanım uzmanı değilim. Sadece 2 sentim.
Marian

2
Bence sadece daha iyi bir sunucuya geçmiş (tür) başarısız geçiş deneyiminden geliyor, ancak daha kötü performans ile bahsetmeliyim. Bu yeni sunucuda gerçek bir yükü test etmedik, hiç şansımız olmadı, sunucu zamanında hazır değildi. Üretime geçmeden ÖNCE sunucu testinin ZORUNLU olması gerekir. Vurgu için özür dilerim. Bu yüzden tüm göçler / yükseltmeler için mantra: TEST, TEST, TEST, ... mümkün olduğunca korkutucu test.
Marian

1
RAID 5 mi yoksa SQLIOSIM ile mi başlayacağınızdan emin değil ... SQLIOSIM bir doğruluk ve stres test aracıdır , bir performans veya yük test aracı değildir. İş yükü-Z için config-X ve config-Y'nin performansının karşılaştırılmasında kesinlikle yeri yoktur. Size söyleyecek olan tek şey, SQLIOSIM çalıştırmasında config-X'in config-Y'ye karşı ne kadar iyi performans gösterdiği. İş yükü-Z'nin performansını karşılaştırmak istiyorsanız, iş yükü-Z'yi test edin.
Mark Storey-Smith

1
@GreenstoneWalker "RAID1 yazmak için RAID1 + 0'dan daha hızlı" saçmalıktır. Bu fikir nereden geldi?
Mark Storey-Smith

-1

DB'yi (OLTP vs depolama) için ne kullandığınıza bağlı olarak, yapılandırmanız iyi bir genel yapılandırma gibi görünür. Daha fazla diskiniz olsaydı, daha fazla seçeneğiniz olurdu.

TempDB'niz için diski RAID 0 (şerit) olarak değiştirdiyseniz daha iyi performans elde edebilirsiniz. Hata riskinizi artırır, ancak TempDB yalnızca verileri arabelleğe aldığından veri kaybı yaşayamazsınız. Bu yüzden çoğu insan bunu makul bir değiş tokuş olarak görür. Bir yedek bulundurun (veya etkin bir yedek).

Bahsetmediğiniz, ancak deneyebileceğiniz bir şey (daha önce yapmadıysanız): Microsoft, TempDB'nizi birkaç dosya (CPU başına bir tane) üzerine bölmenizi önerir. Tabii ki, ayrı disklerde olmaları en iyisidir, ancak sadece ayrı dosyalara sahip olmak yardımcı olur. http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx


4
Tempdb birçok şey için kullanılır, ancak onu bir veritabanı olarak kabul etmeyin ve RAID 0'a yerleştirin. RAID 0 birimi başarısız olursa, SQL Server başlatılamayacaktır.
Patrick Keisler

Gerçekten önerildiği gibi çekirdek başına bir geçici db oluşturduk, ama bu noktayı da yükselttiğiniz için teşekkürler :)
DanP

1
Bu öneriler çok iyi değil ve her çevre için uygun değil. İlki daha önce @PatrickKeisler tarafından geçiyordu. İkincisi, Paul Randal'ın bir süre önce çürüttüğü bir efsanedir. Makale şu: Günde bir SQL Server DBA efsanesi: (12/30) tempdb her işlemci çekirdeği için her zaman bir veri dosyasına sahip olmalıdır . Bu nedenle MS belgeleri yanlış olabilir, ezberlemeyin.
Marian

2
"TempDB sadece veri arabelleğe aldığı için, veri kaybı yaşayamazsınız" ... ve eminim ki sistem kullanıcıları X saat kesinti süreleri sırasında acı çekeceklerini takdir edeceklerdir. yedek disk veya b) bir DBA yardım masasına tempdb'nin cep telefonundan nasıl taşınacağını açıklamaya çalışır.
Mark Storey-Smith
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.