2012-08-09 30 views
6

Cassandra okuma performansını iyileştirmek için yardıma ihtiyacım var. Sütun ailesinin büyüklüğü arttıkça okuma performansının düşmesinden endişe duyuyorum. Tek düğüm Cassandra'da şu istatistiklere sahibiz.Cassandra Amazon EC2, Okuma Performansı deneyleri

İşletim Sistemi: -: apache-cassandra-1.1.0
Java sürümü: "1.6.0_14" Java (TM) SE Runtime Linux CentOS (Final) 5.4
Cassandra versiyonu yayınlayacak Çevre (build 1.6.0_14-B08) Java HotSpot (TM) 64-bit sunucu VM (karışık modu 14.0-B16 inşa)

Cassandra Yapılandırma: (cassandra.yaml)

  • rpc_server_type: hsha
  • disk_access_mode: mmap
  • concurrent_reads: 64
  • concurrent_writes: 32

Platformu: 4 kısa ömürlü diskleri ile Amazon-EC2/Rightscale m1.Xlarge örneği raid0 ile. (15 GB toplam bellek, 4 Sanal Çekirdekler, 2 ECU toplam ECU = 8)


Deney konfigürasyonları: I GC ile

Cassandra yapılandırma bazı deneyler yapmak çalıştık :
10 GB RAM Cassandra Heap için ayrılmıştır, 3500MB Heap NEW boyutudur.

JVM Yapılandırma:
JVM_OPTS = "$ JVM_OPTS -XX: + UseParNewGC"
JVM_OPTS = "$ JVM_OPTS -XX: + UseConcMarkSweepGC"
JVM_OPTS = "$ JVM_OPTS -XX: + CMSParallelRemarkEnabled"
JVM_OPTS = "$ JVM_OPTS -XX: SurvivorRatio = 1000"
JVM_OPTS = "$ JVM_OPTS -XX: MaxTenuringThreshold = 0"
JVM_OPTS = "$ JVM_OPTS -XX: CMSInitiatingOccupancyFraction = 40"
JVM_OPTS = "$ JVM_OPTS -XX: + UseCMSInitiatingOccupancyOnly -XX: + UseCompressedOops "
OpsCenter topluluğunun 2.0'dan
Sonuç istatistikleri:

Oku 208 saniye
OS Yükü 24.5 başına 28-18 İstekleri ikinci
yazma başına 240 25 İstekleri.85
Yaz Talebi Gecikme 127 160 mikroları
Okuma İsteği Gecikme 82202 94612 için mikroları
Ağ Trafiği ikinci
OS Recieved Ağ Trafiği 4338 KB ort başına ikinci
OS disk sırası Boyut 13 ila 15. başına 44.646 KB ort Gönderilen OS Beklemede
Oku İstekleri istekleri 25 32-

OS Disk gecikme 48 ila 56 ms
OS disk okuma Verim ikinci
Disk GİB başına 4.6 Mb ikincibaşına 420 okur

IOWait% 80 işlemci ort

Bekleme% 13 işlemci ort

Rowcache devre dışı bırakılır.


Sütun Aile ben sadece CLI yoluyla oluşturulur gelen okuyorum kolon ailesinin
Bir

create column family XColFam 
with column_type='Standard' 
and comparator = CompositeType(BytesType,IntegerType)';" 

Sütun ailesi SSTable Boyut = 7.10 GB SSTable Sayısı = 2

XColFam sütun ailesi, 59499904 no'dur. tahmin edilen satır anahtarlarının (çoğu utf8 literal ile değişen uzunluk, mx4jtools ile tahmin edilir) doğada ince gibi sütunlar, 0 bayt değeri ile şimdi ......

Satırların çoğunun çok az sayıda sütunu olmalıdır, 1 ile 10 arasında olabilir, bu nedenle yaklaşık 20 ile 30 baytlık 1. kolon adı bileşeni ve 2.'si 8 baytlık tamsayıdır .... Bileşik sütunun 2. bileşeni Dinamik tekrarlanabilir ancak olasılık düşüktür. 1. bileşen çeşitlerde tekrarlanır ancak satırlardaki sütun sayısı farklı olabilir.

Sütun ailesini sıkıştırmak için SnappyCompression'u denedim ancak boyutta hiçbir değişiklik olmadı.

Ben vs. zamanlanmış tam satırları 20 konuda saatlerce çalışacak ve bu sütunda ailesine (istek başına artık 2 anahtarları için) birçok anahtarın rasgele okuma isteklerini yapmak ve okumak servisi, hiçbir sütun dilim ya sahip

