相关疑难解决方法(0)

功能表现

来自 MySQL 背景,其中存储过程性能(旧文章)可用性值得怀疑,我正在评估 PostgreSQL 为我公司的新产品。

我想做的一件事是将一些应用程序逻辑移到存储过程中,所以我在这里询问有关在 PostgreSQL (9.0) 中使用函数的 DO 和 DON'T(最佳实践),特别是关于性能陷阱。

postgresql best-practices plpgsql

63
推荐指数
4
解决办法
4万
查看次数

用 plpgsql 编写的函数调用的 Postgres 查询计划

它使用的时候可能pgadmin还是plsql获得查询计划的搁置了内部执行SQL语句ü SER d efined ˚F油膏(UDF)使用EXPLAIN。那么我如何掌握 UDF 的特定调用的查询计划呢?我看到 UDF 抽象为F()pgadmin 中的单个操作。

我查看了文档,但找不到任何内容。

目前我正在提取语句并手动运行它们。但这不会减少大型查询。

例如,考虑下面的 UDF。这个 UDF,即使它能够打印出它的查询字符串,也不能使用复制粘贴,因为它有一个本地创建的临时表,当你粘贴和执行它时它不存在。

CREATE OR REPLACE FUNCTION get_paginated_search_results(
    forum_id_ INTEGER,
    query_    CHARACTER VARYING,
    from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
    to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
    in_categories_ INTEGER[] DEFAULT '{}')
RETURNS SETOF post_result_entry AS $$
DECLARE
    join_string CHARACTER VARYING := ' ';
    from_where_date CHARACTER VARYING := ' ';
    to_where_date CHARACTER VARYING := ' ';
    query_string_ CHARACTER VARYING …
Run Code Online (Sandbox Code Playgroud)

postgresql performance plpgsql functions

23
推荐指数
2
解决办法
8167
查看次数

由于行估计非常不准确,全文搜索速度缓慢

针对此数据库的全文查询(存储 RT(请求跟踪器)票证)似乎需要很长时间才能执行。附件表(包含全文数据)大约为 15GB。

数据库模式如下,大约有 200 万行:

rt4=# \d+ 附件
                                                    表“public.attachments”
     专栏 | 类型 | 修饰符 | 存储 | 描述
-----------------+------------------------------------------+-- -------------------------------------------------- -------+----------+-------------
 身份证 | 整数 | not null default nextval('attachments_id_seq'::regclass) | 平原 |
 交易ID | 整数 | 不为空| 平原 |
 家长 | 整数 | 非空默认值 0 | 平原 |
 消息ID | 字符变化(160) | | 扩展 |
 主题 | 字符变化(255) | | 扩展 |
 文件名 | 字符变化(255) | | 扩展 |
 内容类型 | 字符变化(80) | | 扩展 |
 内容编码 …

postgresql performance full-text-search execution-plan postgresql-9.1 query-performance

10
推荐指数
1
解决办法
1582
查看次数

小表会导致性能极度下降,已通过强制 VACUUM 修复。为什么?

我使用 PostgreSQL 9.6。

我有一个连接 17 个表的查询,其中 9 个有几百万行。查询运行良好,但本周其性能迅速下降。EXPLAIN 的输出没有帮助(所有扫描都是索引扫描,除了非常小的表),我不得不尝试从查询中删除表以隔离导致降级的表。

事实证明,一个包含 40 行的不起眼的表破坏了查询:800 ms 没有该表,而有 30 s。我在桌子上运行了 VACUUM FULL,它运行了大约一秒钟,现在性能恢复正常。

我的问题:

  1. 什么可以解释 <10kb 的表像这样破坏性能?
  2. 以后如何避免同样的问题?

在调试过程中,我对另一台服务器进行了基本备份,因此我有两个文件系统级别的数据库副本,其中一个我没有运行 VACUUM FULL。当我使用 pgAdmin 登录到 unvacuumed 副本时,我收到以下消息:

表“public.clients”上的估计行数与实际行数显着不同。您应该在此表上运行 VACUUM ANALYZE。

unvacuumed 表有 40 行计数和 0 估计。以下是屏幕截图中的其余统计数据。

pgAdmin 统计信息

postgresql performance statistics autovacuum postgresql-9.6 query-performance

6
推荐指数
1
解决办法
857
查看次数