Joel Lang created IGNITE-8359:
---------------------------------

             Summary: 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


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.



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

Reply via email to