Nikita Amelchev created IGNITE-29082:
----------------------------------------

             Summary: Fix repeated iterations over local partitions in cache 
metrics
                 Key: IGNITE-29082
                 URL: https://issues.apache.org/jira/browse/IGNITE-29082
             Project: Ignite
          Issue Type: Improvement
            Reporter: Nikita Amelchev
            Assignee: Nikita Amelchev


{{CacheMetricsMessage(CacheMetrics)}} reads the 10 entries and partitions 
counters of {{CacheMetricsImpl}} through separate getters, and each getter 
calls {{getEntriesStat()}}, which iterates over all local partitions 4 times 
({{offHeapEntriesCount()}}, {{localSize(null)}}, {{localSizeLong(null)}} and 
its own loop): 40 passes per snapshot instead of one. The snapshots are taken 
on each metrics update for every cache with statistics enabled, in the 
{{tcp-disco-msg-worker}} thread. The {{CacheSize}}, {{HeapEntriesCount}} and 
{{OffHeap*EntriesCount}} gauges also make 4 passes each on every read by metric 
exporters.

JMH, 50 caches with 1024 partitions: snapshots of all caches 39.8 ms -> 2.45 
ms, reading of the cache metric registries 22.4 ms -> 3.9 ms.

Also fix the {{CacheMetrics}} javadoc: {{getSize()}} and {{getKeySize()}} don't 
always return 0, {{getCacheSize()}} counts only primary copies.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to