| Make sure you have enough memory for your dataset. How to check it ? 2016-05-26 18:46 GMT+02:00 Alexei Scherbakov <alexey.scherbak...@gmail.com>:
> You should measure performance on the real-life cases and see if it's > enough for you. > Ignite performs good in both modes. > If you really want to use ONHEAP_TIERED, you must tune GC and heap size, > as described here [1] > Make sure you have enough memory for your dataset. > The goal is to avoid long GC pauses. > > [1] https://apacheignite.readme.io/docs/jvm-and-system-tuning > > 2016-05-26 19:40 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>: > >> Ok, I will try it. However, Why OFF_HEAP_TIERED ? It seem to be not fast >> as ON HEAP >> >> 2016-05-26 18:32 GMT+02:00 Alexei Scherbakov < >> alexey.scherbak...@gmail.com>: >> >>> We are talking about count(*) query performance, right ? >>> WriteBehind is for writing to CacheStore in the async mode. >>> >>> If yes, do the following: >>> >>> 1) Set OFFHEAP_TIERED mode and reduce max heap memory on example to 4Gb. >>> 2) Update to Ignite 1.6 >>> 3) Measure query performance. Run the query several times and use >>> average value as the estimation. >>> 4) If it's not as expected, show me GC logs. >>> >>> >>> >>> 2016-05-26 18:28 GMT+03:00 Tomek W <rrrtomtom...@gmail.com>: >>> >>>> No, I am using ON_HEAP_TIERED. >>>> >>>> Maybe WriteBehind should be turned on ? >>>> My App do exactly one thing: initialize hot loading. >>>> >>>> When it comes to JDBC client, I did show fragment of code in previous >>>> post. >>>> >>>> 2016-05-26 16:15 GMT+02:00 Alexei Scherbakov < >>>> alexey.scherbak...@gmail.com>: >>>> >>>>> 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 >>>>> >>>> >>>> >>> >>> >>> -- >>> >>> Best regards, >>> Alexei Scherbakov >>> >> >> > > > -- > > Best regards, > Alexei Scherbakov >