This is an automated email from the ASF dual-hosted git repository.

ibessonov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 7c0abb78ebe IGNITE-24684 Remove IoStatisticsHolder from the code 
(#5329)
7c0abb78ebe is described below

commit 7c0abb78ebe889b77083a25c6b61cf5e12183988
Author: Ivan Bessonov <[email protected]>
AuthorDate: Mon Mar 3 13:33:14 2025 +0300

    IGNITE-24684 Remove IoStatisticsHolder from the code (#5329)
---
 .../tree/AbstractBplusTreeReusePageMemoryTest.java |   4 +-
 .../ignite/internal/pagememory/PageSupport.java    |  13 ---
 .../pagememory/datapage/DataPageReader.java        |  12 +--
 .../datapage/NonFragmentableDataPageReader.java    |  12 +--
 .../pagememory/datastructure/DataStructure.java    |  45 +++------
 .../internal/pagememory/freelist/FreeListImpl.java | 107 ++++++---------------
 .../internal/pagememory/freelist/PagesList.java    | 105 ++++++++------------
 .../pagememory/inmemory/VolatilePageMemory.java    |  12 +--
 .../pagememory/metric/IoStatisticsHolder.java      |  47 ---------
 .../pagememory/metric/IoStatisticsHolderNoOp.java  |  55 -----------
 .../persistence/PersistentPageMemory.java          |  25 +----
 .../ignite/internal/pagememory/tree/BplusTree.java | 101 +++----------------
 .../internal/pagememory/util/PageHandler.java      |  42 +++-----
 .../pagememory/freelist/FreeListImplTest.java      |   4 +-
 .../PersistentPageMemoryTableStorage.java          |   4 +-
 .../pagememory/VolatilePageMemoryDataRegion.java   |   4 +-
 .../pagememory/index/hash/HashIndexTree.java       |  11 +--
 .../pagememory/index/sorted/SortedIndexTree.java   |  11 +--
 .../mv/AbstractPageMemoryMvPartitionStorage.java   |   3 +-
 .../storage/pagememory/mv/BlobStorage.java         |  26 ++---
 .../pagememory/mv/CommitWriteInvokeClosure.java    |   4 +-
 .../mv/PersistentPageMemoryMvPartitionStorage.java |   7 +-
 .../mv/RemoveWriteOnGcInvokeClosure.java           |   4 +-
 .../storage/pagememory/mv/BlobStorageTest.java     |   3 +-
 24 files changed, 158 insertions(+), 503 deletions(-)

diff --git 
a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/AbstractBplusTreeReusePageMemoryTest.java
 
b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/AbstractBplusTreeReusePageMemoryTest.java
index 15f004829fb..5cb286168cc 100644
--- 
a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/AbstractBplusTreeReusePageMemoryTest.java
+++ 
b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/AbstractBplusTreeReusePageMemoryTest.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.pagememory.tree;
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.freelist.FreeListImpl;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
 
 /**
@@ -43,8 +42,7 @@ public abstract class AbstractBplusTreeReusePageMemoryTest 
extends AbstractBplus
                 pageMem,
                 rootId,
                 initNew,
-                null,
-                IoStatisticsHolderNoOp.INSTANCE
+                null
         );
     }
 }
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/PageSupport.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/PageSupport.java
index d8d05502fd2..ad40cea4777 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/PageSupport.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/PageSupport.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.pagememory;
 
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 
 /**
  * Class responsible for acquiring/releasing and locking/unlocking pages.
@@ -36,18 +35,6 @@ public interface PageSupport {
      */
     long acquirePage(int groupId, long pageId) throws 
IgniteInternalCheckedException;
 
-    /**
-     * Returns an absolute pointer to a page, associated with the given page 
ID. Each page obtained with this method must be released by
-     * calling {@link #releasePage(int, long, long)}. This method will 
allocate a page with the given ID if it doesn't exist.
-     *
-     * @param groupId    Group ID.
-     * @param pageId     Page ID.
-     * @param statHolder Statistics holder to track IO operations.
-     * @return Page pointer.
-     * @throws IgniteInternalCheckedException If failed.
-     */
-    long acquirePage(int groupId, long pageId, IoStatisticsHolder statHolder) 
throws IgniteInternalCheckedException;
-
     /**
      * Releases pages acquired by any of the {@code acquirePage} methods.
      *
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/DataPageReader.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/DataPageReader.java
index c6a0afde5b8..dbaa137bfb3 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/DataPageReader.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/DataPageReader.java
@@ -24,7 +24,6 @@ import 
org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.DataPagePayload;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -33,19 +32,16 @@ import org.jetbrains.annotations.Nullable;
 public class DataPageReader {
     private final PageMemory pageMemory;
     private final int groupId;
-    private final IoStatisticsHolder statisticsHolder;
 
     /**
      * Constructs a new instance.
      *
-     * @param pageMemory       Page memory that will be used to lock and 
access memory.
-     * @param groupId          ID of the cache group with which the reader 
works (all pages must belong to this group)
-     * @param statisticsHolder used to track statistics about operations
+     * @param pageMemory Page memory that will be used to lock and access 
memory.
+     * @param groupId ID of the cache group with which the reader works (all 
pages must belong to this group)
      */
-    public DataPageReader(PageMemory pageMemory, int groupId, 
IoStatisticsHolder statisticsHolder) {
+    public DataPageReader(PageMemory pageMemory, int groupId) {
         this.pageMemory = pageMemory;
         this.groupId = groupId;
-        this.statisticsHolder = statisticsHolder;
     }
 
     /**
@@ -70,7 +66,7 @@ public class DataPageReader {
 
         do {
             final long pageId = pageId(currentLink);
-            final long page = pageMemory.acquirePage(groupId, pageId, 
statisticsHolder);
+            final long page = pageMemory.acquirePage(groupId, pageId);
 
             try {
                 long pageAddr = pageMemory.readLock(groupId, pageId, page);
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/NonFragmentableDataPageReader.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/NonFragmentableDataPageReader.java
index 1e6ba1c21e4..faa291aa882 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/NonFragmentableDataPageReader.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datapage/NonFragmentableDataPageReader.java
@@ -24,7 +24,6 @@ import 
org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.DataPagePayload;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -33,19 +32,16 @@ import org.jetbrains.annotations.Nullable;
 public abstract class NonFragmentableDataPageReader<T> {
     private final PageMemory pageMemory;
     private final int groupId;
-    private final IoStatisticsHolder statisticsHolder;
 
     /**
      * Constructs a new instance.
      *
-     * @param pageMemory       page memory that will be used to lock and 
access memory
-     * @param groupId          ID of the cache group with which the reader 
works (all pages must belong to this group)
-     * @param statisticsHolder used to track statistics about operations
+     * @param pageMemory page memory that will be used to lock and access 
memory
+     * @param groupId ID of the cache group with which the reader works (all 
pages must belong to this group)
      */
-    public NonFragmentableDataPageReader(PageMemory pageMemory, int groupId, 
IoStatisticsHolder statisticsHolder) {
+    public NonFragmentableDataPageReader(PageMemory pageMemory, int groupId) {
         this.pageMemory = pageMemory;
         this.groupId = groupId;
-        this.statisticsHolder = statisticsHolder;
     }
 
     /**
@@ -65,7 +61,7 @@ public abstract class NonFragmentableDataPageReader<T> {
 
         final long pageId = pageId(link);
 
-        final long page = pageMemory.acquirePage(groupId, pageId, 
statisticsHolder);
+        final long page = pageMemory.acquirePage(groupId, pageId);
 
         try {
             long pageAddr = pageMemory.readLock(groupId, pageId, page);
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datastructure/DataStructure.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datastructure/DataStructure.java
index be7e700a702..5497d63ecee 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datastructure/DataStructure.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/datastructure/DataStructure.java
@@ -33,8 +33,6 @@ import org.apache.ignite.internal.pagememory.FullPageId;
 import org.apache.ignite.internal.pagememory.PageIdAllocator;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
 import org.apache.ignite.internal.pagememory.util.PageHandler;
@@ -166,14 +164,13 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * <p>NOTE: Each page obtained with this method must be released by 
calling {@link #releasePage}.
      *
      * @param pageId Page ID.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Page pointer.
      * @throws IgniteInternalCheckedException If failed.
      */
-    protected final long acquirePage(long pageId, IoStatisticsHolder 
statHolder) throws IgniteInternalCheckedException {
+    protected final long acquirePage(long pageId) throws 
IgniteInternalCheckedException {
         assert partitionId(pageId) >= 0 && partitionId(pageId) <= 
MAX_PARTITION_ID : toDetailString(pageId);
 
-        return pageMem.acquirePage(grpId, pageId, statHolder);
+        return pageMem.acquirePage(grpId, pageId);
     }
 
     /**
@@ -249,7 +246,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param h Handler.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -257,10 +253,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             long pageId,
             PageHandler<?, R> h,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.writePage(pageMem, grpId, pageId, h, null, null, 
intArg, lockFailed, statHolder);
+        return PageHandler.writePage(pageMem, grpId, pageId, h, null, null, 
intArg, lockFailed);
     }
 
     /**
@@ -271,7 +266,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -280,10 +274,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.writePage(pageMem, grpId, pageId, h, null, arg, 
intArg, lockFailed, statHolder);
+        return PageHandler.writePage(pageMem, grpId, pageId, h, null, arg, 
intArg, lockFailed);
     }
 
     /**
@@ -295,7 +288,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -305,10 +297,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.writePage(pageMem, grpId, pageId, page, h, null, 
arg, intArg, lockFailed, statHolder);
+        return PageHandler.writePage(pageMem, grpId, pageId, page, h, null, 
arg, intArg, lockFailed);
     }
 
     /**
@@ -320,7 +311,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -330,10 +320,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             PageIo init,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.writePage(pageMem, grpId, pageId, h, init, arg, 
intArg, lockFailed, statHolder);
+        return PageHandler.writePage(pageMem, grpId, pageId, h, init, arg, 
intArg, lockFailed);
     }
 
     /**
@@ -344,7 +333,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -353,10 +341,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.readPage(pageMem, grpId, pageId, h, arg, intArg, 
lockFailed, statHolder);
+        return PageHandler.readPage(pageMem, grpId, pageId, h, arg, intArg, 
lockFailed);
     }
 
     /**
@@ -368,7 +355,6 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -378,10 +364,9 @@ public abstract class DataStructure implements 
ManuallyCloseable {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        return PageHandler.readPage(pageMem, grpId, pageId, page, h, arg, 
intArg, lockFailed, statHolder);
+        return PageHandler.readPage(pageMem, grpId, pageId, page, h, arg, 
intArg, lockFailed);
     }
 
     /**
@@ -392,7 +377,7 @@ public abstract class DataStructure implements 
ManuallyCloseable {
      * @throws IgniteInternalCheckedException if failed.
      */
     protected final void init(long pageId, PageIo init) throws 
IgniteInternalCheckedException {
-        PageHandler.initPage(pageMem, grpId, pageId, init, 
IoStatisticsHolderNoOp.INSTANCE);
+        PageHandler.initPage(pageMem, grpId, pageId, init);
     }
 
     /**
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/FreeListImpl.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/FreeListImpl.java
index 27bc6de0d70..cd22b370c58 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/FreeListImpl.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/FreeListImpl.java
@@ -36,8 +36,6 @@ import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.Storable;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.LongListReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
@@ -89,8 +87,6 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
     private final PageHandler<ReuseBag, Long> rmvRow;
 
-    private final IoStatisticsHolder statHolder;
-
     private class WriteRowHandler implements PageHandler<Storable, Integer> {
         @Override
         public Integer run(
@@ -100,12 +96,11 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                 long pageAddr,
                 PageIo iox,
                 Storable row,
-                int written,
-                IoStatisticsHolder statHolder
+                int written
         ) throws IgniteInternalCheckedException {
             written = addRow(pageId, pageAddr, iox, row, written);
 
-            putPage(((DataPageIo) iox).getFreeSpace(pageAddr), pageId, 
pageAddr, statHolder);
+            putPage(((DataPageIo) iox).getFreeSpace(pageAddr), pageId, 
pageAddr);
 
             return written;
         }
@@ -199,18 +194,16 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
          * @param freeSpace Page free space.
          * @param pageId Page ID.
          * @param pageAddr Page address.
-         * @param statHolder Statistics holder to track IO operations.
          */
         protected void putPage(
                 int freeSpace,
                 long pageId,
-                long pageAddr,
-                IoStatisticsHolder statHolder
+                long pageAddr
         ) throws IgniteInternalCheckedException {
             if (freeSpace > MIN_PAGE_FREE_SPACE) {
                 int bucket = bucket(freeSpace, false);
 
-                put(null, pageId, pageAddr, bucket, statHolder);
+                put(null, pageId, pageAddr, bucket);
             }
         }
     }
@@ -225,8 +218,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                 long pageAddr,
                 PageIo iox,
                 CachedIterator it,
-                int written,
-                IoStatisticsHolder statHolder
+                int written
         ) throws IgniteInternalCheckedException {
             DataPageIo io = (DataPageIo) iox;
 
@@ -238,7 +230,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                     row = it.next();
 
                     // If the data row was completely written without 
remainder, proceed to the next.
-                    if ((written = writeWholePages(row, statHolder)) == 
COMPLETE) {
+                    if ((written = writeWholePages(row)) == COMPLETE) {
                         continue;
                     }
 
@@ -252,7 +244,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                 assert written == COMPLETE;
             }
 
-            writeRowHnd.putPage(io.getFreeSpace(pageAddr), pageId, pageAddr, 
statHolder);
+            writeRowHnd.putPage(io.getFreeSpace(pageAddr), pageId, pageAddr);
 
             return written;
         }
@@ -280,8 +272,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                 long pageAddr,
                 PageIo iox,
                 ReuseBag reuseBag,
-                int itemId,
-                IoStatisticsHolder statHolder
+                int itemId
         ) throws IgniteInternalCheckedException {
             DataPageIo io = (DataPageIo) iox;
 
@@ -305,7 +296,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                         // It is possible that page was concurrently taken for 
put, in this case put will handle bucket change.
                         pageId = maskPartId ? 
PageIdUtils.maskPartitionId(pageId) : pageId;
 
-                        putIsNeeded = removeDataPage(pageId, pageAddr, io, 
oldBucket, statHolder);
+                        putIsNeeded = removeDataPage(pageId, pageAddr, io, 
oldBucket);
                     }
                 }
 
@@ -314,7 +305,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                         reuseBag.addFreePage(recyclePage(pageId, pageAddr));
                     }
                 } else if (putIsNeeded) {
-                    put(null, pageId, pageAddr, newBucket, statHolder);
+                    put(null, pageId, pageAddr, newBucket);
                 }
             }
 
