在我们的 Python 应用程序上看到查询性能并不令人满意,该应用程序运行多个SQLAlchemy core
用于访问 PostgreSQL 9.2 数据库的进程。我们可能有大约 100 到 200 个或更多并发进程对数据库执行查询。
我们没有类似pgpoolII
或pgbounce
当前安装的连接池系统。
我已经测试了一个查询,它可以从我们的应用程序中花费大约1-10 秒的时间,当运行结束时最多psql
需要20 毫秒。
我们认为这个问题与并发连接有关,特别是因为上述行为以及我们在访问系统中的不同表时看到这些性能下降。但是,我们不确定这一点,并且可以很容易地接受其他建议或解决方案。
处理来自多个进程对单个数据库服务器的并发连接的通常方法是什么,以使查询能够快速执行?
当你说你没有池时,你有点回答你自己的问题,但是......
这不是一个开箱即用的答案,对于所有客户端/数据库的东西,您可能需要做一些工作来确定到底有什么问题
备份 postgresql.conf 更改
停止并重新启动您的数据库服务器(重新加载可能不会获取更改)重现您的测试,确保服务器时间和客户端时间匹配并且您记录开始时间等。
将日志文件从导入中复制到您选择的编辑器中(excel 或其他电子表格可用于获取 sql 和计划等的高级操作)
现在检查服务器端的时间并注意:
每种情况下服务器上报告的sql是否相同
如果相同,您应该有相同的时间
是客户端生成游标而不是传递sql
当你认为它应该做的时候,查询是否到达服务器
是一个驱动程序在字符集之间进行大量转换/转换或对其他类型(例如日期或时间戳)进行隐式转换。
等等
为了完整起见,将包含计划数据,这可能会告知客户提交的 SQL 是否存在重大差异。