2012-08-09 40 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的查找(不需要使用分区索引和分区摘要)。

尝试启用密钥空间和表的密钥缓存并检查你的性能。