Skip to content

Re-using a session pool on connect() #1494

@waiho-gumloop

Description

@waiho-gumloop

Is your feature request related to a problem? Please describe.
When using SQL Alchemy with python-spanner-sqlalchemy, I've noticed that we're instantiating the database object for every single connect() call, which adds quite a bit of additional overhead before the query even executes. Main overhead that I saw was BatchCreateSessions when using a PingingPool.

Describe the solution you'd like
Would like the ability to pass in an existing database object so that the same pool and its pre-created sessions can be re-used for every SQL alchemy connection checkout, similar to how using the raw spanner client works.

Describe alternatives you've considered
I've tried passing a pool to the connect(), but it still recreates the sessions.

Draft PR: https://github.com/googleapis/python-spanner/pull/1493/changes

While this PR works for my specific use case (SQL Alchemy x python-spanner-sqlalchemy + PingingPool), I am not clear of the implications of allowing the re-use of the database object. Would appreciate any guidance here

PR contains a benchmarking script that tests a 7 combinations (raw spanner client, mix of values for QueuePool/StaticPool x Spanner's PingingPool):

Image

Metadata

Metadata

Assignees

Labels

api: spannerIssues related to the googleapis/python-spanner API.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions