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

Joel Lang updated IGNITE-8359:
------------------------------
    Description: 
I am testing the use of Ignite's native persistence to store a data set long 
term. This is on a 2.5 nightly build. To do this I am using Ignite's data 
streamers to stream in 6,000,000 entries into cache A, and 12,000,000 entries 
into cache B to simulate the upper limit for 2 years worth of data.

The test ran smoothly on my personal machine which has a SSD running Windows, 
but ran into tremendous issues on a development test machine which is a Linux 
VM using a HDD. I realize when looking at Ignite documentation that it 
specifically excludes HDD's as something to base a persistent store on, but 
perhaps my experience could yield improvements for SSD performance too.

The root issue is that cache updates over time become severely bottlenecked by 
reading SQL index pages from disk in order to update the index. If I had to 
guess this would be related to BPlusTree.findInsertionPoint() and it having to 
load pages from disk if they've been evicted.

I used a 2.5 nightly build because 2.3 and 2.4 have the same issue where this 
whole process was further bottlenecked by a lock behind held by Ignite while it 
read the page from disk in PageMemoryImpl.acquirePage(). 2.5 fixed this.

The performance issue was much more severe in the previously mentioned cache B, 
which contains user comments on entries in cache A. The key for each comment 
entry is a Java class containing the creation timestamp and the string key of 
the owning entry in cache A. This owning entry key is indexed so comments can 
be queried by their owner. In this test case there were two comments in cache B 
for every entry in cache A.

I found that even 25% of the way through streaming data into cache B, it would 
take anywhere from 15 to 35 seconds to insert a batch of 2000 comments. This 
slowed streaming to a crawl and ensures that streaming would need to continue 
overnight to have any hope of finishing.

This also brings up concerns about data rebalancing which will have the same 
performance penalty and similarly take a day at least to rebalance both caches.

I am worried about the dependency on a large amount of disk reads being done to 
update the index, even though it is considerably faster with an SSD than 
without. I've also not been able to test whether performance for an SSD will be 
different when running in a VM, which is another worry.

  was:
I am testing the use of Ignite's native persistence to store a data set long 
term. This is on a 2.5 nightly build. To do this I am using Ignite's data 
streamers to stream in 6,000,000 entries into cache A, and 12,000,000 entries 
into cache B to simulate the upper limit for 2 years worth of data.

The test ran smoothly on my personal machine which has a SSD running Windows, 
but ran into tremendous issues on a development test machine which is a Linux 
VM using a HDD. I realize when looking at Ignite documentation that it 
specifically excludes HDD's as something to base a persistent store on, but 
perhaps my experience could yield improvements for SSD performance too.

The root issue is that cache updates over time become severely bottlenecked by 
reading SQL index pages from disk in order to update the index. If I had to 
guess this would be related to BPlusTree.findInsertionPoint() and it having to 
load pages from disk if they've been evicted.

I used a 2.5 nightly build because 2.3 and 2.4 have the same issue where this 
whole process was further bottlenecked by a lock behind held by Ignite while it 
read the page from disk in PageMemoryImpl.acquirePage(). 2.5 fixed this.

The performance issue was much more severe in the previously mentioned cache B, 
which contains user comments on entries in cache A. The key for each comment 
entry is a Java class containing the creation timestamp and the string key of 
the owning entry in cache A. This owning entry key is indexed so comments can 
be queried by their owner. In this test case there were two comments in cache B 
for every entry in cache A.

I found that even 25% of the way through streaming data into cache B, it would 
take anywhere from 15 to 35 seconds to insert a batch of 2000 comments. This 
slowed streaming to a crawl and ensures that streaming would need to continue 
overnight to have any hope of finishing.

This also brings up concerns about data rebalancing which will have the same 
performance penalty and similarly take a day at least to rebalance both caches.

I am worried about the dependency on a large amount of disk reads being done to 
update the index, even though it is considerably faster with an SSD than 
without.


> Severe performance degradation with persistence and data streaming on HDD
> -------------------------------------------------------------------------
>
>                 Key: IGNITE-8359
>                 URL: https://issues.apache.org/jira/browse/IGNITE-8359
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache, persistence, sql, streaming
>    Affects Versions: 2.4, 2.5
>         Environment: Linux CentOS 7 VM using Ignite DirectIO plugin with HDD.
>            Reporter: Joel Lang
>            Priority: Major
>
> I am testing the use of Ignite's native persistence to store a data set long 
> term. This is on a 2.5 nightly build. To do this I am using Ignite's data 
> streamers to stream in 6,000,000 entries into cache A, and 12,000,000 entries 
> into cache B to simulate the upper limit for 2 years worth of data.
> The test ran smoothly on my personal machine which has a SSD running Windows, 
> but ran into tremendous issues on a development test machine which is a Linux 
> VM using a HDD. I realize when looking at Ignite documentation that it 
> specifically excludes HDD's as something to base a persistent store on, but 
> perhaps my experience could yield improvements for SSD performance too.
> The root issue is that cache updates over time become severely bottlenecked 
> by reading SQL index pages from disk in order to update the index. If I had 
> to guess this would be related to BPlusTree.findInsertionPoint() and it 
> having to load pages from disk if they've been evicted.
> I used a 2.5 nightly build because 2.3 and 2.4 have the same issue where this 
> whole process was further bottlenecked by a lock behind held by Ignite while 
> it read the page from disk in PageMemoryImpl.acquirePage(). 2.5 fixed this.
> The performance issue was much more severe in the previously mentioned cache 
> B, which contains user comments on entries in cache A. The key for each 
> comment entry is a Java class containing the creation timestamp and the 
> string key of the owning entry in cache A. This owning entry key is indexed 
> so comments can be queried by their owner. In this test case there were two 
> comments in cache B for every entry in cache A.
> I found that even 25% of the way through streaming data into cache B, it 
> would take anywhere from 15 to 35 seconds to insert a batch of 2000 comments. 
> This slowed streaming to a crawl and ensures that streaming would need to 
> continue overnight to have any hope of finishing.
> This also brings up concerns about data rebalancing which will have the same 
> performance penalty and similarly take a day at least to rebalance both 
> caches.
> I am worried about the dependency on a large amount of disk reads being done 
> to update the index, even though it is considerably faster with an SSD than 
> without. I've also not been able to test whether performance for an SSD will 
> be different when running in a VM, which is another worry.



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

Reply via email to