Timescale Cloud:性能、扩展性、企业级
自托管产品
MST
您可以使用连接池器来扩展 Timescale 连接并提高数据库性能。Timescale 使用 pgBouncer
进行连接池化。
如果您的数据库需要大量短时连接,连接池器是提高性能的绝佳方法。例如,Web、无服务器和 IoT 应用程序通常使用基于事件的架构,其中数据在极短的时间内从数据库读取或写入。
您的应用程序会快速打开和关闭连接,而连接池器则维护一组到数据库的长期连接。这可以提高性能,因为连接池器会提前打开连接,允许应用程序打开许多短时连接,而数据库只打开少量长期连接。
默认情况下,连接池器具有数据库认证功能,因此您可以使用已设置的任何自定义用户,而无需进行额外配置。如果这是您首选的方法,您可以继续使用 tsdbadmin
用户。但是,在某些情况下,例如为连接池用户设置 statement_timeout
,您可能需要添加自定义配置。
以
tsdbadmin
用户身份登录数据库,并创建一个名为<MY_APP>
的新角色,密码为<PASSWORD>
CREATE ROLE <MY_APP> LOGIN PASSWORD '<PASSWORD>';将此用户的
statement_timeout
设置更改为 2 秒ALTER ROLE my_app SET statement_timeout TO '2s';在新终端窗口中,使用新用户
<MY_APP>
连接到连接池器❯ PGPASSWORD=<NEW_PASSWORD> psql 'postgres://my_app@service.project.tsdb.cloud.timescale.com:30477/tsdb?sslmode=require'输出结果如下所示
psql (15.3 (Homebrew), server 15.4 (Ubuntu 15.4-1.pgdg22.04+1))SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Type "help" for help.以
<MY_APP>
用户身份登录,检查设置是否正确SELECT current_user;┌──────────────┐│ current_user │├──────────────┤│ my_app │└──────────────┘(1 row)检查
<MY_APP>
用户的statement_timeout
设置是否正确tsdb=> show statement_timeout;┌───────────────────┐│ statement_timeout │├───────────────────┤│ 2s │└───────────────────┘(1 row)
创建连接池器时,有两种连接池类型可供选择:会话型或事务型。每种连接池类型都使用不同的模式来处理连接。
会话型连接池从池中分配一个连接,直到应用程序关闭它为止,类似于常规的 PostgreSQL 连接。当应用程序关闭连接时,连接会返回到池中。
事务型连接池仅在事务持续期间分配连接,并在事务结束时将连接释放回连接池。如果您的应用程序频繁打开和关闭连接,请选择事务型连接池。
默认情况下,连接池器同时支持两种模式。但是,您用于连接应用程序的连接字符串是不同的,具体取决于您想要会话型还是事务型连接池。在 Timescale 控制台中创建连接池时,系统会为您提供所选模式的正确连接字符串。
例如,直接连接到数据库的连接字符串如下所示
postgres://<USERNAME>:<PASSWORD>@service.example.cloud.timescale.com:30133/tsdb?sslmode=require
会话型连接池的连接字符串相同,但使用不同的端口号,如下所示
postgres://<USERNAME>:<PASSWORD>@service.example.cloud.timescale.com:29303/tsdb?sslmode=require
事务型连接池的连接字符串使用与会话型连接池相同的端口号,但使用不同的数据库名称,如下所示
postgres://<USERNAME>:<PASSWORD>@service.example.cloud.timescale.com:29303/tsdb_transaction?sslmode=require
请务必查看 Timescale 控制台输出,获取要在应用程序中使用的正确连接字符串。
连接池器管理到数据库本身和客户端应用程序的连接。它与数据库保持固定数量的打开连接,同时允许客户端打开和关闭连接。客户端可以从会话池或事务池请求连接。如果有空闲连接,连接池器将分配该连接。
允许每个连接池的客户端连接数量与数据库设置的 max_connections
参数成比例。会话池最多可以有 max_connections - 17
个客户端连接,而事务池最多可以有 (max_connections - 17) * 20
个客户端连接。
在未分配给任何连接池的 17 个保留连接中,默认有 12 个保留给超级用户,另外 5 个用于 Timescale 操作。
例如,如果 max_connections
设置为 500,则您的会话池的最大客户端连接数为 483 (500 - 17)
,事务池的最大客户端连接数为 9,660 (483 * 20)
。max_connections
的默认值根据您的服务计算大小而异。
创建新服务时,您也可以创建连接池器。或者,您可以在 Timescale 门户中将连接池器添加到现有服务。
登录 Timescale Console
并点击您想要添加连接池器的服务。
在
Operations
中,点击Connection pooling
>Add pooler
。您的连接池器连接详细信息显示在
Connection pooling
标签页中。使用此信息连接到您的事务型或会话型连接池器。有关不同连接池类型的更多信息,请参阅连接池类型部分。
如果您不再需要连接池器,可以在 Timescale 门户中将其删除。删除连接池器后,请务必更新您的应用程序以调整其用于连接到服务的端口。
在 Timescale Console
中,选择您想要从中移除连接池的服务。
选择
Operations
,然后选择Connection pooling
。点击
Remove connection pooler
。确认您要删除连接池器。
删除连接池器后,如果您将来将其重新添加,它将使用与之前相同的连接字符串和端口。
- 连接到您的数据库。
- 切换到
pgbouncer
数据库:\c pgbouncer
- 运行 pgBouncer 命令行界面的任何只读命令(例如,
SHOW STATS;
)。 - 有关完整选项,请参见此处的 pgBouncer 文档
。
连接池支持 VPC。您添加连接池器或连接到 VPC 的顺序无关紧要。您的连接字符串将自动更新以使用 VPC 连接字符串。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面