You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Christopher L. Shannon (JIRA)" <ji...@apache.org> on 2019/01/30 12:16:00 UTC

[jira] [Assigned] (AMQ-7143) Temporary transaction file (PageFile) being opened and closed many times, leading poor performance

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

Christopher L. Shannon reassigned AMQ-7143:
-------------------------------------------

    Assignee: Christopher L. Shannon

> Temporary transaction file (PageFile) being opened and closed many times, leading poor performance
> --------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-7143
>                 URL: https://issues.apache.org/jira/browse/AMQ-7143
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: KahaDB
>    Affects Versions: 5.15.8
>            Reporter: Alan Protasio
>            Assignee: Christopher L. Shannon
>            Priority: Major
>
> Hi,
> This is an optimization when we have a transaction with many writes (bigger than 10mb by default) and activemq creates a temporary transaction file (pageFile transaction).
> The problem is when this transaction is committed, this temporary file is opened and closed many times (number of writes inside the transaction), causing poor performance (this is operation "freezes the world" during the checkpoint).
>  
> See:
> [https://github.com/apache/activemq/blob/master/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java#L1147]
> [https://github.com/apache/activemq/blob/master/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java#L203]
>  
> Note that is the recoveryFile is enabled, we open and close the temporary 3 times for each index write.
> There is also a small bug that if the transaction is rolledBack, the temporary file is left there forever, see:
> [https://github.com/apache/activemq/blob/master/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java#L686]
> [https://github.com/apache/activemq/blob/master/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java#L1200]
>  
> As the transaction is rolledback, no writes will be performed and so, the file will never be deleted.
> The proposed change, use the same "RandomAccessFile" object used in the transaction and close if when all writes is done (so we stop opening and closing it for each write, and only do it one time per transaction).
>  
> Thanks



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)