(原创)Cassandra数据库的优化总结

来源:互联网 发布:mac usb接口没反应 编辑:程序博客网 时间:2024/06/07 06:50

(原创)Cassandra数据库的优化总结

[TOC]
实验室的源代码分析系统的Cassandra数据库优化过程从十一放假开学起cassandra一直出现的超时,崩溃等一系列问题就一直得不到解决。现在已经解决,把解决过程记录与此。

0x01:分析原因

起初分析原因,认为是一些基础设置不够到位,例如cassandra.yaml等配置不够好。因为cassandra不只是查询速度慢,其他操作例如插入之类的也会出现链接失败的错误,因此第一步主要优化Linux和JVM设置。

0x02:优化Linux:

(1)下载jemalloc

一个在内存分配上比linux自带的malloc(ptmalloc)要优秀的分配工具。
Github地址:https://github.com/jemalloc/jemalloc
下载release版本之后,
解压
./configure
Make
Make install
即可安装完毕。

(2)关闭swap

最大限度的使用物理内存:

/etc/sysctl.conf
这里写图片描述
完成之后保存,执行sysctl -p 令其生效。

0x03:接下来优化JVM的配置:

Cassandra是用java语言开发的,可以通过修改JVM的配置来进行优化:

JVM配置在cassandra-evn.sh中:

/usr/local/apache-cassandra-3.9/conf/cassandra-evn.sh
添加如下两行,第一行是优化线程压缩级别,减少内存占用。
第二行是使用压缩后的指针,这一条仅仅在x64位机器上有用。
这里写图片描述

0x04:Cassandra本身的配置:

/usr/local/apache-cassandra-3.9/conf/cassandra.yaml
这里写图片描述

并发数目一般来说按照默认读写就可以。(8*num_cores=32)

disk_access_mode: mmap
使用内存映射的方法来进行文件IO,而不是传统的流式读写。

write性能提升5%
memtable_allocation_type: offheap_objects

0x05经过以上的配置之后,重启数据库,同时重启工作系统发现可以运行一段时间,但是之后又出现了崩溃。

针对工作系统和数据库的log进行分析,发现最初的问题产生源于一条数据库查询:
这里写图片描述

这个数据库查询函数出现了查询超时导致的cassandra内部崩溃,从而导致后来的一系列异常。
0x06:
因此针对其中的两条SQL语句进行数据库优化,添加二级索引:

针对project的优化
这里写图片描述
这里写图片描述

针对file的优化
这里写图片描述
这里写图片描述
完成索引添加之后,数据库再未出现崩溃的现象。今后如果在此出现也可以通过0x06里面分析出来的瓶颈进行针对性的进一步优化。

参考资料:
(1) cassandra官方文档
(2) Cassandra操作和性能优化 http://eric100.blog.51cto.com/2535573/1770036

原创粉丝点击