[ https://issues.apache.org/jira/browse/HBASE-27458?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xiaolin Ha resolved HBASE-27458. -------------------------------- Resolution: Fixed Merged to master and branch-2+, thanks [~frostruan] for contributing, and thanks [~zhangduo] for reviewing. > Use ReadWriteLock for region scanner readpoint map > --------------------------------------------------- > > Key: HBASE-27458 > URL: https://issues.apache.org/jira/browse/HBASE-27458 > Project: HBase > Issue Type: Improvement > Components: Scanners > Affects Versions: 3.0.0-alpha-3 > Reporter: ruanhui > Assignee: ruanhui > Priority: Minor > Fix For: 2.6.0, 3.0.0-alpha-4, 2.4.17, 2.5.4 > > Attachments: jstack-2.png > > > Currently we manage the concurrency between the RegionScanner and > getSmallestReadPoint by synchronizing on the scannerReadPoints object. In our > production, we find that many read threads are blocked by this when we have a > heavy read load. > we need to get smallest read point when > a. flush a memstore > b. compact memstore/storefile > c. do delta operation like increment/append > Usually the frequency of these operations is much less than read requests. > It's a little expensive to use an exclusive lock here because for region > scanners, what it need to do is just calcaulating readpoint and putting the > readpoint in the scanner readpoint map, which is thread-safe. Multiple read > threads can do this in parallel without synchronization. > Based on the above consideration, maybe we can replace the synchronized lock > with readwrite lock. It will help improve the read performance if the > bottleneck is on the synchronization here. > !jstack.png! -- This message was sent by Atlassian Jira (v8.20.10#820010)