SQL Server 2K / 2K5 / 2K8 ve Katı Hal Diskleri: Spesifik Optimizasyonlar?


9

Burada kimse katı hal sürücülerde SQL Server çalıştırıyor mu? Herhangi bir optimizasyon ipucu buldunuz mu? Özellikle SQL Server, özellikle MLC SSD sürücüler nemesis oldukları için küçük rasgele yazma işlemleri gerçekleştirme sıklığını azaltmanın yolları ile ilgileniyorum.

Elbette yapılabilecek bazı belirgin optimizasyonlar vardır: SSD'den okuma-ağır veriler sunulmalı ve yazma-ağır şeyler geleneksel eğirme disklerine bırakılmalıdır. Doğal olarak işlem günlükleri de buna dahildir!

Elbette yeterli bütçe göz önüne alındığında, X25-E veya Vertex Ex serisi veya çeşitli kurumsal düzey teklifler gibi SLC SSD disklerini kullanmak isteyebilirsiniz. Ancak MLC SSD kurulumlarına fayda sağlayabilecek ipuçlarıyla da ilgileniyorum. Bence bu ilginç bir alan. Müşterilerimin müşterilerinden birinin küçük bir bütçesi ve çok fazla büyüyen bir veri kümesi var ve iyi bir performans seviyesini korumak için yüze yakın sorgunun tam bir yeniden yazımıyla karşı karşıya kalıyorlar. Bununla birlikte, 500 $ 'dan daha az RAM ve SSD alanının onlara binlerce (muhtemelen on binlerce) dolar değerinde geliştirici süresinden daha büyük bir performans kazancı sağlayabileceğine dair şüphelerim var.

Yanıtlar:


3

SQL Server'ın yaptığı küçük, rastgele yazma miktarını azaltarak ne demek istediğinizden emin değilim. SQL Server veri sayfalarını yalnızca denetim noktaları sırasında yazar - bu nedenle yazma sayısını sınırlamanın tek yolu denetim noktası aralığını değiştirmektir veya çok fazla RİA işlemi yapmamaktır. Başka bir şey mi demek istediniz?

Gördüğüm SSD'lerin tüm uygulamalarında (bir avuç), önerdiğinizin tam tersi - SSD'lerin en iyi kullanımı yazma-ağır işlem günlükleri ve tempdb için gibi görünüyor - temelde en büyük ben / O alt sistemi darboğazını ve SSD'leri oraya yapıştırın - arama süresi ve gecikme süresi düşük bir sabite indirgenir.

MS'in ürettiği bu araştırma makalesine göz atın (maalesef SQL Server özellikleri hakkında ayrıntılı olarak ayrıntılı bilgi verilmemiştir): Sunucu Deposunu SSD'lere Geçirme: Tradeoff'ların Analizi .

Bu yardımcı olur umarım!


MS makalesine bu bağlantı için teşekkür ederiz. Bu hayal kırıklığı yaratan özelliklerden kısa, değil mi? :) Ne yazık ki küçük rastgele yazmalar SSD'lere uygun olabilecek bir şey. Özetle, küçük (yani 4KB) bir yazma için bile SSD tüm bloğu belleğe okumalı, değiştirmeli ve tekrar yazmalıdır. Mevcut nesil flash bellek böyle çalışır. Harika SSD'ye genel bakış makalesi: anandtech.com/storage/showdoc.aspx?i=3531&p=1
John Rose

2

SQL Server IO özelliklerini değiştiremezsiniz. Veri dosyaları için temel disk erişimi birimi 8Kb'lık bir sayfadır. Onları çoğunlukla bir kontrol noktası sırasında yazacak, ancak mümkün olduğunda bunları da tembel olarak yazacaktır.
SQL, veri diskine yazma işleminin dönmeden önce tamamlanmasını beklemez, yalnızca tamamlanması gereken günlük yazma işlemidir. Bir diskte yalnızca bir veritabanı günlüğü tutabiliyorsanız, sıralı yazmalar olur ve normal hızlı sabit disklerde iyi olur.
SQL'in bakış açısından vurduğu performans, diskleri okumak zorunda olduğu zamandır. Daha fazla bellek verebilirseniz, SQL bellekte daha fazla veri sayfası tutacaktır, bu da herhangi bir disk, SSD veya başka türlü daha hızlıdır. Açıkçası, uygun dizinler oluşturarak disk okuma sayısını da azaltabilirsiniz. Bir SSD'nin bu okumalara da yardımcı olacağını umuyorum çünkü muhtemelen rastgele olacaklar ve tahrik kafalarının hareket etmesini beklediler.
Burada hangi veritabanı boyutundan bahsettiğimizi bilmiyorum, ama HyperOS'a bakmak isteyebilirsiniz. Aslında bir yedek olarak SSD veya 2,5 inçlik bir disk ile DDR2 ram çubuklarının bir yükü olan sata diskler yaparlar. Sunucunun erişim düzeni o zaman önemli değildir. Günlükleri böyle bir şeye koymam. Günlükler, verilerinizi tutarlı tutan şeydir, güvenilir bir ortama gitmeleri gerekir ve yedek SSD ve bataryaya ve sunucunun muhtemelen bir UPS vb.Ama rağmen, günlüklerimi gerçek bir sabit diskte bulundurmama konusunda hala kolay olmazdım bir çeşit hataya dayanıklı RAID dizisinde.


