I see long pauses in your GC log (> 3 seconds)
This means your app have high pressure on the heap.
It's hard to tell why without knowing what your app is doing.

Are you using OFFHEAP_TIERED?
If yes, try to reduce sqlOnheapRowCacheSize value.




2016-05-26 14:57 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>:

> Ok,
> i am going to add new machines to ignite cluster. Firstly, please look at
> my gc file log - previous message.
>
> 2016-05-26 13:39 GMT+02:00 Alexei Scherbakov <alexey.scherbak...@gmail.com
> >:
>
>> Hi,
>>
>> The initial question was about setSqlOnheapRowCacheSize and I think
>> now it is clear how to improve SQL performance using with parameter.
>>
>> If you dissatisfied with the Ignite performance, I suggest you to start a
>> new thread on this,
>> providing detailed info about your performance test like
>> cluster configuration, server GC settings, and test sources.
>>
>> As already mentioned, Ignite SQL engine(H2) has the same(or slightly)
>> less performance when Postresql.
>> Ignite really starts to shine when used as distributed data grid having
>> large amount of data in memory on several nodes.
>>
>> SELECT count(*) from table is not very good test query.
>> Postgres may have the result cached, whereas Ignite always do the full
>> table traversal.
>> Recently I implemented an improvement for this case.
>> See https://issues.apache.org/jira/browse/IGNITE-2751 for details.
>>
>> I strongly recommend to test Ignite performance on the real case.
>> Dont' forget to configure GC properly [1]
>>
>> [1] https://apacheignite.readme.io/docs/jvm-and-system-tuning
>>
>>
>>
>>
>>
>>
>> 2016-05-26 2:09 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>:
>>
>>> | Also it would be interesting to see result of
>>> | SELECT count(*) from the query above in both cases.
>>> (number of rows = 2 798 685)
>>> SELECT count(*) FROM postgresTable;
>>>  456 ms
>>> SELECT count(*) FROM postgresTable;
>>> 314 ms
>>>
>>> SELECT count(*) FROM igniteTable;
>>> 9746 ms
>>> SELECT count(*) FROM igniteTable;
>>> 9664 ms
>>>
>>>
>>> Code of Jdbc Drvier (the same code for Ignite and postgresql - url
>>> connection is given from command line):
>>> http://pastebin.com/mYDSjziN
>>> My start sh file:
>>> http://pastebin.com/VmRM2sPQ
>>>
>>> My gc log file (following hint Magda):
>>> (file generated during hot loading and query via JDBC).
>>> http://pastebin.com/XicnNczV
>>>
>>>
>>> If you would like to see something else let me know.
>>>
>>> PS How to launch H2 debug console ? I followed docs, but it doesn't
>>> help.
>>> I set enviroment variable:
>>> echo $IGNITE_H2_DEBUG_CONSOLE
>>> true
>>> now, ./ignite.sh conf.xml
>>>
>>> sudo netstat -tulpn | grep 61214
>>> No opened ports.
>>>
>>> BTW, during starting ignite it give me information:
>>> [01:03:02]  Performance suggestions for grid 'turbines_table_cluster'
>>> (fix if possible)
>>> [01:03:02] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
>>> [01:03:02]   ^-- Disable grid events (remove 'includeEventTypes' from
>>> configuration)
>>> [01:03:02]   ^-- Enable ATOMIC mode if not using transactions (set
>>> 'atomicityMode' to ATOMIC)
>>> [01:03:02]   ^-- Enable write-behind to persistent store (set
>>> 'writeBehindEnabled' to true)
>>>
>>>
>>> 2016-05-25 12:23 GMT+02:00 Alexei Scherbakov <
>>> alexey.scherbak...@gmail.com>:
>>>
>>>> For postgres test I mean initial jdbc query and result set traversal.
>>>> For Ignite I mean sql query and iterator traversal.
>>>> Also it would be interesting to see result of
>>>> *SELECT count(*) from the query above in both cases.*
>>>>
>>>> 2016-05-25 12:00 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>:
>>>>
>>>>> [image: Obraz w treści 1]
>>>>>
>>>>> What code do you mean ? JDBC client ?
>>>>>
>>>>> 2016-05-25 10:25 GMT+02:00 Alexei Scherbakov <
>>>>> alexey.scherbak...@gmail.com>:
>>>>>
>>>>>> What's the batch size for postgresql ?
>>>>>> What's the size of one entry ?
>>>>>> Could you provide the test code for both postgres and Ignite (just
>>>>>> the query + read with the time estimation) ?
>>>>>>
>>>>>> 2016-05-25 11:13 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>:
>>>>>>
>>>>>>> | How many entries are downloaded to the client in both cases?
>>>>>>> 3000 000
>>>>>>>
>>>>>>> | Do the both queries involve network I/O ?
>>>>>>> No, I have only local one server (for testing purpose).
>>>>>>>
>>>>>>>
>>>>>>> 2016-05-25 9:59 GMT+02:00 Alexei Scherbakov <
>>>>>>> alexey.scherbak...@gmail.com>:
>>>>>>>
>>>>>>>> SELECT * is not really a good test query.
>>>>>>>> It's result can be affected not only by engine performance.
>>>>>>>>
>>>>>>>> How many entries are downloaded to the client in both cases?
>>>>>>>> Do the both queries involve network I/O ?
>>>>>>>>
>>>>>>>> 2016-05-25 7:58 GMT+03:00 Denis Magda <dma...@gridgain.com>:
>>>>>>>>
>>>>>>>>> In general Ignite is designed to be used in a distributed
>>>>>>>>> environment when gigabytes or terabytes of dataset is spread across 
>>>>>>>>> many
>>>>>>>>> cluster nodes and SQL queries executed across the cluster should be 
>>>>>>>>> faster
>>>>>>>>> since resources of all the machines will be used and as a result a 
>>>>>>>>> query
>>>>>>>>> should be completed quicker. In your scenario you just have only a 
>>>>>>>>> single
>>>>>>>>> cluster node and in fact comparing performance of PostgreSQL and H2 
>>>>>>>>> (engine
>>>>>>>>> that is used by Ignite SQL) and I can consider that Ignite SQL can 
>>>>>>>>> work
>>>>>>>>> slightly slowly but this in is not Ignite usage scenario.
>>>>>>>>>
>>>>>>>>> However if you try to create a cluster of several nodes running on
>>>>>>>>> different physical machines, pre-load gigabytes of data there and 
>>>>>>>>> compare
>>>>>>>>> Ignite SQL and PostgresSQL you should see performance improvements on
>>>>>>>>> Ignite side.
>>>>>>>>>
>>>>>>>>> In any case taking into account the advise above do the following:
>>>>>>>>> - execute “EXPLAIN” query to see that the index is chose properly
>>>>>>>>> [1];
>>>>>>>>> - H2 console will allow you to see how fast a query is presently
>>>>>>>>> executed on a single node removing several Ignite layers [2];
>>>>>>>>> - check if you have any GC pauses during query execution since it
>>>>>>>>> can affect execution time [3]
>>>>>>>>>
>>>>>>>>> Also share the objects you use as keys and values.
>>>>>>>>>
>>>>>>>>> [1] https://apacheignite.readme.io/docs/sql-queries#using-explain
>>>>>>>>> [2]
>>>>>>>>> https://apacheignite.readme.io/docs/sql-queries#using-h2-debug-console
>>>>>>>>> [3]
>>>>>>>>> https://apacheignite.readme.io/v1.6/docs/jvm-and-system-tuning#section-detailed-garbage-collection-stats
>>>>>>>>>
>>>>>>>>> —
>>>>>>>>> Denis
>>>>>>>>>
>>>>>>>>> On May 25, 2016, at 3:23 AM, Tomek W <rrrtomtom...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> +==============================================================================================+
>>>>>>>>> |     Node ID8(@), IP      | CPUs | Heap Used | CPU Load |   Up
>>>>>>>>> Time   |  Size   | Hi/Mi/Rd/Wr |
>>>>>>>>>
>>>>>>>>> +==============================================================================================+
>>>>>>>>> | 0F0AAF99(@n0), 127.0.0.1 | 8    | 54.50 %   | 3.23 %   |
>>>>>>>>> 00:13:13:49 | 3000000 | Hi: 0       |
>>>>>>>>> |                          |      |           |
>>>>>>>>> |             |         | Mi: 0       |
>>>>>>>>> |                          |      |           |
>>>>>>>>> |             |         | Rd: 0       |
>>>>>>>>> |                          |      |           |
>>>>>>>>> |             |         | Wr: 0       |
>>>>>>>>>
>>>>>>>>> +----------------------------------------------------------------------------------------------+
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I followed your hints. Actually, client doesn't require such many
>>>>>>>>> memory as before - thanks for it.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> When it comes to configuration of server, I also followed your
>>>>>>>>> hints, results:
>>>>>>>>>
>>>>>>>>> Querying is done by JDBC Client.  In ignite and postgresql I have
>>>>>>>>> single index on column A.
>>>>>>>>>
>>>>>>>>> Ignite: SELECT * FROM table WHERE A > 1345 takes 6s.
>>>>>>>>> Postgres: SELECT * FROM table WHERE A > 1345 takes 4s.
>>>>>>>>>
>>>>>>>>> As you  can see, postgres is still bettter than Ignite.  I show
>>>>>>>>> you significant fragments of my configuration:
>>>>>>>>> http://pastebin.com/EQC4JPWR
>>>>>>>>>
>>>>>>>>> And xml for server file:
>>>>>>>>> http://pastebin.com/enR9h5J4
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Try to consider why postgresql is still better, please.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Alexei Scherbakov
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Best regards,
>>>>>> Alexei Scherbakov
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Best regards,
>>>> Alexei Scherbakov
>>>>
>>>
>>>
>>
>>
>> --
>>
>> Best regards,
>> Alexei Scherbakov
>>
>
>


-- 

Best regards,
Alexei Scherbakov

Reply via email to