diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
index 1ba9ac6..3eb1e4c 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
@@ -189,7 +189,7 @@
                     opTracker.notifyAll();
                 }
             }
-            checkAndNotifyFlushThread();
+            checkAndNotifyFlushThread(false);
         }
         if (memoryComponent.getLsmIndex().getNumOfFilterFields() > 0
                 && memoryComponent.getLsmIndex().isPrimaryIndex()) {
@@ -210,7 +210,7 @@
     public boolean isFull() {
         boolean full = vbc.isFull();
         if (full) {
-            checkAndNotifyFlushThread();
+            checkAndNotifyFlushThread(true);
         }
         return full;
     }
@@ -280,7 +280,7 @@
         ICachedPage page = vbc.pin(dpid, context);
         if (context.isNewPage()) {
             incrementFilteredMemoryComponentUsage(dpid, 1);
-            checkAndNotifyFlushThread();
+            checkAndNotifyFlushThread(false);
         }
         return page;
     }
@@ -299,8 +299,12 @@
         }
     }
 
-    private void checkAndNotifyFlushThread() {
+    private void checkAndNotifyFlushThread(boolean log) {
         if (vbc.getUsage() < flushPageBudget) {
+            if (log) {
+                LOGGER.info("not notifying the flush thread vbcUsage({}) < flushPageBudget({})", vbc.getUsage(),
+                        flushPageBudget);
+            }
             return;
         }
         // Notify the flush thread to schedule flushes. This is used to avoid deadlocks because page pins can be
@@ -317,7 +321,7 @@
         int delta = multiplier - cPage.getFrameSizeMultiplier();
         incrementFilteredMemoryComponentUsage(((VirtualPage) cPage).dpid(), delta);
         if (delta > 0) {
-            checkAndNotifyFlushThread();
+            checkAndNotifyFlushThread(false);
         }
     }
 
@@ -450,6 +454,11 @@
     }
 
     @Override
+    public String dumpState() {
+        return "flushingComponents=" + flushingComponents + ", " + vbc.dumpState();
+    }
+
+    @Override
     public void closeFileIfOpen(FileReference fileRef) {
         vbc.closeFileIfOpen(fileRef);
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMComponent.java
index 186cabb..7de62ce 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMComponent.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/ILSMComponent.java
@@ -155,4 +155,8 @@
      * @return the number of readers inside a component
      */
     int getReaderCount();
+
+    default String dumpState() {
+        return "";
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IVirtualBufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IVirtualBufferCache.java
index bbe6051..16c6c10 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IVirtualBufferCache.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IVirtualBufferCache.java
@@ -63,4 +63,8 @@
      * @throws HyracksDataException
      */
     void flushed(ILSMMemoryComponent memoryComponent) throws HyracksDataException;
+
+    default String dumpState() {
+        return "";
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
index 7088791..a42f64b 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMMemoryComponent.java
@@ -355,4 +355,9 @@
                 + writerCount + ", \"readers\":" + readerCount + ", \"pendingFlushes\":" + pendingFlushes
                 + ", \"id\":\"" + componentId + "\", \"index\":" + getIndex() + "}";
     }
+
+    @Override
+    public String dumpState() {
+        return this + ", isCompFull=" + vbc.isFull(this) + ", isFull=" + vbc.isFull() + ", " + vbc.dumpState();
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
index cdf7ad7..28567c0 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Predicate;
 
@@ -100,14 +101,22 @@
         }
         try {
             validateOperationEnterComponentsState(ctx);
+            long start = System.nanoTime();
+            boolean dumpState = false;
             synchronized (opTracker) {
                 while (true) {
                     lsmIndex.getOperationalComponents(ctx);
-                    if (enterComponents(ctx, opType)) {
+                    if (enterComponents(ctx, opType, dumpState)) {
                         return true;
                     } else if (isTryOperation) {
                         return false;
                     }
+                    dumpState = false;
+                    long minutes = TimeUnit.NANOSECONDS.toMinutes(System.nanoTime() - start);
+                    if (minutes > 2) {
+                        start = System.nanoTime();
+                        dumpState = true;
+                    }
                     try {
                         opTracker.wait(100);
                     } catch (InterruptedException e) {
@@ -124,7 +133,7 @@
     }
 
     @CriticalPath
-    protected boolean enterComponents(ILSMIndexOperationContext ctx, LSMOperationType opType)
+    protected boolean enterComponents(ILSMIndexOperationContext ctx, LSMOperationType opType, boolean dumpState)
             throws HyracksDataException {
         validateOperationEnterComponentsState(ctx);
         List<ILSMComponent> components = ctx.getComponentHolder();
@@ -136,6 +145,9 @@
                 final ILSMComponent component = components.get(i);
                 boolean isMutableComponent = numEntered == 0 && component.getType() == LSMComponentType.MEMORY;
                 if (!component.threadEnter(opType, isMutableComponent)) {
+                    if (dumpState) {
+                        LOGGER.info("couldn't enter component: {}", component.dumpState());
+                    }
                     break;
                 }
                 numEntered++;
@@ -523,7 +535,7 @@
     public void flush(ILSMIOOperation operation) throws HyracksDataException {
         LOGGER.debug("Started a flush operation for index: {}", lsmIndex);
         synchronized (opTracker) {
-            while (!enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.FLUSH)) {
+            while (!enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.FLUSH, false)) {
                 try {
                     opTracker.wait();
                 } catch (InterruptedException e) {
@@ -589,7 +601,7 @@
                     mergeOp.getMergingComponents().size(), lsmIndex);
         }
         synchronized (opTracker) {
-            enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.MERGE);
+            enterComponents(operation.getAccessor().getOpContext(), LSMOperationType.MERGE, false);
         }
         ILSMDiskComponent newComponent;
         try {
@@ -914,7 +926,7 @@
                 exitComponents(componentReplacementCtx, LSMOperationType.SEARCH, null, false);
                 // enter new component
                 componentReplacementCtx.prepareToEnter();
-                enterComponents(componentReplacementCtx, LSMOperationType.SEARCH);
+                enterComponents(componentReplacementCtx, LSMOperationType.SEARCH, false);
                 componentReplacementCtx.replace(ctx);
             }
         }
