Slow PostgreSQL query in production - help me understand this explain analyze output

前端 未结 2 1928
忘掉有多难
忘掉有多难 2021-02-10 04:26

I have a query that is taking 9 minutes to run on PostgreSQL 9.0.0 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit

This

2条回答
  •  遇见更好的自我
    2021-02-10 05:05

    The query, minus the last 4 conditions, i.e.

    and group4_.deleted=false 
    and user1_.STATUS='active' 
    and user1_.deleted=false 
    and (membership0_.USER_ID in (...))
    

    returns 758 rows. Each of these 758 rows will then go through the select membership7_.USER_ID ... subquery, which takes 843.967 miliseconds to run.

    843.967 * 758 = 639726.986, there goes the 10 minutes.

    As for tuning the query, I don't think you need DIR_USERS user8_ in the subquery. You can start by removing it, and also changing the subquery to use EXISTS instead of IN.

    By the way, is the database being vacuumed? Even without any tuning, it doesn't look that complex a query or that much of data to require 10 minutes.

提交回复
热议问题