@@ -342,8 +333,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
             PageMemory pageMem,
             long metaPageId,
             boolean initNew,
-            @Nullable AtomicLong pageListCacheLimit,
-            IoStatisticsHolder statHolder
+            @Nullable AtomicLong pageListCacheLimit
     ) throws IgniteInternalCheckedException {
         super(
                 freeListNamePrefix,
@@ -356,7 +346,6 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
         );
 
         this.pageListCacheLimit = pageListCacheLimit;
-        this.statHolder = statHolder;
 
         this.reuseList = this;
 
@@ -493,7 +482,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
         try {
             do {
-                written = writeSinglePage(row, written, statHolder);
+                written = writeSinglePage(row, written);
             } while (written != COMPLETE);
         } catch (IgniteInternalCheckedException | Error e) {
             throw e;
@@ -521,7 +510,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
             while (written != COMPLETE || it.hasNext()) {
 
                 if (written == COMPLETE) {
-                    written = writeWholePages(it.next(), statHolder);
+                    written = writeWholePages(it.next());
 
                     continue;
                 }
@@ -530,7 +519,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
                 DataPageIo initIo = null;
 
-                long pageId = takePage(row.size() - written, row, statHolder);
+                long pageId = takePage(row.size() - written, row);
 
                 if (pageId == 0L) {
                     pageId = allocateDataPage(row.partition());
@@ -538,7 +527,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                     initIo = DataPageIo.VERSIONS.latest();
                 }
 
-                written = write(pageId, writeRowsHnd, initIo, it, written, 
FAIL_I, statHolder);
+                written = write(pageId, writeRowsHnd, initIo, it, written, 
FAIL_I);
 
                 assert written != FAIL_I; // We can't fail here.
             }
@@ -581,19 +570,18 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
      * data page.
      *
      * @param row Row to process.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Number of bytes written, {@link #COMPLETE} if the row was fully 
written, {@code 0} if data row was ignored because it is less
      *      than the max payload of an empty data page.
      * @throws IgniteInternalCheckedException If failed.
      */
-    private int writeWholePages(Storable row, IoStatisticsHolder statHolder) 
throws IgniteInternalCheckedException {
+    private int writeWholePages(Storable row) throws 
IgniteInternalCheckedException {
         assert row.link() == 0 : row.link();
 
         int written = 0;
         int rowSize = row.size();
 
         while (rowSize - written >= minSizeForDataPage) {
-            written = writeSinglePage(row, written, statHolder);
+            written = writeSinglePage(row, written);
         }
 
         return written;
@@ -604,14 +592,13 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
      *
      * @param row Row to write.
      * @param written Written size.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Number of bytes written, {@link #COMPLETE} if the row was fully 
written.
      * @throws IgniteInternalCheckedException If failed.
      */
-    private int writeSinglePage(Storable row, int written, IoStatisticsHolder 
statHolder) throws IgniteInternalCheckedException {
+    private int writeSinglePage(Storable row, int written) throws 
IgniteInternalCheckedException {
         DataPageIo initIo = null;
 
-        long pageId = takePage(row.size() - written, row, statHolder);
+        long pageId = takePage(row.size() - written, row);
 
         if (pageId == 0L) {
             pageId = allocateDataPage(row.partition());
@@ -619,7 +606,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
             initIo = DataPageIo.VERSIONS.latest();
         }
 
-        written = write(pageId, writeRowHnd, initIo, row, written, FAIL_I, 
statHolder);
+        written = write(pageId, writeRowHnd, initIo, row, written, FAIL_I);
 
         assert written != FAIL_I; // We can't fail here.
 
@@ -631,16 +618,15 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
      *
      * @param size Required free space on page.
      * @param row Row to write.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Page identifier or {@code 0} if no page found in free list.
      * @throws IgniteInternalCheckedException If failed.
      */
-    private long takePage(int size, Storable row, IoStatisticsHolder 
statHolder) throws IgniteInternalCheckedException {
+    private long takePage(int size, Storable row) throws 
IgniteInternalCheckedException {
         long pageId = 0;
 
         if (size < minSizeForDataPage) {
             for (int b = bucket(size, false) + 1; b < REUSE_BUCKET; b++) {
-                pageId = takeEmptyPage(b, DataPageIo.VERSIONS, statHolder);
+                pageId = takeEmptyPage(b, DataPageIo.VERSIONS);
 
                 if (pageId != 0L) {
                     break;
@@ -650,7 +636,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
         if (pageId == 0L) { // Handle reuse bucket.
             if (reuseList == this) {
-                pageId = takeEmptyPage(REUSE_BUCKET, DataPageIo.VERSIONS, 
statHolder);
+                pageId = takeEmptyPage(REUSE_BUCKET, DataPageIo.VERSIONS);
             } else {
                 pageId = reuseList.takeRecycledPage();
 
@@ -670,39 +656,6 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
         return PageIdUtils.changePartitionId(pageId, row.partition());
     }
 
-    /**
-     * Reused page must obtain correctly assaembled page id, then initialized 
by proper {@link PageIo} instance and non-zero {@code itemId}
-     * of reused page id must be saved into special place.
-     *
-     * @param row Row.
-     * @param reusedPageId Reused page id.
-     * @param statHolder Statistics holder to track IO operations.
-     * @return Prepared page id.
-     * @see PagesList#initReusedPage(long, long, int, byte, PageIo)
-     */
-    private long initReusedPage(Storable row, long reusedPageId, 
IoStatisticsHolder statHolder) throws IgniteInternalCheckedException {
-        long reusedPage = acquirePage(reusedPageId, statHolder);
-        try {
-            long reusedPageAddr = writeLock(reusedPageId, reusedPage);
-
-            assert reusedPageAddr != 0;
-
-            try {
-                return initReusedPage(
-                        reusedPageId,
-                        reusedPageAddr,
-                        row.partition(),
-                        FLAG_DATA,
-                        DataPageIo.VERSIONS.latest()
-                );
-            } finally {
-                writeUnlock(reusedPageId, reusedPage, reusedPageAddr, true);
-            }
-        } finally {
-            releasePage(reusedPageId, reusedPage);
-        }
-    }
-
     /** {@inheritDoc} */
     @Override
     public <S, R> R updateDataRow(
@@ -716,7 +669,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
             long pageId = pageId(link);
             int itemId = itemId(link);
 
-            R updRes = write(pageId, pageHnd, arg, itemId, null, statHolder);
+            R updRes = write(pageId, pageHnd, arg, itemId, null);
 
             assert updRes != null; // Can't fail here.
 
@@ -740,7 +693,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
             ReuseBag bag = new LongListReuseBag();
 
-            long nextLink = write(pageId, rmvRow, bag, itemId, FAIL_L, 
statHolder);
+            long nextLink = write(pageId, rmvRow, bag, itemId, FAIL_L);
 
             assert nextLink != FAIL_L; // Can't fail here.
 
@@ -748,7 +701,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
                 itemId = itemId(nextLink);
                 pageId = pageId(nextLink);
 
-                nextLink = write(pageId, rmvRow, bag, itemId, FAIL_L, 
statHolder);
+                nextLink = write(pageId, rmvRow, bag, itemId, FAIL_L);
 
                 assert nextLink != FAIL_L; // Can't fail here.
             }
@@ -813,7 +766,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
         assert reuseList == this : "not allowed to be a reuse list";
 
         try {
-            put(bag, 0, 0L, REUSE_BUCKET, IoStatisticsHolderNoOp.INSTANCE);
+            put(bag, 0, 0L, REUSE_BUCKET);
         } catch (AssertionError e) {
             throw corruptedFreeListException(e);
         } catch (IgniteInternalCheckedException | Error e) {
@@ -829,7 +782,7 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
         assert reuseList == this : "not allowed to be a reuse list";
 
         try {
-            return takeEmptyPage(REUSE_BUCKET, null, 
IoStatisticsHolderNoOp.INSTANCE);
+            return takeEmptyPage(REUSE_BUCKET, null);
         } catch (AssertionError e) {
             throw corruptedFreeListException(e);
         } catch (IgniteInternalCheckedException | Error e) {
@@ -863,7 +816,9 @@ public class FreeListImpl extends PagesList implements 
FreeList, ReuseList {
 
     @Override
     public void saveMetadata() throws IgniteInternalCheckedException {
-        saveMetadata(statHolder);
+        // Double inheritance here. We inherit interface method from the 
FreeList interface, and the implementation from the PagesList
+        // class. These two versions must be joined here by calling the super 
method.
+        super.saveMetadata();
     }
 
     @Override
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/PagesList.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/PagesList.java
index 392fa85676c..0ac5a2ef014 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/PagesList.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/freelist/PagesList.java
@@ -54,8 +54,6 @@ import 
org.apache.ignite.internal.pagememory.freelist.io.PagesListNodeIo;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.IoVersions;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.util.PageHandler;
 import org.apache.ignite.internal.pagememory.util.PageIdUtils;
@@ -129,8 +127,7 @@ public abstract class PagesList extends DataStructure {
                 long pageAddr,
                 PageIo iox,
                 Void ignore,
-                int bucket,
-                IoStatisticsHolder statHolder
+                int bucket
         ) {
             assert getPageId(pageAddr) == pageId;
 
@@ -158,8 +155,7 @@ public abstract class PagesList extends DataStructure {
                 long pageAddr,
                 PageIo iox,
                 Void ignore,
-                int oldBucket,
-                IoStatisticsHolder statHolder
+                int oldBucket
         ) throws IgniteInternalCheckedException {
             decrementBucketSize(oldBucket);
 
@@ -174,7 +170,7 @@ public abstract class PagesList extends DataStructure {
             }
 
             if (newBucket >= 0) {
-                put(null, pageId, pageAddr, newBucket, statHolder);
+                put(null, pageId, pageAddr, newBucket);
             }
 
             return TRUE;
@@ -232,7 +228,7 @@ public abstract class PagesList extends DataStructure {
 
                 while (nextId != 0) {
                     final long pageId = nextId;
-                    final long page = acquirePage(pageId, 
IoStatisticsHolderNoOp.INSTANCE);
+                    final long page = acquirePage(pageId);
 
                     try {
                         long pageAddr = readLock(pageId, page); // No 
concurrent recycling on init.
@@ -274,7 +270,7 @@ public abstract class PagesList extends DataStructure {
 
                         while (prevId != 0L) {
                             final long pageId = prevId;
-                            final long page = acquirePage(pageId, 
IoStatisticsHolderNoOp.INSTANCE);
+                            final long page = acquirePage(pageId);
                             try {
                                 long pageAddr = readLock(pageId, page);
 
@@ -324,15 +320,14 @@ public abstract class PagesList extends DataStructure {
     /**
      * Save metadata without exclusive lock on it.
      *
-     * @param statHolder Statistics holder to track IO operations.
      * @throws IgniteInternalCheckedException If failed.
      */
-    protected void saveMetadata(IoStatisticsHolder statHolder) throws 
IgniteInternalCheckedException {
+    protected void saveMetadata() throws IgniteInternalCheckedException {
         long nextPageId = metaPageId;
 
         assert nextPageId != 0;
 
-        flushBucketsCache(statHolder);
+        flushBucketsCache();
 
         if (!changed) {
             return;
@@ -355,10 +350,9 @@ public abstract class PagesList extends DataStructure {
     /**
      * Flush onheap cached pages lists to page memory.
      *
-     * @param statHolder Statistic holder.
      * @throws IgniteInternalCheckedException If failed to write a page.
      */
-    private void flushBucketsCache(IoStatisticsHolder statHolder) throws 
IgniteInternalCheckedException {
+    private void flushBucketsCache() throws IgniteInternalCheckedException {
         if (!isCachingApplicable() || !pageCacheChanged) {
             return;
         }
@@ -391,7 +385,7 @@ public abstract class PagesList extends DataStructure {
                             log.debug("Move page from heap to PageMemory 
[list={}, bucket={}, pageId={}]", name(), bucket, pageId);
                         }
 
-                        Boolean res = write(pageId, putBucket, bucket, null, 
statHolder);
+                        Boolean res = write(pageId, putBucket, bucket, null);
 
                         if (res == null) {
                             // Return page to onheap pages list if can't lock 
it.
@@ -450,7 +444,7 @@ public abstract class PagesList extends DataStructure {
                                 }
 
                                 curId = nextPageId;
-                                curPage = acquirePage(curId, 
IoStatisticsHolderNoOp.INSTANCE);
+                                curPage = acquirePage(curId);
                                 curAddr = writeLock(curId, curPage);
 
                                 curIo = PagesListMetaIo.VERSIONS.latest();
@@ -460,7 +454,7 @@ public abstract class PagesList extends DataStructure {
                                 releaseAndWriteUnlock(curId, curPage, curAddr);
 
                                 curId = nextPageId;
-                                curPage = acquirePage(curId, 
IoStatisticsHolderNoOp.INSTANCE);
+                                curPage = acquirePage(curId);
                                 curAddr = writeLock(curId, curPage);
 
                                 curIo = 
PagesListMetaIo.VERSIONS.forPage(curAddr);
@@ -492,7 +486,7 @@ public abstract class PagesList extends DataStructure {
         while (nextPageId != 0L) {
             long pageId = nextPageId;
 
-            long page = acquirePage(pageId, IoStatisticsHolderNoOp.INSTANCE);
+            long page = acquirePage(pageId);
             try {
                 long pageAddr = writeLock(pageId, page);
 
@@ -754,7 +748,7 @@ public abstract class PagesList extends DataStructure {
 
                 while (tailId != 0L) {
                     final long pageId = tailId;
-                    final long page = acquirePage(pageId, 
IoStatisticsHolderNoOp.INSTANCE);
+                    final long page = acquirePage(pageId);
                     try {
                         long pageAddr = readLock(pageId, page);
 
@@ -796,15 +790,13 @@ public abstract class PagesList extends DataStructure {
      * @param dataId Data page ID.
      * @param dataAddr Data page address.
      * @param bucket Bucket.
-     * @param statHolder Statistics holder to track IO operations.
      * @throws IgniteInternalCheckedException If failed.
      */
     protected final void put(
             @Nullable ReuseBag bag,
             final long dataId,
             final long dataAddr,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         assert bag == null ^ dataAddr == 0L;
 
@@ -837,7 +829,7 @@ public abstract class PagesList extends DataStructure {
                 continue;
             }
 
-            final long tailPage = acquirePage(tailId, statHolder);
+            final long tailPage = acquirePage(tailId);
 
             try {
                 long tailAddr = writeLockPage(tailId, tailPage, bucket, 
lockAttempt++, bag); // Explicit check.
@@ -872,14 +864,14 @@ public abstract class PagesList extends DataStructure {
 
                     ok = bag != null
                             // Here we can always take pages from the bag to 
build our list.
-                            ? putReuseBag(tailId, tailAddr, io, bag, bucket, 
statHolder) :
+                            ? putReuseBag(tailId, tailAddr, io, bag, bucket) :
                             // Here we can use the data page to build list 
only if it is empty and
                             // it is being put into reuse bucket. Usually this 
will be true, but there is
                             // a case when there is no reuse bucket in the 
free list, but then deadlock
                             // on node page allocation from separate reuse 
list is impossible.
                             // If the data page is not empty it can not be put 
into reuse bucket and thus
                             // the deadlock is impossible as well.
-                            putDataPage(tailId, tailAddr, io, dataId, 
dataAddr, bucket, statHolder);
+                            putDataPage(tailId, tailAddr, io, dataId, 
dataAddr, bucket);
 
                     if (ok) {
                         if (debugLogEnabled) {
@@ -908,7 +900,6 @@ public abstract class PagesList extends DataStructure {
      * @param dataId Data page ID.
      * @param dataAddr Data page address.
      * @param bucket Bucket.
-     * @param statHolder Statistics holder to track IO operations.
      * @return {@code true} If succeeded.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -918,8 +909,7 @@ public abstract class PagesList extends DataStructure {
             PagesListNodeIo io,
             final long dataId,
             final long dataAddr,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         if (io.getNextId(pageAddr) != 0L) {
             return false; // Splitted.
@@ -928,7 +918,7 @@ public abstract class PagesList extends DataStructure {
         int idx = io.addPage(pageAddr, dataId, pageSize());
 
         if (idx == -1) {
-            handlePageFull(pageId, pageAddr, io, dataId, dataAddr, bucket, 
statHolder);
+            handlePageFull(pageId, pageAddr, io, dataId, dataAddr, bucket);
         } else {
             incrementBucketSize(bucket);
 
@@ -981,7 +971,6 @@ public abstract class PagesList extends DataStructure {
      * @param dataId Data page ID.
      * @param dataAddr Data page address.
      * @param bucket Bucket index.
-     * @param statHolder Statistics holder to track IO operations.
      * @throws IgniteInternalCheckedException If failed.
      */
     private void handlePageFull(
@@ -990,8 +979,7 @@ public abstract class PagesList extends DataStructure {
             PagesListNodeIo io,
             final long dataId,
             final long dataAddr,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         DataPageIo dataIo = pageMem.ioRegistry().resolve(dataAddr);
 
@@ -1012,7 +1000,7 @@ public abstract class PagesList extends DataStructure {
         } else {
             // Just allocate a new node page and add our data page there.
             final long nextId = allocatePage(null);
-            final long nextPage = acquirePage(nextId, statHolder);
+            final long nextPage = acquirePage(nextId);
 
             try {
                 long nextPageAddr = writeLock(nextId, nextPage); // Newly 
allocated page.
@@ -1048,7 +1036,6 @@ public abstract class PagesList extends DataStructure {
      * @param io IO.
      * @param bag Reuse bag.
      * @param bucket Bucket.
-     * @param statHolder Statistics holder to track IO operations.
      * @return {@code true} If succeeded.
      * @throws IgniteInternalCheckedException if failed.
      */
@@ -1057,8 +1044,7 @@ public abstract class PagesList extends DataStructure {
             final long pageAddr,
             PagesListNodeIo io,
             ReuseBag bag,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         assert bag != null : "bag is null";
         assert !bag.isEmpty() : "bag is empty";
@@ -1083,7 +1069,7 @@ public abstract class PagesList extends DataStructure {
                 int idx = io.addPage(prevAddr, nextId, pageSize());
 
                 if (idx == -1) { // Attempt to add page failed: the node page 
is full.
-                    final long nextPage = acquirePage(nextId, statHolder);
+                    final long nextPage = acquirePage(nextId);
 
                     try {
                         long nextPageAddr = writeLock(nextId, nextPage); // 
Page from reuse bag can't be concurrently recycled.
@@ -1196,14 +1182,12 @@ public abstract class PagesList extends DataStructure {
      *
      * @param bucket Bucket index.
      * @param initIoVers Optional IO to initialize page.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Removed page ID.
      * @throws IgniteInternalCheckedException If failed.
      */
     protected long takeEmptyPage(
             int bucket,
-            @Nullable IoVersions<?> initIoVers,
-            IoStatisticsHolder statHolder
+            @Nullable IoVersions<?> initIoVers
     ) throws IgniteInternalCheckedException {
         PagesCache pagesCache = getBucketCache(bucket, false);
 
@@ -1235,7 +1219,7 @@ public abstract class PagesList extends DataStructure {
                 continue;
             }
 
-            final long tailPage = acquirePage(tailId, statHolder);
+            final long tailPage = acquirePage(tailId);
 
             try {
                 long tailAddr = writeLockPage(tailId, tailPage, bucket, 
lockAttempt++, null); // Explicit check.
@@ -1302,7 +1286,7 @@ public abstract class PagesList extends DataStructure {
                             // to prevent empty page leak to data pages.
                             if (!isReuseBucket(bucket)) {
                                 if (prevId != 0L) {
-                                    Boolean ok = write(prevId, cutTail, null, 
bucket, FALSE, statHolder);
+                                    Boolean ok = write(prevId, cutTail, null, 
bucket, FALSE);
 
                                     assert ok == TRUE : ok;
 
@@ -1324,7 +1308,7 @@ public abstract class PagesList extends DataStructure {
 
                         assert prevId != 0L;
 
-                        Boolean ok = write(prevId, cutTail, bucket, FALSE, 
statHolder);
+                        Boolean ok = write(prevId, cutTail, bucket, FALSE);
 
                         assert ok == TRUE : ok;
 
@@ -1460,7 +1444,6 @@ public abstract class PagesList extends DataStructure {
      * @param dataAddr Data page address.
      * @param dataIo Data page IO.
      * @param bucket Bucket index.
-     * @param statHolder Statistics holder to track IO operations.
      * @return {@code True} if page was removed.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -1468,8 +1451,7 @@ public abstract class PagesList extends DataStructure {
             final long dataId,
             final long dataAddr,
             DataPageIo dataIo,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         final long pageId = dataIo.getFreeListPageId(dataAddr);
 
@@ -1501,7 +1483,7 @@ public abstract class PagesList extends DataStructure {
             log.debug("Remove page from pages list [list={}, bucket={}, 
dataId={}, pageId={}]", name(), bucket, dataId, pageId);
         }
 
-        final long page = acquirePage(pageId, statHolder);
+        final long page = acquirePage(pageId);
 
         try {
             long nextId;
@@ -1542,7 +1524,7 @@ public abstract class PagesList extends DataStructure {
                 if (nextId == 0L) {
                     long prevId = io.getPreviousId(pageAddr);
 
-                    recycleId = mergeNoNext(pageId, pageAddr, prevId, bucket, 
statHolder);
+                    recycleId = mergeNoNext(pageId, pageAddr, prevId, bucket);
                 }
             } finally {
                 writeUnlock(pageId, page, pageAddr, rmvd);
@@ -1550,7 +1532,7 @@ public abstract class PagesList extends DataStructure {
 
             // Perform a fair merge after lock release (to have a correct 
locking order).
             if (nextId != 0L) {
-                recycleId = merge(pageId, page, nextId, bucket, statHolder);
+                recycleId = merge(pageId, page, nextId, bucket);
             }
 
             if (recycleId != 0L) {
@@ -1567,8 +1549,7 @@ public abstract class PagesList extends DataStructure {
             long pageId,
             long pageAddr,
             long prevId,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         // If we do not have a next page (we are tail) and we are on reuse 
bucket,
         // then we can leave as is as well, because it is normal to have an 
empty tail page here.
@@ -1577,7 +1558,7 @@ public abstract class PagesList extends DataStructure {
         }
 
         if (prevId != 0L) { // Cut tail if we have a previous page.
-            Boolean ok = write(prevId, cutTail, null, bucket, FALSE, 
statHolder);
+            Boolean ok = write(prevId, cutTail, null, bucket, FALSE);
 
             assert ok == TRUE : ok;
         } else {
@@ -1596,15 +1577,14 @@ public abstract class PagesList extends DataStructure {
             final long pageId,
             final long page,
             long nextId,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         assert nextId != 0; // We should do mergeNoNext then.
 
         // Lock all the pages in correct order (from next to previous) and do 
the merge in retry loop.
         for (; ; ) {
             final long curId = nextId;
-            final long curPage = curId == 0L ? 0L : acquirePage(curId, 
statHolder);
+            final long curPage = curId == 0L ? 0L : acquirePage(curId);
             try {
                 boolean write = false;
 
@@ -1629,7 +1609,7 @@ public abstract class PagesList extends DataStructure {
 
                     // Check if we see a consistent state of the world.
                     if (io.getNextId(pageAddr) == curId && (curId == 0L) == 
(curAddr == 0L)) {
-                        long recycleId = doMerge(pageId, pageAddr, io, curId, 
curAddr, bucket, statHolder);
+                        long recycleId = doMerge(pageId, pageAddr, io, curId, 
curAddr, bucket);
 
                         write = true;
 
@@ -1659,13 +1639,12 @@ public abstract class PagesList extends DataStructure {
             PagesListNodeIo io,
             long nextId,
             long nextAddr,
-            int bucket,
-            IoStatisticsHolder statHolder
+            int bucket
     ) throws IgniteInternalCheckedException {
         long prevId = io.getPreviousId(pageAddr);
 
         if (nextId == 0L) {
-            return mergeNoNext(pageId, pageAddr, prevId, bucket, statHolder);
+            return mergeNoNext(pageId, pageAddr, prevId, bucket);
         } else {
             // No one must be able to merge it while we keep a reference.
             assert getPageId(nextAddr) == nextId;
@@ -1678,7 +1657,7 @@ public abstract class PagesList extends DataStructure {
                 nextIo.setPreviousId(nextAddr, 0);
             } else {
                 // Do a fair merge: link previous and next to each other.
-                fairMerge(prevId, pageId, nextId, nextAddr, statHolder);
+                fairMerge(prevId, pageId, nextId, nextAddr);
             }
 
             return recyclePage(pageId, pageAddr);
@@ -1692,17 +1671,15 @@ public abstract class PagesList extends DataStructure {
      * @param pageId Page ID.
      * @param nextId Next page ID.
      * @param nextAddr Next page address.
-     * @param statHolder Statistics holder to track IO operations.
      * @throws IgniteInternalCheckedException If failed.
      */
     private void fairMerge(
             final long prevId,
             long pageId,
             long nextId,
-            long nextAddr,
-            IoStatisticsHolder statHolder
+            long nextAddr
     ) throws IgniteInternalCheckedException {
-        long prevPage = acquirePage(prevId, statHolder);
+        long prevPage = acquirePage(prevId);
 
         try {
             final long prevAddr = writeLock(prevId, prevPage); // No check, we 
keep a reference.
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemory.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemory.java
index 0b83dcab1b9..1f1777a8229 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemory.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemory.java
@@ -39,8 +39,6 @@ import 
org.apache.ignite.internal.pagememory.mem.DirectMemoryProvider;
 import org.apache.ignite.internal.pagememory.mem.DirectMemoryRegion;
 import org.apache.ignite.internal.pagememory.mem.IgniteOutOfMemoryException;
 import org.apache.ignite.internal.pagememory.mem.unsafe.UnsafeMemoryProvider;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.util.PageIdUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -425,21 +423,13 @@ public class VolatilePageMemory implements PageMemory {
     // *** PageSupport methods ***
 
     @Override public long acquirePage(int cacheId, long pageId) {
-        return acquirePage(cacheId, pageId, IoStatisticsHolderNoOp.INSTANCE);
-    }
-
-    @Override public long acquirePage(int cacheId, long pageId, 
IoStatisticsHolder statHolder) {
         assert started;
 
         int pageIdx = PageIdUtils.pageIndex(pageId);
 
         Segment seg = segment(pageIdx);
 
-        long absPtr = seg.acquirePage(pageIdx);
-
-        statHolder.trackLogicalRead(absPtr + PAGE_OVERHEAD);
-
-        return absPtr;
+        return seg.acquirePage(pageIdx);
     }
 
     @Override public void releasePage(int cacheId, long pageId, long page) {
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolder.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolder.java
deleted file mode 100644
index d4083e18d99..00000000000
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolder.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.pagememory.metric;
-
-/**
- * Holder of IO statistics.
- */
-public interface IoStatisticsHolder {
-    /**
-     * Track logical read of given page.
-     *
-     * @param pageAddr Address of page.
-     */
-    void trackLogicalRead(long pageAddr);
-
-    /**
-     * Track physical and logical read of given page.
-     *
-     * @param pageAddr Start address of page.
-     */
-    void trackPhysicalAndLogicalRead(long pageAddr);
-
-    /**
-     * Returns a number of logical reads.
-     */
-    long logicalReads();
-
-    /**
-     * Returns a number of physical reads.
-     */
-    long physicalReads();
-}
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolderNoOp.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolderNoOp.java
deleted file mode 100644
index de0a66e2574..00000000000
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/metric/IoStatisticsHolderNoOp.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.pagememory.metric;
-
-/**
- * No Operation IO statistics holder. Use in case statistics shouldn't be 
gathered.
- */
-public class IoStatisticsHolderNoOp implements IoStatisticsHolder {
-    /** No-op statistics. */
-    public static final IoStatisticsHolderNoOp INSTANCE = new 
IoStatisticsHolderNoOp();
-
-    /**
-     * Private constructor.
-     */
-    private IoStatisticsHolderNoOp() {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void trackLogicalRead(long pageAddr) {
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void trackPhysicalAndLogicalRead(long pageAddr) {
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public long logicalReads() {
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public long physicalReads() {
-        return 0;
-    }
-}
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
index ea7aa5d332f..ee2d254e7e7 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
@@ -90,8 +90,6 @@ import 
org.apache.ignite.internal.pagememory.mem.DirectMemoryProvider;
 import org.apache.ignite.internal.pagememory.mem.DirectMemoryRegion;
 import org.apache.ignite.internal.pagememory.mem.IgniteOutOfMemoryException;
 import org.apache.ignite.internal.pagememory.mem.unsafe.UnsafeMemoryProvider;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricsTracker;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointPages;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
@@ -623,13 +621,7 @@ public class PersistentPageMemory implements PageMemory {
     /** {@inheritDoc} */
     @Override
     public long acquirePage(int grpId, long pageId) throws 
IgniteInternalCheckedException {
-        return acquirePage(grpId, pageId, IoStatisticsHolderNoOp.INSTANCE, 
false);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public long acquirePage(int grpId, long pageId, IoStatisticsHolder 
statHolder) throws IgniteInternalCheckedException {
-        return acquirePage(grpId, pageId, statHolder, false);
+        return acquirePage(grpId, pageId, false);
     }
 
     /**
@@ -643,7 +635,7 @@ public class PersistentPageMemory implements PageMemory {
      * @see #acquirePage(int, long) Sets additional flag indicating that page 
was not found in memory and had to be allocated.
      */
     public long acquirePage(int grpId, long pageId, AtomicBoolean 
pageAllocated) throws IgniteInternalCheckedException {
-        return acquirePage(grpId, pageId, IoStatisticsHolderNoOp.INSTANCE, 
false, pageAllocated);
+        return acquirePage(grpId, pageId, false, pageAllocated);
     }
 
     /**
@@ -656,14 +648,13 @@ public class PersistentPageMemory implements PageMemory {
      * @throws IgniteInternalCheckedException If failed.
      * @see #acquirePage(int, long) Will read page from file if it is not 
present in memory.
      */
-    public long acquirePage(int grpId, long pageId, IoStatisticsHolder 
statHolder, boolean restore) throws IgniteInternalCheckedException {
-        return acquirePage(grpId, pageId, statHolder, restore, null);
+    public long acquirePage(int grpId, long pageId, boolean restore) throws 
IgniteInternalCheckedException {
+        return acquirePage(grpId, pageId, restore, null);
     }
 
     private long acquirePage(
             int grpId,
             long pageId,
-            IoStatisticsHolder statHolder,
             boolean restore,
             @Nullable AtomicBoolean pageAllocated
     ) throws IgniteInternalCheckedException {
@@ -693,8 +684,6 @@ public class PersistentPageMemory implements PageMemory {
 
                 seg.pageReplacementPolicy.onHit(relPtr);
 
-                statHolder.trackLogicalRead(absPtr + PAGE_OVERHEAD);
-
                 return absPtr;
             }
         } finally {
@@ -803,10 +792,6 @@ public class PersistentPageMemory implements PageMemory {
 
             seg.acquirePage(absPtr);
 
-            if (!readPageFromStore) {
-                statHolder.trackLogicalRead(absPtr + PAGE_OVERHEAD);
-            }
-
             return absPtr;
         } finally {
             seg.writeLock().unlock();
@@ -828,8 +813,6 @@ public class PersistentPageMemory implements PageMemory {
                 try {
                     pageStoreManager.read(grpId, pageId, buf, false);
 
-                    statHolder.trackPhysicalAndLogicalRead(pageAddr);
-
                     actualPageId = getPageId(buf);
                 } finally {
                     rwLock.writeUnlock(lockedPageAbsPtr + PAGE_LOCK_OFFSET, 
actualPageId == 0 ? TAG_LOCK_ALWAYS : tag(actualPageId));
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
index bc7da3ad373..c476fb0cefa 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
@@ -58,8 +58,6 @@ import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.datastructure.DataStructure;
 import org.apache.ignite.internal.pagememory.io.IoVersions;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.LongListReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
@@ -822,8 +820,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                 long metaAddr,
                 PageIo iox,
                 Void ignore,
-                int lvl,
-                IoStatisticsHolder statHolder
+                int lvl
         ) {
             // Safe cast because we should never recycle meta page until the 
tree is destroyed.
             BplusMetaIo io = (BplusMetaIo) iox;
@@ -856,8 +853,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                 long pageAddr,
                 PageIo iox,
                 Long rootPageId,
-                int lvl,
-                IoStatisticsHolder statHolder
+                int lvl
         ) {
             assert rootPageId != null;
 
@@ -891,8 +887,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                 long pageAddr,
                 PageIo iox,
                 Long rootId,
-                int notUsed,
-                IoStatisticsHolder statHolder
+                int notUsed
         ) {
             assert rootId != null;
 
@@ -1029,7 +1024,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             init(rootId, latestLeafIo());
 
             // Initialize meta page with new root page.
-            Bool res = write(metaPageId, initRoot, latestMetaIo(), rootId, 0, 
FALSE, statisticsHolder());
+            Bool res = write(metaPageId, initRoot, latestMetaIo(), rootId, 0, 
FALSE);
 
             assert res == TRUE : res;
 
@@ -3858,7 +3853,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                 // Set forward id to check the triangle invariant under the 
write-lock.
                 fwdId(fwdId);
 
-                res = write(pageId, page, lockTailExact, this, lvl, RETRY, 
statisticsHolder());
+                res = write(pageId, page, lockTailExact, this, lvl, RETRY);
             }
 
             // Release tail if retry is required.
@@ -4072,7 +4067,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                             releasePage(newRootId, newRootPage);
                         }
 
-                        Bool res = write(metaPageId, addRoot, newRootId, lvl + 
1, FALSE, statisticsHolder());
+                        Bool res = write(metaPageId, addRoot, newRootId, lvl + 
1, FALSE);
 
                         assert res == TRUE : res;
 
@@ -4104,7 +4099,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             this.pageId = pageId;
             this.fwdId = fwdId;
 
-            return write(pageId, page, insert, this, lvl, RETRY, 
statisticsHolder());
+            return write(pageId, page, insert, this, lvl, RETRY);
         }
 
         /**
@@ -4122,7 +4117,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             this.pageId = pageId;
             this.fwdId = fwdId;
 
-            return write(pageId, page, replace, this, lvl, RETRY, 
statisticsHolder());
+            return write(pageId, page, replace, this, lvl, RETRY);
         }
 
         /**
@@ -5055,7 +5050,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             long backPage = acquirePage(backId);
 
             try {
-                return write(backId, backPage, lockBackAndRmvFromLeaf, this, 
0, RETRY, statisticsHolder());
+                return write(backId, backPage, lockBackAndRmvFromLeaf, this, 
0, RETRY);
             } finally {
                 if (canRelease(backId, 0)) {
                     releasePage(backId, backPage);
@@ -5072,7 +5067,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
         private Result doRemoveFromLeaf() throws 
IgniteInternalCheckedException {
             assert page != 0L;
 
-            return write(pageId, page, rmvFromLeaf, this, 0, RETRY, 
statisticsHolder());
+            return write(pageId, page, rmvFromLeaf, this, 0, RETRY);
         }
 
         /**
@@ -5085,7 +5080,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
         private Result doLockTail(int lvl) throws 
IgniteInternalCheckedException {
             assert page != 0L;
 
-            return write(pageId, page, lockTail, this, lvl, RETRY, 
statisticsHolder());
+            return write(pageId, page, lockTail, this, lvl, RETRY);
         }
 
         /**
@@ -5116,7 +5111,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             long backPage = acquirePage(backId);
 
             try {
-                return write(backId, backPage, lockBackAndTail, this, lvl, 
RETRY, statisticsHolder());
+                return write(backId, backPage, lockBackAndTail, this, lvl, 
RETRY);
             } finally {
                 if (canRelease(backId, lvl)) {
                     releasePage(backId, backPage);
@@ -5139,7 +5134,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
             long fwdPage = acquirePage(fwdId);
 
             try {
-                return write(fwdId, fwdPage, lockTailForward, this, lvl, 
RETRY, statisticsHolder());
+                return write(fwdId, fwdPage, lockTailForward, this, lvl, 
RETRY);
             } finally {
                 // If we were not able to lock forward page as tail, release 
the page.
                 if (canRelease(fwdId, lvl)) {
@@ -5368,7 +5363,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
          * @throws IgniteInternalCheckedException If failed.
          */
         private void cutRoot(int lvl) throws IgniteInternalCheckedException {
-            Bool res = write(metaPageId, cutRoot, lvl, FALSE, 
statisticsHolder());
+            Bool res = write(metaPageId, cutRoot, lvl, FALSE);
 
             assert res == TRUE : res;
         }
@@ -6399,8 +6394,7 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
                 long pageAddr,
                 PageIo iox,
                 G g,
-                int lvl,
-                IoStatisticsHolder statHolder
+                int lvl
         ) throws IgniteInternalCheckedException {
             assert PageIo.getPageId(pageAddr) == pageId
                     : "pageId mismatch [requested=" + pageId + ", stored=" + 
PageIo.getPageId(pageAddr) + "]";
@@ -6576,71 +6570,6 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
         return LOCK_RETRIES;
     }
 
-    /**
-     * Acquires the page by the given ID.
-     *
-     * @param pageId Page ID.
-     * @return Page absolute pointer.
-     * @throws IgniteInternalCheckedException If failed.
-     * @see DataStructure#acquirePage(long, IoStatisticsHolder)
-     */
-    protected final long acquirePage(long pageId) throws 
IgniteInternalCheckedException {
-        return acquirePage(pageId, statisticsHolder());
-    }
-
-    /**
-     * Executes handler under the read lock or returns lockFailed if lock 
failed.
-     *
-     * @param pageId Page ID.
-     * @param h Handler.
-     * @param arg Argument.
-     * @param intArg Argument of type {@code int}.
-     * @param lockFailed Result in case of lock failure due to page recycling.
-     * @return Handler result.
-     * @throws IgniteInternalCheckedException If failed.
-     * @see DataStructure#read(long, PageHandler, Object, int, Object, 
IoStatisticsHolder)
-     */
-    protected final <X, R> R read(
-            long pageId,
-            PageHandler<X, R> h,
-            X arg,
-            int intArg,
-            R lockFailed
-    ) throws IgniteInternalCheckedException {
-        return read(pageId, h, arg, intArg, lockFailed, statisticsHolder());
-    }
-
-    /**
-     * Executes handler under the read lock or returns lockFailed if lock 
failed.
-     *
-     * @param pageId Page ID.
-     * @param page Page pointer.
-     * @param h Handler.
-     * @param arg Argument.
-     * @param intArg Argument of type {@code int}.
-     * @param lockFailed Result in case of lock failure due to page recycling.
-     * @return Handler result.
-     * @throws IgniteInternalCheckedException If failed.
-     * @see DataStructure#read(long, long, PageHandler, Object, int, Object, 
IoStatisticsHolder)
-     */
-    protected final <X, R> R read(
-            long pageId,
-            long page,
-            PageHandler<X, R> h,
-            X arg,
-            int intArg,
-            R lockFailed
-    ) throws IgniteInternalCheckedException {
-        return read(pageId, page, h, arg, intArg, lockFailed, 
statisticsHolder());
-    }
-
-    /**
-     * Returns statistics holder to track IO operations.
-     */
-    protected IoStatisticsHolder statisticsHolder() {
-        return IoStatisticsHolderNoOp.INSTANCE;
-    }
-
     /**
      * PageIds converter with empty check.
      *
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/util/PageHandler.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/util/PageHandler.java
index 21b59f58369..dba6d06464c 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/util/PageHandler.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/util/PageHandler.java
@@ -22,7 +22,6 @@ import static java.lang.Boolean.FALSE;
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -33,7 +32,7 @@ import org.jetbrains.annotations.Nullable;
  */
 public interface PageHandler<X, R> {
     /** No-op page handler. */
-    PageHandler<Void, Boolean> NO_OP = (groupId, pageId, page, pageAddr, io, 
arg, intArg, statHolder) -> Boolean.TRUE;
+    PageHandler<Void, Boolean> NO_OP = (groupId, pageId, page, pageAddr, io, 
arg, intArg) -> Boolean.TRUE;
 
     /**
      * Handles the page.
@@ -45,7 +44,6 @@ public interface PageHandler<X, R> {
      * @param io IO.
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -56,8 +54,7 @@ public interface PageHandler<X, R> {
             long pageAddr,
             PageIo io,
             X arg,
-            int intArg,
-            IoStatisticsHolder statHolder
+            int intArg
     ) throws IgniteInternalCheckedException;
 
     /**
@@ -92,7 +89,6 @@ public interface PageHandler<X, R> {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -103,13 +99,12 @@ public interface PageHandler<X, R> {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
-        long page = pageMem.acquirePage(groupId, pageId, statHolder);
+        long page = pageMem.acquirePage(groupId, pageId);
 
         try {
-            return readPage(pageMem, groupId, pageId, page, h, arg, intArg, 
lockFailed, statHolder);
+            return readPage(pageMem, groupId, pageId, page, h, arg, intArg, 
lockFailed);
         } finally {
             pageMem.releasePage(groupId, pageId, page);
         }
@@ -126,7 +121,6 @@ public interface PageHandler<X, R> {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -138,8 +132,7 @@ public interface PageHandler<X, R> {
             PageHandler<X, R> h,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
         long pageAddr = 0L;
 
@@ -150,7 +143,7 @@ public interface PageHandler<X, R> {
 
             PageIo io = pageMem.ioRegistry().resolve(pageAddr);
 
-            return h.run(groupId, pageId, page, pageAddr, io, arg, intArg, 
statHolder);
+            return h.run(groupId, pageId, page, pageAddr, io, arg, intArg);
         } finally {
             if (pageAddr != 0L) {
                 pageMem.readUnlock(groupId, pageId, page);
@@ -165,7 +158,6 @@ public interface PageHandler<X, R> {
      * @param groupId Group ID.
      * @param pageId Page ID.
      * @param init IO for new page initialization.
-     * @param statHolder Statistics holder to track IO operations.
      * @throws IgniteInternalCheckedException If failed.
      * @see PageIo#initNewPage(long, long, int)
      */
@@ -173,8 +165,7 @@ public interface PageHandler<X, R> {
             PageMemory pageMem,
             int groupId,
             long pageId,
-            PageIo init,
-            IoStatisticsHolder statHolder
+            PageIo init
     ) throws IgniteInternalCheckedException {
         Boolean res = writePage(
                 pageMem,
@@ -184,8 +175,7 @@ public interface PageHandler<X, R> {
                 init,
                 null,
                 0,
-                FALSE,
-                statHolder
+                FALSE
         );
 
         assert res != FALSE;
@@ -202,7 +192,6 @@ public interface PageHandler<X, R> {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -215,11 +204,10 @@ public interface PageHandler<X, R> {
             @Nullable PageIo init,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
         boolean releaseAfterWrite = true;
-        long page = pageMem.acquirePage(groupId, pageId, statHolder);
+        long page = pageMem.acquirePage(groupId, pageId);
         try {
             long pageAddr = pageMem.writeLock(groupId, pageId, page);
 
@@ -237,7 +225,7 @@ public interface PageHandler<X, R> {
                     init = pageMem.ioRegistry().resolve(pageAddr);
                 }
 
-                R res = h.run(groupId, pageId, page, pageAddr, init, arg, 
intArg, statHolder);
+                R res = h.run(groupId, pageId, page, pageAddr, init, arg, 
intArg);
 
                 ok = true;
 
@@ -268,7 +256,6 @@ public interface PageHandler<X, R> {
      * @param arg Argument.
      * @param intArg Argument of type {@code int}.
      * @param lockFailed Result in case of lock failure due to page recycling.
-     * @param statHolder Statistics holder to track IO operations.
      * @return Handler result.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -281,8 +268,7 @@ public interface PageHandler<X, R> {
             PageIo init,
             X arg,
             int intArg,
-            R lockFailed,
-            IoStatisticsHolder statHolder
+            R lockFailed
     ) throws IgniteInternalCheckedException {
         long pageAddr = pageMem.writeLock(groupId, pageId, page);
 
@@ -300,7 +286,7 @@ public interface PageHandler<X, R> {
                 init = pageMem.ioRegistry().resolve(pageAddr);
             }
 
-            R res = h.run(groupId, pageId, page, pageAddr, init, arg, intArg, 
statHolder);
+            R res = h.run(groupId, pageId, page, pageAddr, init, arg, intArg);
 
             ok = true;
 
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/FreeListImplTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/FreeListImplTest.java
index b7dafa76284..edfe1fc993f 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/FreeListImplTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/FreeListImplTest.java
@@ -49,7 +49,6 @@ import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMe
 import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryProfileConfigurationSchema;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import 
org.apache.ignite.internal.storage.configurations.StorageProfileConfiguration;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
 import org.apache.ignite.internal.util.OffheapReadWriteLock;
@@ -149,8 +148,7 @@ public class FreeListImplTest extends 
BaseIgniteAbstractTest {
                 pageMemory,
                 metaPageId,
                 true,
-                null,
-                IoStatisticsHolderNoOp.INSTANCE
+                null
         ) {
             @Override
             public void insertDataRow(Storable row) throws 
IgniteInternalCheckedException {
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
index f1415bcdf81..1727c156ba5 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
@@ -30,7 +30,6 @@ import 
org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.lang.IgniteStringFormatter;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.freelist.FreeListImpl;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
@@ -171,8 +170,7 @@ public class PersistentPageMemoryTableStorage extends 
AbstractPageMemoryTableSto
                     dataRegion.pageMemory(),
                     meta.freeListRootPageId(),
                     initNew,
-                    dataRegion.pageListCacheLimit(),
-                    IoStatisticsHolderNoOp.INSTANCE
+                    dataRegion.pageListCacheLimit()
             );
         } catch (IgniteInternalCheckedException e) {
             throw new StorageException("Error creating free list: [tableId={}, 
partitionId={}]", e, getTableId(), partId);
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryDataRegion.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryDataRegion.java
index f28a98a3bf2..c2d9f2bd6ae 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryDataRegion.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryDataRegion.java
@@ -28,7 +28,6 @@ import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMe
 import org.apache.ignite.internal.pagememory.freelist.FreeListImpl;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
 import org.apache.ignite.internal.storage.StorageException;
 import org.apache.ignite.internal.util.OffheapReadWriteLock;
@@ -105,8 +104,7 @@ public class VolatilePageMemoryDataRegion implements 
DataRegion<VolatilePageMemo
                 metaPageId,
                 true,
                 // Because in memory.
-                null,
-                IoStatisticsHolderNoOp.INSTANCE
+                null
         );
     }
 
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexTree.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexTree.java
index 890668f7e5f..8c21bd479b1 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexTree.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexTree.java
@@ -69,7 +69,7 @@ public class HashIndexTree extends BplusTree<HashIndexRowKey, 
HashIndexRow> {
         super("HashIndexTree", grpId, grpName, partId, pageMem, globalRmvId, 
metaPageId, reuseList);
 
         this.inlineSize = readInlineSizeFromMetaIo();
-        this.dataPageReader = new DataPageReader(pageMem, grpId, 
statisticsHolder());
+        this.dataPageReader = new DataPageReader(pageMem, grpId);
 
         init(false);
     }
@@ -101,7 +101,7 @@ public class HashIndexTree extends 
BplusTree<HashIndexRowKey, HashIndexRow> {
         super("HashIndexTree", grpId, grpName, partId, pageMem, globalRmvId, 
metaPageId, reuseList);
 
         this.inlineSize = binaryTupleInlineSize(pageSize(), 
ITEM_SIZE_WITHOUT_COLUMNS, indexDescriptor);
-        this.dataPageReader = new DataPageReader(pageMem, grpId, 
statisticsHolder());
+        this.dataPageReader = new DataPageReader(pageMem, grpId);
 
         init(true);
 
@@ -187,7 +187,7 @@ public class HashIndexTree extends 
BplusTree<HashIndexRowKey, HashIndexRow> {
     private int readInlineSizeFromMetaIo() throws 
IgniteInternalCheckedException {
         Integer inlineSize = read(
                 metaPageId,
-                (groupId, pageId, page, pageAddr, io, arg, intArg, statHolder) 
-> ((HashIndexTreeMetaIo) io).getInlineSize(pageAddr),
+                (groupId, pageId, page, pageAddr, io, arg, intArg) -> 
((HashIndexTreeMetaIo) io).getInlineSize(pageAddr),
                 null,
                 0,
                 -1
@@ -201,14 +201,13 @@ public class HashIndexTree extends 
BplusTree<HashIndexRowKey, HashIndexRow> {
     private void writeInlineSizeToMetaIo(int inlineSize) throws 
IgniteInternalCheckedException {
         Boolean result = write(
                 metaPageId,
-                (groupId, pageId, page, pageAddr, io, arg, intArg, statHolder) 
-> {
+                (groupId, pageId, page, pageAddr, io, arg, intArg) -> {
                     ((HashIndexTreeMetaIo) io).setInlineSize(pageAddr, 
inlineSize);
 
                     return Boolean.TRUE;
                 },
                 0,
-                Boolean.FALSE,
-                statisticsHolder()
+                Boolean.FALSE
         );
 
         assert result == Boolean.TRUE : result;
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
index c0c9d264141..2e78265d958 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/sorted/SortedIndexTree.java
@@ -87,7 +87,7 @@ public class SortedIndexTree extends 
BplusTree<SortedIndexRowKey, SortedIndexRow
         this.inlineSize = initNew
                 ? binaryTupleInlineSize(pageSize(), ITEM_SIZE_WITHOUT_COLUMNS, 
indexDescriptor)
                 : readInlineSizeFromMetaIo();
-        this.dataPageReader = new DataPageReader(pageMem, grpId, 
statisticsHolder());
+        this.dataPageReader = new DataPageReader(pageMem, grpId);
         this.binaryTupleComparator = 
StorageUtils.binaryTupleComparator(indexDescriptor.columns());
 
         init(initNew);
@@ -118,7 +118,7 @@ public class SortedIndexTree extends 
BplusTree<SortedIndexRowKey, SortedIndexRow
         super("SortedIndexTree", grpId, grpName, partId, pageMem, globalRmvId, 
metaPageId, reuseList);
 
         this.inlineSize = readInlineSizeFromMetaIo();
-        this.dataPageReader = new DataPageReader(pageMem, grpId, 
statisticsHolder());
+        this.dataPageReader = new DataPageReader(pageMem, grpId);
         this.binaryTupleComparator = null;
 
         init(false);
@@ -224,7 +224,7 @@ public class SortedIndexTree extends 
BplusTree<SortedIndexRowKey, SortedIndexRow
     private int readInlineSizeFromMetaIo() throws 
IgniteInternalCheckedException {
         Integer inlineSize = read(
                 metaPageId,
-                (groupId, pageId, page, pageAddr, io, arg, intArg, statHolder) 
-> ((SortedIndexTreeMetaIo) io).getInlineSize(pageAddr),
+                (groupId, pageId, page, pageAddr, io, arg, intArg) -> 
((SortedIndexTreeMetaIo) io).getInlineSize(pageAddr),
                 null,
                 0,
                 -1
@@ -238,14 +238,13 @@ public class SortedIndexTree extends 
BplusTree<SortedIndexRowKey, SortedIndexRow
     private void writeInlineSizeToMetaIo(int inlineSize) throws 
IgniteInternalCheckedException {
         Boolean result = write(
                 metaPageId,
-                (groupId, pageId, page, pageAddr, io, arg, intArg, statHolder) 
-> {
+                (groupId, pageId, page, pageAddr, io, arg, intArg) -> {
                     ((SortedIndexTreeMetaIo) io).setInlineSize(pageAddr, 
inlineSize);
 
                     return Boolean.TRUE;
                 },
                 0,
-                Boolean.FALSE,
-                statisticsHolder()
+                Boolean.FALSE
         );
 
         assert result == Boolean.TRUE : result;
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
index 2929adbf32a..ad6f166a78a 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
@@ -39,7 +39,6 @@ import org.apache.ignite.internal.lang.IgniteStringFormatter;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.datapage.DataPageReader;
 import org.apache.ignite.internal.pagememory.freelist.FreeListImpl;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.tree.BplusTree.TreeRowMapClosure;
 import org.apache.ignite.internal.pagememory.tree.IgniteTree.InvokeClosure;
 import org.apache.ignite.internal.pagememory.util.GradualTaskExecutor;
@@ -139,7 +138,7 @@ public abstract class AbstractPageMemoryMvPartitionStorage 
implements MvPartitio
 
         PageMemory pageMemory = tableStorage.dataRegion().pageMemory();
 
-        rowVersionDataPageReader = new DataPageReader(pageMemory, 
tableStorage.getTableId(), IoStatisticsHolderNoOp.INSTANCE);
+        rowVersionDataPageReader = new DataPageReader(pageMemory, 
tableStorage.getTableId());
         updateNextLinkHandler = new UpdateNextLinkHandler();
         updateTimestampHandler = new UpdateTimestampHandler();
     }
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorage.java
index 2ffc7fcc32c..d47a86b015a 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorage.java
@@ -23,8 +23,6 @@ import org.apache.ignite.internal.pagememory.PageIdAllocator;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.datastructure.DataStructure;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.LongListReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
@@ -43,8 +41,6 @@ public class BlobStorage extends DataStructure {
     /** ID that means that no page was stored. */
     public static final long NO_PAGE_ID = 0;
 
-    private final IoStatisticsHolder statisticsHolder;
-
     private final RecycleAndAddToReuseBag recycleAndAddToReuseBag = new 
RecycleAndAddToReuseBag();
 
     private final ReadFragment readFragment = new ReadFragment();
@@ -54,11 +50,10 @@ public class BlobStorage extends DataStructure {
     /**
      * Creates a new instance.
      */
-    public BlobStorage(ReuseList reuseList, PageMemory pageMemory, int 
groupId, int partitionId, IoStatisticsHolder statisticsHolder) {
+    public BlobStorage(ReuseList reuseList, PageMemory pageMemory, int 
groupId, int partitionId) {
         super("BlobStorage", groupId, null, partitionId, pageMemory, 
PageIdAllocator.FLAG_AUX);
 
         super.reuseList = reuseList;
-        this.statisticsHolder = statisticsHolder;
     }
 
     /**
@@ -81,8 +76,7 @@ public class BlobStorage extends DataStructure {
                     readFragment,
                     readState,
                     0,
-                    false,
-                    IoStatisticsHolderNoOp.INSTANCE
+                    false
             );
 
             assert ok : pageId;
@@ -134,8 +128,7 @@ public class BlobStorage extends DataStructure {
                     null,
                     state,
                     0,
-                    false,
-                    statisticsHolder
+                    false
             );
 
             assert ok : state.pageId;
@@ -173,7 +166,7 @@ public class BlobStorage extends DataStructure {
 
         while (pageId != NO_PAGE_ID) {
             Long nextPageId = PageHandler.writePage(pageMem, grpId, pageId,
-                    recycleAndAddToReuseBag, null, reuseBag, 0, pageId, 
IoStatisticsHolderNoOp.INSTANCE);
+                    recycleAndAddToReuseBag, null, reuseBag, 0, pageId);
 
             assert nextPageId != pageId : pageId;
 
@@ -203,8 +196,7 @@ public class BlobStorage extends DataStructure {
      */
     private class ReadFragment implements PageHandler<ReadState, Boolean> {
         @Override
-        public Boolean run(int groupId, long pageId, long page, long pageAddr, 
PageIo io, ReadState state, int unused,
-                IoStatisticsHolder statHolder) throws 
IgniteInternalCheckedException {
+        public Boolean run(int groupId, long pageId, long page, long pageAddr, 
PageIo io, ReadState state, int unused) {
             BlobFragmentIo blobIo = (BlobFragmentIo) io;
 
             if (state.bytes == null) {
@@ -264,8 +256,9 @@ public class BlobStorage extends DataStructure {
      */
     private class WriteFragment implements PageHandler<WriteState, Boolean> {
         @Override
-        public Boolean run(int groupId, long pageId, long page, long pageAddr, 
PageIo io, WriteState state, int unused,
-                IoStatisticsHolder statHolder) throws 
IgniteInternalCheckedException {
+        public Boolean run(
+                int groupId, long pageId, long page, long pageAddr, PageIo io, 
WriteState state, int unused
+        ) throws IgniteInternalCheckedException {
             BlobFragmentIo blobIo = (BlobFragmentIo) io;
 
             int capacityForBytes = 
blobIo.getCapacityForFragmentBytes(pageSize(), state.isFirstPage());
@@ -305,8 +298,7 @@ public class BlobStorage extends DataStructure {
      */
     private static class RecycleAndAddToReuseBag implements 
PageHandler<ReuseBag, Long> {
         @Override
-        public Long run(int groupId, long pageId, long page, long pageAddr, 
PageIo io, ReuseBag reuseBag, int unused,
-                IoStatisticsHolder statHolder) {
+        public Long run(int groupId, long pageId, long page, long pageAddr, 
PageIo io, ReuseBag reuseBag, int unused) {
             BlobFragmentIo blobIo = (BlobFragmentIo) io;
 
             long nextPageId = blobIo.getNextPageId(pageAddr);
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/CommitWriteInvokeClosure.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/CommitWriteInvokeClosure.java
index e52cb498cba..39fa14feb6b 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/CommitWriteInvokeClosure.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/CommitWriteInvokeClosure.java
@@ -26,7 +26,6 @@ import 
org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.freelist.FreeList;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 import org.apache.ignite.internal.pagememory.tree.BplusTree;
 import org.apache.ignite.internal.pagememory.tree.IgniteTree.InvokeClosure;
 import org.apache.ignite.internal.pagememory.tree.IgniteTree.OperationType;
@@ -106,8 +105,7 @@ class CommitWriteInvokeClosure implements 
InvokeClosure<VersionChain> {
                 long pageAddr,
                 PageIo io,
                 HybridTimestamp arg,
-                int itemId,
-                IoStatisticsHolder statHolder
+                int itemId
         ) throws IgniteInternalCheckedException {
             DataPageIo dataIo = (DataPageIo) io;
 
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorage.java
index 9cd8105ab30..0e2eec55dae 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorage.java
@@ -32,7 +32,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.DataRegion;
 import org.apache.ignite.internal.pagememory.freelist.FreeListImpl;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointListener;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
@@ -145,8 +144,7 @@ public class PersistentPageMemoryMvPartitionStorage extends 
AbstractPageMemoryMv
                 freeList,
                 dataRegion.pageMemory(),
                 tableStorage.getTableId(),
-                partitionId,
-                IoStatisticsHolderNoOp.INSTANCE
+                partitionId
         );
     }
 
@@ -508,8 +506,7 @@ public class PersistentPageMemoryMvPartitionStorage extends 
AbstractPageMemoryMv
                 freeList,
                 tableStorage.dataRegion().pageMemory(),
                 tableStorage.getTableId(),
-                partitionId,
-                IoStatisticsHolderNoOp.INSTANCE
+                partitionId
         );
 
         updateRenewableState(
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/RemoveWriteOnGcInvokeClosure.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/RemoveWriteOnGcInvokeClosure.java
index 73445a12261..aec1f3986af 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/RemoveWriteOnGcInvokeClosure.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/RemoveWriteOnGcInvokeClosure.java
@@ -30,7 +30,6 @@ import 
org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.freelist.FreeList;
 import org.apache.ignite.internal.pagememory.io.DataPageIo;
 import org.apache.ignite.internal.pagememory.io.PageIo;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolder;
 import org.apache.ignite.internal.pagememory.tree.BplusTree;
 import org.apache.ignite.internal.pagememory.tree.IgniteTree.InvokeClosure;
 import org.apache.ignite.internal.pagememory.tree.IgniteTree.OperationType;
@@ -106,8 +105,7 @@ public class RemoveWriteOnGcInvokeClosure implements 
InvokeClosure<VersionChain>
                 long pageAddr,
                 PageIo io,
                 Long nextLink,
-                int itemId,
-                IoStatisticsHolder statHolder
+                int itemId
         ) throws IgniteInternalCheckedException {
             DataPageIo dataIo = (DataPageIo) io;
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorageTest.java
index 829d619c010..b2204a529cd 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/BlobStorageTest.java
@@ -39,7 +39,6 @@ import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMe
 import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryProfileConfigurationSchema;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
-import org.apache.ignite.internal.pagememory.metric.IoStatisticsHolderNoOp;
 import org.apache.ignite.internal.pagememory.reuse.ReuseBag;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
 import 
org.apache.ignite.internal.storage.configurations.StorageProfileConfiguration;
@@ -89,7 +88,7 @@ class BlobStorageTest extends BaseIgniteAbstractTest {
 
         pageMemory.start();
 
-        blobStorage = new BlobStorage(reuseList, pageMemory, 1, 1, 
IoStatisticsHolderNoOp.INSTANCE);
+        blobStorage = new BlobStorage(reuseList, pageMemory, 1, 1);
     }
 
     @Test

Reply via email to