Unexpected performance tests results regarding variables in processes

Hi all,

I recently used the Camunda performance test framework and more specifically the test regarding the use of variables in workflows.

I modified the VariablesPerformanceTest.java file to run the following 4 tests :

  • A process manipulating 1 “small” variable (the “someValue” string)
  • A process manipulating 10 “small” variable (“someValue” x 10)
  • A process manipulating 1 “big” variable (a string containing 1500 characters)
  • A process manipulating 10 “big” variable (1500 characters x 10)

The first two tests are the ones provided by the framework.
The last two are the ones I added to see the impact of more data.

I tried with different numbers of runs : 10, 100 and 1000.

The results (in milliseconds) are displayed below.

As one can see, one “big” string strongly penalize the performances compared to one “small” string. And surpringly, the results get “inverted” when dealing with 10 strings instead of one.

Can anybody explain these two unexpected results ?

(I ran the tests on a old quadcore laptop with 8Gb RAM and a SSD drive)

Regards,

Laurent

Hi @llemoux,

maybe it’s an effect of jdbc batch processing: Database Configuration | docs.camunda.org and internal database optimization?

Hope this helps, Ingo

Hello Ingo,

I made the tests on a dedicated server once again. But the results are similar. Deactivating jdbcBatchProcessing also made no real difference (I modified the two bpm-platform.xml I found in Camunda BPM platform).

Is there something else I can do at the (H2) DB level ?
For example, change the size of any specific column in the table used internally by Camunda to store the variables ?

Kind regards,

Laurent

Hello again,

Camunda documentation shows that strings stored in the database are limited to 4000 characters.
So, I now try to test a json content.
Unfortunately, even with lots of topics about Spin integration, I can’t find my way out.
I still have the same following error message :

org.camunda.bpm.engine.ProcessEngineException: Cannot find serializer for value 'Value ‘null’ of type ‘json’, isTransient=false’

Could anyone be so kind to tell me what’s wrong with the test and pom files hereafter ?
I precise that spin plugin seems to be duly declared at engine configuration level in camunda-bpm-platform framework.

Kind regards,

Laurent

Modified VariablesPerformanceTest.java :

public void noneStartEventJsonVar() {
HashMap<String, Object> variables = new HashMap<String, Object>();
String jsonPayload = …
JsonValue jsonValue = SpinValues.jsonValue(jsonPayload).create();
variables.put(VARIABLE1,jsonValue);

performanceTest()
  .step(new StartProcessInstanceStep(engine, "process", variables))
.run();

}

Corresponding pom.xml added dependencies :

org.camunda.spin

camunda-spin-core

org.camunda.spin

camunda-spin-dataformat-all

org.camunda.bpm

camunda-engine-plugin-spin

pom.xml at upper level (qa directory) added dependency :

org.camunda.spin

camunda-spin-bom

import

pom

1.18.0

Hi @llemoux,

I don’t know anything about H2 tuning here.

Most customers use real database servers (Oracle, IBM DB2, PostgresQL or MySQL) for their production environment and have experts to tune them.

Hope this helps, Ingo

Hi,

I finally found what the problem was. The engine used by the tests was not the one I believed.
The instance actually used is an embedded one, defined in PerfTestProcessEngine.java with supported settings declared in perf-test-config.properties.

As a result, to declare the necessary Spin plugin to the engine, one simply needs to add ‘-DprocessEnginePlugins=org.camunda.spin.plugin.impl.SpinProcessEnginePlugin’ to the maven command when running tests based on JSON.

And, for anyone interested, jdbcBatchProcessing can be actived or deactivated the same way.

Kind regards,

Laurent