它使用的时候可能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) 针对此数据库的全文查询(存储 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
我使用 PostgreSQL 9.6。
我有一个连接 17 个表的查询,其中 9 个有几百万行。查询运行良好,但本周其性能迅速下降。EXPLAIN 的输出没有帮助(所有扫描都是索引扫描,除了非常小的表),我不得不尝试从查询中删除表以隔离导致降级的表。
事实证明,一个包含 40 行的不起眼的表破坏了查询:800 ms 没有该表,而有 30 s。我在桌子上运行了 VACUUM FULL,它运行了大约一秒钟,现在性能恢复正常。
我的问题:
在调试过程中,我对另一台服务器进行了基本备份,因此我有两个文件系统级别的数据库副本,其中一个我没有运行 VACUUM FULL。当我使用 pgAdmin 登录到 unvacuumed 副本时,我收到以下消息:
表“public.clients”上的估计行数与实际行数显着不同。您应该在此表上运行 VACUUM ANALYZE。
unvacuumed 表有 40 行计数和 0 估计。以下是屏幕截图中的其余统计数据。
postgresql performance statistics autovacuum postgresql-9.6 query-performance