[ 
https://issues.apache.org/jira/browse/IGNITE-14140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladislav Pyatkov updated IGNITE-14140:
---------------------------------------
    Description: 
Free lists flushing optimization can block db-checkpoint-thread when it got 
Write lock. It might block all transactions for several hundreds milliseconds.
{noformat}
"db-checkpoint-thread-#334%DPL_GRID%DplGridNodeName%" #667 daemon prio=5 
os_prio=0 tid=0x00007e765c123800 nid=0xee0b8 runnable [0x00007e767f535000]
   java.lang.Thread.State: RUNNABLE
        at sun.misc.Unsafe.getObjectVolatile(Native Method)
        at 
java.util.concurrent.atomic.AtomicReferenceArray.getRaw(AtomicReferenceArray.java:130)
        at 
java.util.concurrent.atomic.AtomicReferenceArray.get(AtomicReferenceArray.java:125)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.getBucketCache(AbstractFreeList.java:690)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.flushBucketsCache(PagesList.java:374)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.saveMetadata(PagesList.java:343)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.saveStoreMetadata(GridCacheOffheapManager.java:373)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:336)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:322)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.onMarkCheckpointBegin(GridCacheOffheapManager.java:247)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointWorkflow.markCheckpointBegin(CheckpointWorkflow.java:281)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.doCheckpoint(Checkpointer.java:388)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.body(Checkpointer.java:264)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
        at java.lang.Thread.run(Thread.java:748)
{noformat}
We can to reduce time into Write lock if switch off optimization before the 
lock will be gotten and enable it after the lock will be left off.

  was:
Free lists flushing optimization can block db-checkpoint-thread when it got 
Write lock. It might block all transactions for several hundreds milliseconds.
{noformat}
"db-checkpoint-thread-#334%DPL_GRID%DplGridNodeName%" #667 daemon prio=5 
os_prio=0 tid=0x00007e765c123800 nid=0xee0b8 runnable [0x00007e767f535000]
   java.lang.Thread.State: RUNNABLE
        at sun.misc.Unsafe.getObjectVolatile(Native Method)
        at 
java.util.concurrent.atomic.AtomicReferenceArray.getRaw(AtomicReferenceArray.java:130)
        at 
java.util.concurrent.atomic.AtomicReferenceArray.get(AtomicReferenceArray.java:125)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.getBucketCache(AbstractFreeList.java:690)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.flushBucketsCache(PagesList.java:374)
        at 
org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.saveMetadata(PagesList.java:343)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.saveStoreMetadata(GridCacheOffheapManager.java:373)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:336)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:322)
        at 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.onMarkCheckpointBegin(GridCacheOffheapManager.java:247)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointWorkflow.markCheckpointBegin(CheckpointWorkflow.java:281)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.doCheckpoint(Checkpointer.java:388)
        at 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.body(Checkpointer.java:264)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
        at java.lang.Thread.run(Thread.java:748)
{noformat}
We can to reduce time into Write lock if switch off optimization before the 
lock will be gotten and enable it after the lock will be left off.
 This image confirms that all time consume of storing the metadata cache.


> Checkpointer thread holds write lock too long
> ---------------------------------------------
>
>                 Key: IGNITE-14140
>                 URL: https://issues.apache.org/jira/browse/IGNITE-14140
>             Project: Ignite
>          Issue Type: Bug
>          Components: persistence
>            Reporter: Vladislav Pyatkov
>            Assignee: Vladislav Pyatkov
>            Priority: Major
>
> Free lists flushing optimization can block db-checkpoint-thread when it got 
> Write lock. It might block all transactions for several hundreds milliseconds.
> {noformat}
> "db-checkpoint-thread-#334%DPL_GRID%DplGridNodeName%" #667 daemon prio=5 
> os_prio=0 tid=0x00007e765c123800 nid=0xee0b8 runnable [0x00007e767f535000]
>    java.lang.Thread.State: RUNNABLE
>       at sun.misc.Unsafe.getObjectVolatile(Native Method)
>       at 
> java.util.concurrent.atomic.AtomicReferenceArray.getRaw(AtomicReferenceArray.java:130)
>       at 
> java.util.concurrent.atomic.AtomicReferenceArray.get(AtomicReferenceArray.java:125)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.getBucketCache(AbstractFreeList.java:690)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.flushBucketsCache(PagesList.java:374)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList.saveMetadata(PagesList.java:343)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.saveStoreMetadata(GridCacheOffheapManager.java:373)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:336)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.syncMetadata(GridCacheOffheapManager.java:322)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.onMarkCheckpointBegin(GridCacheOffheapManager.java:247)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointWorkflow.markCheckpointBegin(CheckpointWorkflow.java:281)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.doCheckpoint(Checkpointer.java:388)
>       at 
> org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer.body(Checkpointer.java:264)
>       at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
>       at java.lang.Thread.run(Thread.java:748)
> {noformat}
> We can to reduce time into Write lock if switch off optimization before the 
> lock will be gotten and enable it after the lock will be left off.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to