Cassandra:高CPU使用率和无响应的数据库,可能是由于二级索引构建卡住 - 如何停止索引构建过程?

时间:2016-12-15 11:08:58

标签: cassandra cassandra-3.0 secondary-indexes

在运行Debian的VM上的单节点安装Cassandra 3.7中,我有一个大约有2000万行的表。为了能够选择过去几天插入的数据,我使用Datastax DevCenter 1.6.0执行语句,以在包含插入日期的列上创建二级索引:

CREATE INDEX srsdata_datetimeinserted ON ccp.srsdata(datetimeinserted);

语句本身运行得很快,然后,据我所知,索引创建过程在hte后台启动,其中一个内核的CPU负载接近100%。问题是,此CPU负载现在已超过24小时,并且即使在多次重新启动虚拟机也会再次启动。

为了检查索引创建过程,我已经运行

nodetool compactionstats 

但几乎从一开始它似乎停留在5.78%并且在过去24小时内根本没有变化:

pending tasks: 1
- ccp.srsdata: 1

id                                   compaction type       keyspace table   completed total    unit  progress
2616e5d0-c217-11e6-bbed-073889a74ba2 Secondary index build ccp      srsdata 655814    11350989 bytes 5.78%
Active compaction remaining time :   0h00m00s

我可以从表中进行SELECT而不是INSERT数据,甚至不能进入其他表,然后我得到

"Cassandra timeout during write query at consistency ONE 
(1 replica were required but only 0 acknowledged the write)"

如果我尝试删除索引,

DROP INDEX srsdata_datetimeinserted;

我得到了

"Timed out waiting for server respones".

我试图使用

停止索引构建
nodetool stop INDEX_BUILD 

但它没有任何区别。

如何停止并重启索引创建?或者还有其他的东西在运行,我还没有?

更新2017-01-12

我从未让索引创建过程停止,因此我最终从创建索引之前的备份中恢复虚拟服务器。

我还发现了Cassandra 3.4(http://www.doanduyhai.com/blog/?p=2058)中引入的新SASI索引,特别是SPARSE索引模式用于存储接近唯一的数据,例如毫秒时间戳。实际上,允许最多5个相同的值。所以我使用

创建了一个SASI索引
CREATE CUSTOM INDEX srsdata_datetimeinserted ON ccp.srsdata (datetimeinserted) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'SPARSE' };

创作花了大约20分钟,似乎工作正常,现在我可以进行像

这样的查询
select * from ccp.srsdata where datetimeinserted >= '2017-01-01 00:00:00+0000' AND datetimeinserted < '2017-01-01 15:00:00+0000';

0 个答案:

没有答案