Sanırım şimdi iyi performans göstermiyor çünkü her dakika çok az işlem yapıyor. Sütun ailesinin büyüklüğü o kadar büyük olmadığı zaman daha iyi çalışıyordu. 3 ila 4 GB civarındaydı.

Korkarım, sütun ailesinin boyutunun artmasıyla performansın çok hızlı bozulmasını okuyun.

Ayrıca bazı GC ve bellek öğelerini düzeltmeye çalıştım, çünkü bundan önce çok sayıda GC ve CPU kullanımı geçiriyordum. Veri boyutu daha küçük olduğunda ve dalga formunda çok küçük iowait vardı.


Cassandra performansını nasıl artırabilirim. Önerileriniz takdir edilecektir.

+0

Gecikme İsteğini Okuyun 82202 ila 94612 mikro ... 82 saniye gecikme süresi? – Crowie

cevap

0

Bak cassandra göreceli G/Ç bağımlıdır.EC örneklerinin tasarım gereği "yetersiz" I/O'ları vardır (Xen sanallaştırma) Ve ilk önerim Cassandra'yı bir denetiminizin olduğu gerçek donanımda kullanmaktır. örneğin CommitLog için SSD diski kullanabiliriz. Cassandra hardware proposals'a bakın.Bununla birlikte, kendi donanımına geçmek biraz radikal bir seçenektir.

Amazon Elastik Blok Store (EBS) EBS Amazon EC2 örnekleri ile kullanılmak üzere blok düzeyinde depolama hacimleri sağlar denemek Amazon ile kalmak için. Amazon EBS birimleri ağa bağlı ve örneğinin ömründen bağımsız olarak çalışır. Amazon EBS, çalışan Amazon EC2 örneğine bağlanabilen ve örnekte bir aygıt olarak ortaya çıkabilen son derece güvenilir, öngörülebilir depolama birimleri sağlar. Amazon EBS özellikle bir veritabanı, sistemi veya ham blok düzeyindeki depolamaya erişim gerektiren uygulamalar için uygundur.

Amazon EBS 1 GB Amazon EC2 örnekleri tarafından cihazlar olarak monte edilebilir 1 TB depolama birimlerini oluşturmak için olanak sağlar. Aynı örneğe birden çok birim bağlanabilir. Amazon EBS, bir Provisioned IOPS birimi seçerek, istenirse belirli bir I/O performansı düzeyini sağlamanıza olanak tanır. Bu, Amazon EC2 örneğinde binlerce IOPS'ye ölçeklendirilebilmenizi sağlar. Satır Önbellek ve Anahtar Caches:

Ayrıca Cassandra Performance Testing on EC2

+0

Ephermal ec2 örnekleri, doğaya göre EBS'den daha hızlı olacak ve RAID10 olmadan, EBS kabarcıklarına (asılı veya zamanaşımı) duyarlı olacaktır. Bu SSD örnekleri ile fi * örneklerin bile daha hızlı "doğa" sanallaştırılmış – David

+0

@David daha hızlı olduğunu söyledi) Ama haklısın. Hızlılar ve daha iyi toklukları var. Ancak EBS RAID, rastgele arama gücü tarafından daha iyi performans gösterir [Buraya kıyasla] (http://victortrac.com/blog/2010/01/02/ec2-ephemeral-disks-vs-ebs-volumes-in-raid/). Bu, çok çeşitli Cassandra performansı için daha değerli olabilir. – aholbreich

0

Kısa Cevap göz atın.

Verileriniz, çoğu sistem gibi okunabilecek alt kümeler içeriyorsa, satır önbelleklerini ve önbelleklerini kullanmayı deneyin.

Satır önbellekleri, sık sık okunan satırları bellekte tamamen saklayan bir bellek önbelleğidir. Veri yayılmışsanız, bunun istenen bir etkisi olmayabileceğini unutmayın.

Anahtar önbellekleri genellikle yalnızca bölümleme anahtarlarını ve bunların uzaklıklarını diskte depoladıklarından daha uygundur. Bu genellikle Cassandra tarafından yapılan bir aramayı atlamaya yardımcı olur (bölüm indekslerini ve bölüm özetlerini kullanmaya gerek yoktur).

Anahtar boşluğu ve tablo ile anahtar önbelleği etkinleştirmeyi deneyin ve performansınızı kontrol edin.