[ 
https://issues.apache.org/jira/browse/HBASE-20234?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16427506#comment-16427506
 ] 

Anastasia Braginsky commented on HBASE-20234:
---------------------------------------------

{quote}bq.Be careful on per-store counters. HBase is already crippled keeping 
counts (one of the main users of CPU). The per-region counters are already 
costly.
{quote}
I see. If we plan not to add any counter it would be quite difficult to keep 
the metrics. Let's think we only want to keep a number of in-memory-flushes 
that happened for a region. I can, for example, add a single per-region counter 
that will be updated upon every in-memory-flush of any related store. However, 
it will not save us too much CPU power. The CPU will be busy with contention on 
updating a single "global" counter, where alternatively CPU will be busy with 
updating "local" counters. With "global" counter you save some memory. The only 
CPU power that is saved is the one that goes for collecting "local" counters 
into "global" one. What do you think?

On a separate note, if HBase has so many counters, probably the big part of 
them are AtomicInteger (for concurrency). The ingrementAndGet() method of 
atomic integer is based on Compare-And-Swap (CAS) atomic hardware instruction. 
This is not efficient, as CAS repeats in a while-loop till success. While an 
alternative Fetch-And-Increment (F&I) atomic hardware instruction always 
succeeds upon its first invocation. Bottom line, if you change this 
implementation you save at least half of the CPU power that goes to those 
increments all over the HBase... What do you think about that?

 

> Expose in-memory compaction metrics
> -----------------------------------
>
>                 Key: HBASE-20234
>                 URL: https://issues.apache.org/jira/browse/HBASE-20234
>             Project: HBase
>          Issue Type: Sub-task
>            Reporter: stack
>            Assignee: Anastasia Braginsky
>            Priority: Major
>
> Hard to glean insight from how well in-memory compaction is doing currently. 
> It dumps stats into the logs but better if they were available to a 
> dashboard. This issue is about exposing a couple of helpful counts. There are 
> already by-region metrics. We can add a few for in-memory compaction (Help me 
> out [~anastas]... what counts would be best to expose).
> Flush related metrics include....
> {code}
> Namespace_default_table_tsdb-tree_region_cfbf23e7330a1a2bbde031f9583d3415_metric_flushesQueuedCount:
>  {
> description: "Number flushes requested/queued for this region",
> value: 0
> {
> description: "The number of cells flushed to disk",
> value: 0
> },
> {
> description: "The total amount of data flushed to disk, in bytes",
> value: 0
> },
> ...
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to