1

Küçük rasgele işlemler, kafa arama gecikmesi nedeniyle geleneksel disklerin düşmanıdır ... SSD'ler tam olarak bunu ele almakta mükemmeldir.

Uzun, sıralı işlemlerde, standart diskler oldukça iyi performans gösterir, bu nedenle SSD'leri kullanmanın bir amacı olmaz (elbette performans açısından).


2
SSD'ler, sıfıra yakın arama gecikmesi nedeniyle rastgele okuma işlemlerinde harikadır. SSD yazma işleminin tüm bir flaş bloğunu (tipik olarak 128KB) okumayı, içeriği değiştirmeyi ve tüm bloğu tekrar flash'a yazmayı içermesi nedeniyle rastgele yazma işlemlerinde daha az adroittirler. Uzun ve sıralı işlemlere gelince, daha iyi tüketici düzeyindeki SSD'ler (Intel, OCZ Vertex, Samsung) 200MB / sn'den fazla okuma ve 80MB-150MB yazma elde eder, bu da tek bir dönen diskin üretebileceğinin çok üzerindedir.
John Rose

Emin misiniz? Bir yazma işleminin bir veri bloğunu tekrar yazmadan önce neden okuması gerektiğini anlamıyorum ... yazılacak veriler bilgisayarın belleğinde olmalı, değil mi?
Massimo

2
@Massimo: İşletim sistemi yalnızca birkaç bayt yazar, ancak SSD 128 KB birim (sayfa) olarak çalışır (genellikle). Sadece 128KB'lik bir sayfa yazabilir, daha az değil, daha fazla bir şey yazamaz. Bu nedenle, bir sayfanın ortasını değiştirdiğinizde, sürücü tüm sayfayı okur, ortayı günceller ve ardından eski konumu geçersiz kılarken yeni sayfayı genellikle başka bir yere yazar.
Cristian Ciupitu

Cristian Ciupitu doğru. Bazı SSD'lerde bu, yerleşik bir önbellek (Indilinx denetleyicisini kullanan tüm sürücülerin 64MB önbelleğe sahip olduğuna inanıyorum) ve belki de etkinleştirilirse işletim sisteminin yazma önbelleği ile azaltılır. 64MB önbellek bile sınırlamalara sahiptir - çok sayıda yazma yapan bir veritabanı sunucusu için 64MB yeterli olmayabilir. Bellenim üreticileri çok fazla özellik yayınlamaz, ancak daha iyi yazılımların (Intel, Indilinx) bu yükü en aza indirmek için 128KB'lik bir sayfada küçük rastgele yazımları tutmak için bazı akıllı yeniden sıralama / yığınlama yaptıkları varsayılır.
John Rose

Önbelleği anladığımdan, bu kadar endişeli olduğunuz bu küçük yazıların birçoğunu kurtaracak. Veritabanları çok fazla doğrusal okuma / yazma yapmak için tasarlandığından, bu kadar önemli değil. Eminim SSD doğrusal bir okuma olduğu için hala daha iyi çalışır, seq değil. Yani, veri ve SSD arasında hala boşluklar olacaktır, arama süresini ortadan kaldıracaktır.
Pyrolistics

0

Henüz yorum dizisine eklemek için yeterli nokta yok, ancak SSD'lerde herhangi bir şey için DB'nin sayfa boyutunu / çoklu okuma sayısını SSD'nin sayfa boyutunun katlarına ayarlarsanız, bu bir sorun olmamalıdır.

SQL Server üzerinde uzun zamandır çalışmadığım için bu seçeneklerin mevcut olup olmadığından emin değilim. Son birkaç yıldır Oracle ve DB2 yapıyorum ve DB disk özelliklerine uygun şekilde ayarlandığı için bu endişelerinizi çözecektir.


0

Veritabanı dosyalarının saklandığı bölümün hizalanmasını öneririm.

Ayrıca perf (ldf ve TempDB) için RAID 0'a ne olduğuna karar vermenizi ve RAID 1 (mdf) üzerine kritik verileri yerleştirmenizi tavsiye ederim.

Üçüncü olarak, sürücünün ürün yazılımını ve ayrıca SATA denetleyici ürün yazılımını / sürücülerini güncellemeniz gerekir. Böylece donanım şirketine ve geliştiricilerine mükemmelliği sizin için optimize etme şansı verirsiniz.


RAID 0 hiçbir zaman bir veritabanı sunucusu için kullanılmamalıdır. Tek bir sürücü arızalanırsa, disk değiştirilene ve eksik veriler teypten geri yüklenene kadar veritabanı kapatılır (günlük kaydı dahil).
mrdenny

Paranın nesne olmadığı bir dünyada, her şey batarya destekli L1 önbellekte çalıştırılmalıdır. Bankacılık endüstrisinde, LDF dosyası mdf kadar önemlidir. Bilimsel hesaplama için MDF gerçekten% 100 olması gereken tek dosyadır.
GregC
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.