Postgres 连接应该始终打开吗?或者在每个查询 运行 之前连接?
Postgres connection should be always on? or connect before running each query?
我正在考虑是否应该始终保持我的 postgres 连接,并且 check/re-connect 在 运行ning 查询之前。或者我应该在 运行 每个查询之前连接它并在完成后立即关闭连接。谢谢!
只要 Postgres 服务器没有完全被连接堵塞(也就是说,这不是一个会创建大量永久连接的应用程序),我不会不认为保持连接是个问题。但是,我还建议在每次查询之前检查连接并处理重新连接。许多图书馆提供了执行此操作的方法。例如,MyBatis (Java),你可以让它每次发出一个测试查询,可以指定。为此,我使用了轻量级 SELECT 1
。
我想说的是要考虑的关键是让连接在交易中尽可能短的空闲时间,因为当发生这种情况时,它可以有各种不同的对性能的影响(例如减慢其他查询,防止及时清理高周转表等)。这并不是说在事务 空闲中花费的任何时间 都自动是坏的,但应该考虑并尽可能减少。 (例如,如果您有一些计算需要几分钟才能达到 运行,请确保在执行这些计算之前 commit
或 rollback
(具体取决于上下文)。
如果您正在做一堆 SELECT
,并且没有任何需要 commit
的东西,我建议您做一个 rollback
以帮助保持 事务中的闲置 状态降至最低。
我刚刚意识到 postgres 连接字符串有一堆连接池设置,例如:
用户名=root;密码=myPassword;主机=localhost;端口=5432;数据库=myDataBase;
池化=true;最小池大小=0;最大池大小=100;连接寿命=0;
所以在我的代码中,我可以在命令执行完毕后关闭连接。但是在幕后,连接实际上还活着,并存储在连接池中以供再次使用。
我正在考虑是否应该始终保持我的 postgres 连接,并且 check/re-connect 在 运行ning 查询之前。或者我应该在 运行 每个查询之前连接它并在完成后立即关闭连接。谢谢!
只要 Postgres 服务器没有完全被连接堵塞(也就是说,这不是一个会创建大量永久连接的应用程序),我不会不认为保持连接是个问题。但是,我还建议在每次查询之前检查连接并处理重新连接。许多图书馆提供了执行此操作的方法。例如,MyBatis (Java),你可以让它每次发出一个测试查询,可以指定。为此,我使用了轻量级 SELECT 1
。
我想说的是要考虑的关键是让连接在交易中尽可能短的空闲时间,因为当发生这种情况时,它可以有各种不同的对性能的影响(例如减慢其他查询,防止及时清理高周转表等)。这并不是说在事务 空闲中花费的任何时间 都自动是坏的,但应该考虑并尽可能减少。 (例如,如果您有一些计算需要几分钟才能达到 运行,请确保在执行这些计算之前 commit
或 rollback
(具体取决于上下文)。
如果您正在做一堆 SELECT
,并且没有任何需要 commit
的东西,我建议您做一个 rollback
以帮助保持 事务中的闲置 状态降至最低。
我刚刚意识到 postgres 连接字符串有一堆连接池设置,例如:
用户名=root;密码=myPassword;主机=localhost;端口=5432;数据库=myDataBase; 池化=true;最小池大小=0;最大池大小=100;连接寿命=0;
所以在我的代码中,我可以在命令执行完毕后关闭连接。但是在幕后,连接实际上还活着,并存储在连接池中以供再次使用。