2012-08-09 39 views
6

我需要一些幫助提高卡桑德拉閱讀性能。隨着列族大小的增加,我擔心讀取性能會下降。我們有關於單節點Cassandra的以下統計信息。卡桑德拉亞馬遜EC2,閱讀性能實驗

操作系統:Linux的 - CentOS版本5.4(最終)
卡桑德拉版本: Apache的卡桑德拉 - 1.1.0
Java版本: 「1.6.0_14」 的Java(TM)SE運行環境(建立1.6.0_14-B08) 爪哇熱點(TM)64位服務器VM(構建14.0-B16,混合模式)

卡桑德拉配置:(cassandra.yaml)

  • rpc_server_type:HSHA
  • disk_access_mode:MMAP
  • concurrent_reads:64
  • concurrent_writes:32

平臺:亞馬遜EC2/RightScale的m1.Xlarge與4個短暫的磁盤實例與raid0。 (15 GB總內存,4個虛擬核心,2 ECU,翻ECU = 8)


實驗的配置: 我試圖做一些實驗用GC

卡桑德拉配置:
10 GB RAM分配給Cassandra堆,3500MB是堆新的大小。

JVM配置:
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中社區2.個
結果統計:

讀請求208至240每秒
寫請求18至28每秒
OS加載24.5至25。85
寫請求延遲127至160百萬分之一
讀取請求延遲82202至94612百萬分之一
OS發送的網絡流量每秒
OS收到網絡流量4338 KB平均每秒
OS磁盤隊列尺寸13至15 44646 KB平均請求
讀取請求待定25至32

OS磁盤延遲48至56毫秒
OS磁盤讀取吞吐量每秒
磁盤IOPS 4.6 MB讀取420每秒

IOWAIT 80%的CPU平均

空閒13%的CPU平均

Rowcache被禁用。


柱族
一列家族,我只是從通過CLI創建閱讀

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

列家族的SSTable大小= 7.10 GB,的SSTable計數= 2

XColFam專欄有59499904沒有。估計的行鍵(大多數是utf8文字,長度不定,通過mx4jtools估計)與像本質薄的列一樣,值爲0字節.....現在。

大多數行的列數應該非常少,也許是1到10,所以列名第一個組件的大約20到30個字節,第二個是8個字節的整數....組合列的第二個組件是動態的可以重複,但概率很低.......第一個組件在不同品種中重複,但行數可能不同。

我試過SnappyCompression來壓縮列族,但大小沒有變化。

我有一個計劃的服務,對於小時,20個線程運行,併爲多個密鑰隨機讀取請求(每個請求現在它的2個鍵)此列家庭和讀取整行,沒有列切片或等

我認爲它現在表現不好,因爲它每分鐘處理的請求太少。在柱子大小不是那麼大的時候,它工作得更好。大約是3到4 GB。

我擔心讀取性能會隨着列族大小的增加而降低得太快。

我也試圖調整一些GC和內存的東西,因爲在那之前我有很多的GC和CPU使用率。數據量較小時,波形非常小的iowait。


我該如何提高Cassandra的性能。您的建議將不勝感激。

+0

閱讀請求延遲82202到94612微秒... 82秒延遲? – Crowie 2013-09-09 10:19:43

回答

0

Look cassandra是相對I/O依賴的.EC實例具有「設計不足」的I/O(Xen虛擬化) 我的第一個建議是在實際的硬件上使用Cassandra,例如你可以使用SSD磁盤作爲CommitLog。看看Cassandra hardware proposals

但是,切換到自己的硬件有點激進的選擇。爲了保持與亞馬遜嘗試EBS

亞馬遜的彈性塊存儲(EBS)提供塊級存儲卷 與亞馬遜EC2實例中使用。 Amazon EBS卷的網絡連接數爲 ,並且獨立於 實例的生命週期。 Amazon EBS提供高可用性,高可靠性,可預測的存儲卷,可將其附加到正在運行的Amazon EC2實例並作爲實例中的設備公開。 亞馬遜EBS 特別適用於需要數據庫,文件 系統或訪問原始塊級存儲的應用程序。

Amazon EBS允許您創建從1 GB到1 TB的存儲卷,可以通過Amazon EC2實例將設備掛載爲設備。多個卷可以安裝到同一個實例。通過選擇預置IOPS卷,Amazon EBS使您可以根據需要調配特定級別的I/O性能。這使您可以預測性地擴展到每個Amazon EC2實例的數千IOPS。

還檢查了Cassandra Performance Testing on EC2

+0

Ephermal ec2實例本質上會比EBS更快並且沒有RAID10,它們會易受EBS氣泡(掛起或超時)的影響。也就是說,SSD實例的fi *實例的指數更快 – David 2013-10-31 19:47:59

+0

@David在ec2中甚至「自然」被虛擬化;)但是你是對的。他們速度很快,他們有更好的韌性。但EBS RAID通過隨機查找韌性更好地執行 [這裏比較](http://victortrac.com/blog/2010/01/02/ec2-ephemeral-disks-vs-ebs-volumes-in-raid/)。 這對於Cassandra的整體表現可能更有價值。 – aholbreich 2013-11-04 13:19:02

0

簡短的回答:行高速緩存和索引緩存。

如果您的數據包含將像大多數系統一樣頻繁閱讀的子集,請嘗試使用行緩存和鍵緩存。

行高速緩存是內存高速緩存,它將頻繁讀取的行完全存儲在內存中。請記住,如果你的數據是分散的,這可能不會產生預期的效果。

密鑰緩存通常更適合,因爲它只將分區密鑰及其偏移量存儲在磁盤上。這通常會幫助跳過Cassandra的查找(不需要使用分區索引和分區摘要)。

嘗試啓用密鑰空間和表的密鑰緩存並檢查你的性能。