Hızlı Kullanım için ES Gereksinimlerini Tahmin Etme


11

Bir SQL veritabanını gün boyunca periyodik olarak sorgulayan bir uygulamamız var. Nispeten büyük miktarlarda veri için bireysel taleplerle serpiştirilmiş sıfır veya sadece hafif aktivite dönemleri vardır. Bu istekler geldiğinde, birincil amaç verileri hızlı bir şekilde iletmektir ve ikincil amaç bunu maliyet etkin bir şekilde yapmaktır. Uygulamanın doğası gereği, verilerin / dizinlerin önceki sorgudan (farklı kullanıcılar, verilerin farklı bölümlerinde çalışan) RAM'de önbelleğe alınması pek olası değildir.

Nispeten istikrarlı bir kullanım deneyimi olan bir sistem için, disk sırası uzunluğunu gözlemlemek ve bu sayıyı nispeten küçük tutmak için kural kuralını duydum. Bu özellikle AWS'de çalışacak ve burada 100 IOPS başına 1 disk kuyruğu uzunluğunun makul olduğunu belirtelim.

Böyle bir sistem için ES gereksinimlerini nasıl tahmin edebilirim? Disk kuyruğu uzunluğu, tek tek, hızlı sorgularla uğraşırken güvenilir bir gösterge midir? Dikkate almam gereken başka metrikler var mı?


Devam eden bir yazı var mı, yoksa bu okuma ağır mı?
Jack diyor ki topanswers.xyz

@JackDouglas: Bu% 98 okuma. Bir miktar damlama var.
Eric J.

1
Sonraki soru: okumalar dağınık mı, yoksa “göreceli olarak büyük miktarlarda veri için bireysel talepleriniz” sıralı GÇ yapıyor mu?
Jack diyor ki topanswers.xyz

@JackDouglas: En büyük okumalar, WHERE yantümcesinin dizine karşılık geldiği ancak dizinde bulunandan daha fazla veri döndüreceği şekilde dizinlenmiş bir görünüm yoluyla yapılır. Bunun ardışık IO derecesi için ne anlama geldiğinden emin değilim. Temel IO alt sistemi AWS EBS olduğundan, bunun fiziksel erişimi nasıl etkilediğinden emin değilim.
Eric

Temel IO alt sistemi performansın tutarlılığını etkiler , ancak yerel depolamaya benzer şekilde dağınık v sıralı erişimi önemser. Bu büyük okumalar, tipik olarak kaç farklı blok vuruyor? Dizin taramasının kendisi sıralı olacaktır, ancak şimdiye kadar sizi doğru anladıysam tablo erişimi olmayacaktır.
Jack diyor ki topanswers.xyz

Yanıtlar:


10

SQL Server'da IO için her zaman düşündüğüm birincil metrik, IOP'ler veya Disk Kuyruk Uzunluğu değil, disk çıktısıdır (sec / reads ve sec / writes). Genel olarak, veritabanları bir diske kaç işlem atabileceğiniz değil, bu işlemlerin ne kadar hızlı tamamlandığı ile ilgilidir. Genel kural 20 ms'den / operasyondan daha azına sahip olmaktır (daha düşük olan her zaman daha iyidir). Bu makalede daha fazla ayrıntı bulunabilir .

Disk Kuyruk Uzunluğu sahte bir durumdur ve artık geçerli değildir. Bununla ilgili sorun, değerin tek bir sürücü için kuyruğu ölçmesidir, ancak artık RAID'ler, SAN'lar ve diğer dağıtılmış depolama çağında yaşıyoruz, bu değeri anlamlı bir sayıya doğru şekilde çevirmenin bir yolu yok. Performans metrikleri için harika bir başlangıç noktası, Quest / Dell'den bu afişin neden veya neden önemli olmadıklarına dair çok fazla bilgi ve açıklama sağlamasıdır. Hepsini kullanmak zorunda değilsiniz, ama bunlar bir başlangıç.

ES'nizi test etmek için, iş yükünüzü en üst düzeyde anlamanız gerekir. Kaç işlem ve ne kadar önbellek var? Bunları bilmedikçe ve ölçmedikçe, yargılamak gerçekten zor. Depolama alanınızı test etmek için iş yükleri oluşturabilir ve SQLIO gibi araçları kullanabilirsiniz , ancak uygun bir test oluşturmak için iş yükü modellerine ihtiyacınız olacaktır.

Son olarak, AWS hakkında bir not: Bildiğim kadarıyla, Amazon AWS'de IO performansını garanti etmeyecektir. Bunun nedeni öncelikle depolamanın büyük bir paylaşılan kaynak olması ve belirli bir depolama alanında sizin ve komşularınızın kalıplarını ölçmeniz imkansız olmasıdır (bkz. Gürültülü Komşu sorunu ).

Benim tavsiyem mümkün olduğunca fazla bellek ayırmak. SQL Server yalnızca arabellek havuzunda (LRU-K tabanlı) basınç ve boşluk altındaysa, malzemeleri bellekten çıkarır. Bu nedenle, arabellek havuzunuz veritabanının çoğunu bellekte saklayabilirse, bazı hızlı performansları azaltabilirsiniz. Ayrıca, önbellek nesnelerini "sıcak" tutabilecek taktikleri düşünün. Son olarak, SQL 2014 ve yeni Hekaton özelliğine dikkat edin.


"SQL Server, yalnızca baskı altındaysa bir şeyleri bellek dışına itecek" veya bir kontrol noktasında ?
Jack diyor ki topanswers.xyz

5
Denetim noktası, arabellekten nesneleri kaldırmaz, ancak kurtarma için kirli sayfaları diske yazar. Yine de tampon havuzundaki nesneleri koruyacaktır.
Mike Fal

Ayrıntılı cevap için teşekkür ederim. AWS artık saniyede satın alınan G / Ç işlem sayısının% 99,9 oranında gerçekleştirilebilmesini sağlayan Temel Hazırlık IOPS adlı premium bir özelliğe sahiptir. Bir IO işleminin 16K veri bloğunu okumak veya yazmak olarak tanımlandığını düşünüyorum.
Eric

@MikeFal: Özellikle bu seri model için test metodolojisi hakkında düşünceleriniz var mı? Sadece tek bir sorgu çalıştırın ve söz konusu sayaçları izlemek? Sayaçları izleyerek bir dizi (normalde periyodik) sorgu çalıştırılsın mı?
Eric

Evet, PIOPS'u tanıyorum. Belirttiğim gibi, kaç işlem yapılabileceğini bilmek istemiyorum, ne kadar hızlı olduklarını bilmek istiyorum. Ve bu, PIOP'larda bile AWS tarafından garanti edilebilecek bir şey değil.
Mike Fal
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.