现在我正在打一个非常大的路障.
我使用PostgreSQL 10及其新表分区.
有时很多查询都没有返回,active当时检查后端进程的时候有很多后端进程pg_stat_activity.首先,我认为这些进程只是等待lock,但这些事务只包含SELECT语句,而另一个后端不使用任何需要ACCESS EXCLUSIVE锁定的查询.而这些仅包含SELECT语句的查询在计划方面没有问题.通常这些都很好用.而计算机资源(CPU,内存,IO,网络)也没问题.因此,这些转换不应该发生冲突.我虽然通过pg_locks和检查了这些事务的锁,pg_blocking_pids()并且我找不到任何使查询更慢的锁.许多活跃的后端仅仅ACCESS SHARE因为它们只使用而持有SELECT.现在我认为这些现象不是由锁引起的,而是与新表分区有关的.
那么,为什么许多后端活跃?谁能帮助我?任何评论都非常感谢.打击数字是结果的一部分pg_stat_activity.如果您想了解更多信息,请告诉我.
编辑
我的查询不处理大数据.返回类型是这样的:
uuid UUID
,number BIGINT
,title TEXT
,type1 TEXT
,data_json JSONB
,type2 TEXT
,uuid_array UUID[]
,count BIGINT
Run Code Online (Sandbox Code Playgroud)
因为它有JSONB列,我无法计算确切的值,但它不是很大的JSON.通常这些查询速度适中(大约1.5s),因此绝对没有问题,但是当其他进程工作时,会发生这种现象.如果统计信息错误,则查询总是很慢.
EDIT2
这是统计数据.有近100个连接,所以我无法显示所有的统计数据.
你说
有时许多查询不会返回...但是当其他进程工作时,这种现象就会发生。如果统计信息错误,查询总是很慢。
当直接连接到 Postgres 实例并运行您需要的查询时,或者从应用程序运行查询时,它们不会返回/速度很慢?正在运行的后端进程,您能够成功杀死它们pg_terminate_backend($PID)还是有问题?要排除语句本身的问题,请确保statement_timeout设置为合理的数量以终止长时间运行的查询。排除这种情况后,也许您会遇到应用程序挂起并且不允许send来自 PostgreSQL 的调用完成的情况。为了避免这种情况,如果您能够(取决于操作系统),您可以调整保持活动时间: https: //www.postgresql.org/docs/current/runtime-config-connection.html#GUC- TCP-KEEPALIVES-IDLE(默认为 2 小时)
如果使用其中任何一个可以让我们更深入地了解您的问题,请告诉我们。
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |