diff --git a/include/rocksdb/perf_context.h b/include/rocksdb/perf_context.h
index a1d803c2c..7c52f571e 100644
--- a/include/rocksdb/perf_context.h
+++ b/include/rocksdb/perf_context.h
@@ -223,6 +223,10 @@ struct PerfContext {
 
   std::map<uint32_t, PerfContextByLevel>* level_to_perf_context = nullptr;
   bool per_level_perf_context_enabled = false;
+
+  uint64_t rangelock_acquire;
+  uint64_t rangelock_acquired_root;
+  uint64_t rangelock_acquire_modified_root;
 };
 
 // Get Thread-local PerfContext object pointer
diff --git a/monitoring/perf_context.cc b/monitoring/perf_context.cc
index 5e0d5ac25..c85e8c498 100644
--- a/monitoring/perf_context.cc
+++ b/monitoring/perf_context.cc
@@ -129,6 +129,10 @@ PerfContext::PerfContext(const PerfContext& other) {
     *level_to_perf_context = *other.level_to_perf_context;
   }
   per_level_perf_context_enabled = other.per_level_perf_context_enabled;
+
+  rangelock_acquire = other.rangelock_acquire;
+  rangelock_acquired_root = other.rangelock_acquired_root;
+  rangelock_acquire_modified_root = other.rangelock_acquire_modified_root;
 #endif
 }
 
@@ -224,6 +228,10 @@ PerfContext::PerfContext(PerfContext&& other) noexcept {
     other.level_to_perf_context = nullptr;
   }
   per_level_perf_context_enabled = other.per_level_perf_context_enabled;
+
+  rangelock_acquire = other.rangelock_acquire;
+  rangelock_acquired_root = other.rangelock_acquired_root;
+  rangelock_acquire_modified_root = other.rangelock_acquire_modified_root;
 #endif
 }
 
@@ -321,6 +329,9 @@ PerfContext& PerfContext::operator=(const PerfContext& other) {
     *level_to_perf_context = *other.level_to_perf_context;
   }
   per_level_perf_context_enabled = other.per_level_perf_context_enabled;
+  rangelock_acquire = other.rangelock_acquire;
+  rangelock_acquired_root = other.rangelock_acquired_root;
+  rangelock_acquire_modified_root = other.rangelock_acquire_modified_root;
 #endif
   return *this;
 }
@@ -412,6 +423,10 @@ void PerfContext::Reset() {
       kv.second.Reset();
     }
   }
+
+  rangelock_acquire = 0;
+  rangelock_acquired_root = 0;
+  rangelock_acquire_modified_root = 0;
 #endif
 }
 
diff --git a/utilities/transactions/range_locking/locktree/concurrent_tree.cc b/utilities/transactions/range_locking/locktree/concurrent_tree.cc
index 74d65f710..7f81aa6b5 100644
--- a/utilities/transactions/range_locking/locktree/concurrent_tree.cc
+++ b/utilities/transactions/range_locking/locktree/concurrent_tree.cc
@@ -82,6 +82,8 @@ void concurrent_tree::locked_keyrange::prepare(concurrent_tree *tree) {
 void concurrent_tree::locked_keyrange::acquire(const keyrange &range) {
     treenode *const root = &m_tree->m_root;
 
+    PERF_COUNTER_ADD(rangelock_acquire, 1);
+
     treenode *subtree;
     if (root->is_empty() || root->range_overlaps(range)) {
         subtree = root;
@@ -91,6 +93,10 @@ void concurrent_tree::locked_keyrange::acquire(const keyrange &range) {
         subtree = root->find_node_with_overlapping_child(range, cmp_hint);
     }
 
+    if (subtree == root) {
+        PERF_COUNTER_ADD(rangelock_acquired_root, 1);
+    }
+
     // subtree is locked. it will be unlocked when this is release()'d
     invariant_notnull(subtree);
     m_range = range;
diff --git a/utilities/transactions/range_locking/locktree/concurrent_tree.h b/utilities/transactions/range_locking/locktree/concurrent_tree.h
index fabda7294..19e3b1ac3 100644
--- a/utilities/transactions/range_locking/locktree/concurrent_tree.h
+++ b/utilities/transactions/range_locking/locktree/concurrent_tree.h
@@ -57,6 +57,19 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved.
 #include "treenode.h"
 #include "keyrange.h"
 
+#ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
+#define ROCKSDB_SUPPORT_THREAD_LOCAL
+#endif
+
+#include "rocksdb/perf_context.h"
+#include "monitoring/perf_level_imp.h"
+#include "monitoring/perf_context_imp.h"
+
+using rocksdb::PerfLevel;
+using rocksdb::perf_level;
+using rocksdb::perf_context;
+
+
 namespace toku {
 
 // A concurrent_tree stores non-overlapping ranges.
diff --git a/utilities/transactions/range_locking/locktree/treenode.cc b/utilities/transactions/range_locking/locktree/treenode.cc
index 725991f7d..c9f2b4e7e 100644
--- a/utilities/transactions/range_locking/locktree/treenode.cc
+++ b/utilities/transactions/range_locking/locktree/treenode.cc
@@ -51,6 +51,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved.
 
 #include <portability/toku_race_tools.h>
 
+
 // TODO: source location info might have to be pulled up one caller
 // to be useful
 void treenode::mutex_lock(void) { toku_mutex_lock(&m_mutex); }
@@ -519,6 +520,10 @@ treenode *treenode::lock_and_rebalance_left(void) {
     treenode *child = m_left_child.get_locked();
     if (child) {
         treenode *new_root = child->maybe_rebalance();
+        // psergey:
+        if (m_is_root && new_root != child) {
+            PERF_COUNTER_ADD(rangelock_acquire_modified_root, 1);
+        }
         m_left_child.set(new_root);
         child = new_root;
     }
@@ -529,6 +534,10 @@ treenode *treenode::lock_and_rebalance_right(void) {
     treenode *child = m_right_child.get_locked();
     if (child) {
         treenode *new_root = child->maybe_rebalance();
+        // psergey:
+        if (m_is_root && new_root != child) {
+            PERF_COUNTER_ADD(rangelock_acquire_modified_root, 1);
+        }
         m_right_child.set(new_root);
         child = new_root;
     }
diff --git a/utilities/transactions/range_locking/locktree/treenode.h b/utilities/transactions/range_locking/locktree/treenode.h
index f23324f03..ab3b5a6ee 100644
--- a/utilities/transactions/range_locking/locktree/treenode.h
+++ b/utilities/transactions/range_locking/locktree/treenode.h
@@ -63,6 +63,18 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved.
 #include "txn_subst.h"
 #include "locktree/keyrange.h"
 
+#ifndef ROCKSDB_SUPPORT_THREAD_LOCAL
+#define ROCKSDB_SUPPORT_THREAD_LOCAL
+#endif
+
+#include "rocksdb/perf_context.h"
+#include "monitoring/perf_level_imp.h"
+#include "monitoring/perf_context_imp.h"
+
+using rocksdb::PerfLevel;
+using rocksdb::perf_level;
+using rocksdb::perf_context;
+
 namespace toku {
 
 // a node in a tree with its own mutex
