You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Kirill Gusakov (Jira)" <ji...@apache.org> on 2022/08/07 23:57:00 UTC
[jira] [Updated] (IGNITE-17482) Insert only benchmark show signifcant slowdown on jdbc API
[ https://issues.apache.org/jira/browse/IGNITE-17482?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kirill Gusakov updated IGNITE-17482:
------------------------------------
Attachment: Screenshot 2022-08-08 at 02.56.42.png
> Insert only benchmark show signifcant slowdown on jdbc API
> ----------------------------------------------------------
>
> Key: IGNITE-17482
> URL: https://issues.apache.org/jira/browse/IGNITE-17482
> Project: Ignite
> Issue Type: Task
> Reporter: Kirill Gusakov
> Priority: Major
> Attachments: Screenshot 2022-08-08 at 02.56.42.png
>
>
> After some investigation under the issue https://issues.apache.org/jira/browse/IGNITE-17423 we found out, that simple insert only benchmark has significant difference in performance between key-value and jdbc API.
> Step to reproduce:
> * checkout [https://github.com/gridgain/apache-ignite-3/tree/ignite-17423]
> * run IgniteBenchmark#jdbcInsert and IgniteBenchmark#kvInsert
> The difference up to 3 times:
> key-value:
> {code:java}
> Result "org.apache.ignite.internal.configuration.IgniteBenchmark.kvInsert":
> N = 226939
> mean = 528.170 ±(99.9%) 1.877 us/op Histogram, us/op:
> [ 0.000, 5000.000) = 226851
> [ 5000.000, 10000.000) = 65
> [10000.000, 15000.000) = 13
> [15000.000, 20000.000) = 3
> [20000.000, 25000.000) = 1
> [25000.000, 30000.000) = 3
> [30000.000, 35000.000) = 0
> [35000.000, 40000.000) = 1
> [40000.000, 45000.000) = 1 Percentiles, us/op:
> p(0.0000) = 360.448 us/op
> p(50.0000) = 508.416 us/op
> p(90.0000) = 604.160 us/op
> p(95.0000) = 642.048 us/op
> p(99.0000) = 759.808 us/op
> p(99.9000) = 3207.414 us/op
> p(99.9900) = 10262.020 us/op
> p(99.9990) = 41768.596 us/op
> p(99.9999) = 45875.200 us/op
> p(100.0000) = 45875.200 us/op
> # Run complete. Total time: 00:02:06REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
> why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
> experiments, perform baseline and negative tests that provide experimental control, make sure
> the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
> Do not assume the numbers tell you what you want them to tell.Benchmark Mode Cnt Score Error Units
> IgniteBenchmark.kvInsert sample 226939 528.170 ± 1.877 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.00 sample 360.448 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.50 sample 508.416 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.90 sample 604.160 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.95 sample 642.048 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.99 sample 759.808 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.999 sample 3207.414 us/op
> IgniteBenchmark.kvInsert:kvInsert·p0.9999 sample 10262.020 us/op
> IgniteBenchmark.kvInsert:kvInsert·p1.00 sample 45875.200 us/op {code}
> jdbc:
> {code:java}
> Result "org.apache.ignite.internal.configuration.IgniteBenchmark.jdbcInsert":
> N = 74613
> mean = 1606.345 ±(99.9%) 100.395 us/op
> Histogram, us/op:
> [ 0.000, 125000.000) = 74572
> [ 125000.000, 250000.000) = 40
> [ 250000.000, 375000.000) = 0
> [ 375000.000, 500000.000) = 0
> [ 500000.000, 625000.000) = 0
> [ 625000.000, 750000.000) = 0
> [ 750000.000, 875000.000) = 0
> [ 875000.000, 1000000.000) = 0
> [1000000.000, 1125000.000) = 0
> [1125000.000, 1250000.000) = 0
> [1250000.000, 1375000.000) = 0
> [1375000.000, 1500000.000) = 0
> [1500000.000, 1625000.000) = 0
> [1625000.000, 1750000.000) = 1
> [1750000.000, 1875000.000) = 0
> Percentiles, us/op:
> p(0.0000) = 841.728 us/op
> p(50.0000) = 1177.600 us/op
> p(90.0000) = 1517.568 us/op
> p(95.0000) = 1765.376 us/op
> p(99.0000) = 4488.069 us/op
> p(99.9000) = 105906.176 us/op
> p(99.9900) = 153354.240 us/op
> p(99.9990) = 1707081.728 us/op
> p(99.9999) = 1707081.728 us/op
> p(100.0000) = 1707081.728 us/op
> # Run complete. Total time: 00:02:06
> REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
> why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
> experiments, perform baseline and negative tests that provide experimental control, make sure
> the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
> Do not assume the numbers tell you what you want them to tell.
> Benchmark Mode Cnt Score Error Units
> IgniteBenchmark.jdbcInsert sample 74613 1606.345 ± 100.395 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.00 sample 841.728 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.50 sample 1177.600 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.90 sample 1517.568 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.95 sample 1765.376 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.99 sample 4488.069 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.999 sample 105906.176 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p0.9999 sample 153354.240 us/op
> IgniteBenchmark.jdbcInsert:jdbcInsert·p1.00 sample 1707081.728 us/op {code}
> Also, in the branch I marked some methods with the JFR events marker, and found out, that we have some leaders of the execution time inside the SQL module:
> - org.apache.ignite.internal.sql.engine.exec.ExecutionServiceImpl.DistributedQueryManager#submitFragment
--
This message was sent by Atlassian Jira
(v8.20.10#820010)