Hello,

I find the compaction of my secondary index takes a long time and occupy a
lot of CPU.

 INFO [CompactionExecutor:8] 2012-07-16 12:03:16,408 CompactionTask.java
(line 213) Compacted to [XXX].  71,018,346 to 9,020 (~0% of original) bytes
for 3 keys at 0.000022MB/s.  Time: 397,602ms.

The stack of this over load Thread is:
"CompactionReducer:5" - Thread t@1073
   java.lang.Thread.State: RUNNABLE
at java.util.AbstractList$Itr.remove(AbstractList.java:360)
at
org.apache.cassandra.db.ColumnFamilyStore.removeDeletedStandard(ColumnFamilyStore.java:851)
at
org.apache.cassandra.db.ColumnFamilyStore.removeDeletedColumnsOnly(ColumnFamilyStore.java:835)
at
org.apache.cassandra.db.ColumnFamilyStore.removeDeleted(ColumnFamilyStore.java:826)
at
org.apache.cassandra.db.compaction.PrecompactedRow.removeDeletedAndOldShards(PrecompactedRow.java:77)
at
org.apache.cassandra.db.compaction.ParallelCompactionIterable$Reducer$MergeTask.call(ParallelCompactionIterable.java:224)
at
org.apache.cassandra.db.compaction.ParallelCompactionIterable$Reducer$MergeTask.call(ParallelCompactionIterable.java:198)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
- locked <4be5863d> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

I guess this problem due to huge amount of columns in my index. The column
which is indexed only have 3 kinds of values, and one possible value
have several million of record, so this index have several million columns.
Compact these columns take a long time.

I find a similar issue on the jira:
https://issues.apache.org/jira/browse/CASSANDRA-3592

Is there any way to work around this issue?  Is there any way to improve
the efficiency to compact this index?

Reply via email to