You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by OpenInx <op...@gmail.com> on 2019/01/24 09:04:10 UTC

About the performance of In-Memory Compaction.

Hi

Recently, I made some performance tests for evaluating DefaultMemstore and
CompactintMemstore.

*Performance when using the DefaultMemstore.*

[image: image.png]

*Performance when using the CompactingMemstore.*

[image: image.png]

We can see that the latency control of CompactingMemstore (especially the
p999) is awesome.
P999 < 50ms when enable in-memory compaction,  while 50ms < p999 < 100ms
when using the
default memstore.  Besides, other metrics such as qps/p99/avg are amost the
same.  *Obviously,*
*the CompactingMemstore performs better in our test,  compared to
DefaultMemstore. *

So my question is: In HBASE-20188, we've discussed whether setting the
CompactingMemstore
as the default memstore, while we didn't do that. Is there any other deeper
consideration ?
Read performance degradation after enable IMC ? stability consideration ?
Slower memstore
flush compared to branch-1 ?

(Actually, I read the comments in HBASE-20188 serveral times, and found the
context is quite
complex, and did got the points, so create this thread)

*BTW,  my test env are following:*

5 Nodes : 12*800G SSD / 24 Core / 128GB memory
(50G onheap + 50G offheap for each RS, and allocated 36G for BucketCache,
used asyncfswal).
The offheap 50G was not be used in my 100% put test (maybe parts of them
used by Netty), because
the MSLAB is still onheap, I configure this because i want to keep the
configuration be same as the online
cluster.

I created a table by following command:
hbase(main):001:0> n_splits = 100
hbase(main):002:0> create 'ycsb-test', 'C', {SPLITS => (1..n_splits).map
{|i| "user#{1000+i*(9999-1000)/n_splits}"}}

and use the workload:
table=ycsb-test
columnfamily=C
recordcount=10000000000
operationcount=10000000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
fieldlength=100
fieldcount=1
#clientbuffering=true
readallfields=true
writeallfields=true
readproportion=0
updateproportion=0
scanproportion=0
insertproportion=1.0
requestdistribution=zipfian

the key configs of RS:
hbase.hregion.memstore.block.multiplier=5
hbase.hregion.memstore.flush.size=268435456
hbase.regionserver.global.memstore.size=0.4
hbase.regionserver.global.memstore.size.lower.limit=0.625
hbase.hregion.compacting.memstore.type=BASIC # NONE in DefaultMemstore.

Command to start the ycsb:
nohup ./bin/ycsb run hbase20-mdh -P workload -s -threads 120 >
hbase20-ssd-put-10000000000-rows  2>&1 &