Questions tagged «postgresql-performance»

PostgreSQL查询的性能问题

1
pgAdmin在任何远程操作上都非常慢
我从本地pgAdmin远程连接到我们的开发服务器运行此查询: select * from users order by random() limit 1; 它挂了17秒并显示 Total query runtime: 148 ms. 1 row retrieved. 它也挂在任何操作上:甚至右键单击表格。 之后,我通过RDP连接并在相同的pgAdmin版本中运行相同的查询,并立即使用显示结果query time: 32 ms。 然后我再次从本地pgAdmin运行查询: Total query runtime: 337 ms. 1 row retrieved. 我向服务器ping了130毫秒。连接速度应该足够,因为我可以在那里通过FTP上传文件。 使用本地psql运行相同的查询会在几秒钟内完成,并包括连接时间。 我的本地pgAdmin中带有本地数据库副本的相同查询也立即完成。 pgAdmin版本是1.20.0。还检查了最新的1.22-仍然相同。 我该怎么做才能加快pgAdmin? 请注意,psql可以正常工作,我在那里看不到相同的延迟。 pgAdmin日志进行17秒查询运行: 2016-02-06 16:18:03 INFO : queueing : select * from users …

3
添加子查询时,PostgreSQL查询非常慢
我对具有150万行的表进行了相对简单的查询: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 输出: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
如何使用索引加快Postgres中的排序
我正在使用postgres 9.4。 的messages具有以下模式:消息属于FEED_ID,并且具有posted_at,还消息可以具有(在答复的情况)的父消息。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

1
使用pg_trgm索引进行相似性搜索的查询时间慢
我们在表中添加了两个pg_trgm索引,以启用按电子邮件地址或名称的模糊搜索,因为我们需要按名称或注册过程中拼写错误的电子邮件地址(例如“ @ gmail.con”)查找用户。ANALYZE在创建索引后运行。 但是,在绝大多数情况下,对这两个索引中的任何一个进行排名搜索都非常缓慢。也就是说,随着超时的增加,查询可能会在60秒内返回,在极少数情况下可能会很快返回15秒,但通常查询会超时。 pg_trgm.similarity_threshold是的默认值0.3,但将其提高0.8似乎没有什么不同。 这个特定的表有超过2500万行,并且不断地对其进行查询,更新和插入(每个表的平均时间小于2ms)。设置为PostgreSQL 9.6.6,在具有通用SSD存储和或多或少默认参数的RDS db.m4.large实例上运行。pg_trgm扩展是1.3版。 查询: SELECT * FROM users WHERE email % 'chris@example.com' ORDER BY email <-> 'chris@example.com' LIMIT 10; SELECT * FROM users WHERE (first_name || ' ' || last_name) % 'chris orr' ORDER BY (first_name || ' ' || last_name) <-> 'chris orr' LIMIT …

1
PostgreSQL-使用成千上万的元素数组
我希望根据是否以整数数组形式传递的大量值列表中包含一列来选择行。 这是我当前使用的查询: SELECT item_id, other_stuff, ... FROM ( SELECT -- Partitioned row number as we only want N rows per id ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY start_date) AS r, item_id, other_stuff, ... FROM mytable WHERE item_id = ANY ($1) -- Integer array AND end_date > $2 ORDER BY …

1
CLUSTER对性能的影响
我正在尝试优化我的Postgres 9.2数据库以加快具有日期限制的查询。 我有一timestamp列,但大多数情况下我都想找一天,所以我创建了一个timestamp要date解析的索引: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 现在,为了提高性能,我CLUSTER foo使用上面的索引表: CLUSTER foo USING foo_my_timestamp_idx; 根据SQL-CLUSTER上的手册,该表 根据索引信息进行物理重新排序 我想知道使用表PK(请说id_foo)对其他查询的性能是否有影响。有没有缺点?

3
加快Postgres部分索引的创建
我正在尝试在Postgres 9.4中为大型(1.2TB)静态表创建部分索引。 我的数据是完全静态的,因此我可以插入所有数据,然后创建所有索引。 在这个1.2TB的表中,我有一列名为run_id,它清楚地划分了数据。通过创建覆盖run_ids 范围的索引,我们获得了出色的性能。这是一个例子: CREATE INDEX perception_run_frame_idx_run_266_thru_270 ON run.perception (run_id, frame) WHERE run_id >= 266 AND run_id <= 270; 这些部分索引为我们提供了所需的查询速度。不幸的是,每个部分索引的创建大约需要70分钟。 看来我们受CPU限制(top正在显示该进程的100%)。 我有什么办法可以加快创建部分索引的速度? 系统规格: 18核至强 192GB内存 RAID中的12个SSD 自动真空关闭 maintenance_work_mem:64GB(太高了吗?) 表规格: 大小:1.26 TB 行数:105.37亿 典型索引大小:3.2GB(存在〜.5GB的差异) 表定义: CREATE TABLE run.perception( id bigint NOT NULL, run_id bigint NOT NULL, frame bigint NOT NULL, …

2
在一系列时间戳(一列)上优化查询
我正在通过Heroku使用Postgres 9.3。 我有一个表“ traffic”,其中有1M +条记录,每天都有许多插入和更新。我需要在此表上的不同时间范围内执行SUM操作,这些调用最多可能需要40秒钟,并且希望听到有关如何改进该建议的建议。 我在此表上有以下索引: CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; 这是一个示例SELECT语句: SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= …

3
在全文搜索查询中优化ORDER BY
我有一张entities约有1500万条记录的大桌子。我想在其中找到与“曲棍球”匹配的前5行name。 我在上有全文索引name,该索引用于:gin_ix_entity_full_text_search_name 查询: SELECT "entities".*, ts_rank(to_tsvector('english', "entities"."name"::text), to_tsquery('english', 'hockey'::text)) AS "rank0.48661998202865475" FROM "entities" WHERE "entities"."place" = 'f' AND (to_tsvector('english', "entities"."name"::text) @@ to_tsquery('english', 'hockey'::text)) ORDER BY "rank0.48661998202865475" DESC LIMIT 5 持续时间25,623 ms 解释计划 1个限制(cost = 12666.89..12666.89行= 5宽度= 3116) 2->排序(费用= 12666.89..12670.18行= 6571宽度= 3116) 3排序键:(ts_rank(to_tsvector('english':: regconfig,(name):: text),'''hockey''':: tsquery)) 4->对实体进行位图堆扫描(cost = 124.06..12645.06行= 6571宽度= 3116) …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.