Re: Help to understand Actual Rows vs Plan Rows from the queryplanner output

Поиск
Список
Период
Сортировка
От Tomas Vondra
Тема Re: Help to understand Actual Rows vs Plan Rows from the queryplanner output
Дата
Msg-id 409f074d-56f5-3dbb-b4e1-6c0b69f27952@2ndquadrant.com
обсуждение исходный текст
Ответ на Help to understand Actual Rows vs Plan Rows from the query planneroutput  (Arup Rakshit <ar@zeit.io>)
Ответы Re: Help to understand Actual Rows vs Plan Rows from the queryplanner output
Список pgsql-general

On 09/23/2018 10:21 PM, Arup Rakshit wrote:
> Hello I have some questions related to the query plan output about the
> planned and actual rows. In the following example:
> 
> # explain (analyze true, costs true, format yaml) select * from users
> where lower(city) = 'melanyfort' and lower(state) = 'ohio';
>                                                  QUERY PLAN             
>                                    
> ------------------------------------------------------------------------------------------------------------
>  - Plan:                                                                
>                                   +
>      Node Type: "Bitmap Heap Scan"                                      
>                                   +
>      Parallel Aware: false                                              
>                                   +
>      Relation Name: "users"                                             
>                                   +
>      Alias: "users"                                                     
>                                   +
>      Startup Cost: 10.78                                                
>                                   +
>      Total Cost: 14.80                                                  
>                                   +
>      Plan Rows: 1                                                       
>                                   +
>      Plan Width: 73                                                     
>                                   +
>      Actual Startup Time: 0.155                                         
>                                   +
>      Actual Total Time: 0.155                                           
>                                   +
>      Actual Rows: 0                                                     
>                                   +
>      Actual Loops: 1                                                    
>                                   +
>      Recheck Cond: "((lower((city)::text) = 'melanyfort'::text) AND
> (lower((state)::text) = 'ohio'::text))"+
>      Rows Removed by Index Recheck: 0                                   
>                                   +
>      Exact Heap Blocks: 0                                               
>                                   +
>      Lossy Heap Blocks: 0                                               
>                                   +
>      Plans:                                                             
>                                   +
>        - Node Type: "BitmapAnd"                                         
>                                   +
>          Parent Relationship: "Outer"                                   
>                                   +
>          Parallel Aware: false                                          
>                                   +
>          Startup Cost: 10.78                                            
>                                   +
>          Total Cost: 10.78                                              
>                                   +
>          Plan Rows: 1                                                   
>                                   +
>          Plan Width: 0                                                  
>                                   +
>          Actual Startup Time: 0.153                                     
>                                   +
>          Actual Total Time: 0.153                                       
>                                   +
>          Actual Rows: 0                                                 
>                                   +
>          Actual Loops: 1                                                
>                                   +
>          Plans:                                                         
>                                   +
>            - Node Type: "Bitmap Index Scan"                             
>                                   +
>              Parent Relationship: "Member"                              
>                                   +
>              Parallel Aware: false                                      
>                                   +
>              Index Name: "users_lower_idx"                              
>                                   +
>              Startup Cost: 0.00                                         
>                                   +
>              Total Cost: 4.66                                           
>                                   +
>              Plan Rows: 50                                              
>                                   +
>              Plan Width: 0                                              
>                                   +
>              Actual Startup Time: 0.048                                 
>                                   +
>              Actual Total Time: 0.048                                   
>                                   +
>              Actual Rows: 1                                             
>                                   +
>              Actual Loops: 1                                            
>                                   +
>              Index Cond: "(lower((city)::text) = 'melanyfort'::text)"   
>                                   +
>            - Node Type: "Bitmap Index Scan"                             
>                                   +
>              Parent Relationship: "Member"                              
>                                   +
>              Parallel Aware: false                                      
>                                   +
>              Index Name: "lower_state_users_idx"                        
>                                   +
>              Startup Cost: 0.00                                         
>                                   +
>              Total Cost: 5.87                                           
>                                   +
>              Plan Rows: 211                                             
>                                   +
>              Plan Width: 0                                              
>                                   +
>              Actual Startup Time: 0.102                                 
>                                   +
>              Actual Total Time: 0.102                                   
>                                   +
>              Actual Rows: 211                                           
>                                   +
>              Actual Loops: 1                                            
>                                   +
>              Index Cond: "(lower((state)::text) = 'ohio'::text)"        
>                                   +
>    Planning Time: 0.260                                                 
>                                   +
>    Triggers:                                                            
>                                   +
>    Execution Time: 0.249
> (1 row)
> 
> aruprakshit=# 
> 
> 
> ------
> 
> In the first node type of "Bitmap Index Scan” on “users_lower_idx”, I
> see the plan rows are 50, but actual rows it got 1. In the second node
> type of "Bitmap Index Scan” on “ lower_state_users_idx”, I see the plan
> rows are 211, and actual rows 211. Both are same. Based on what
> conditions planner estimated the planned and actual rows count? 
>
> 
> In node type “BitmapAnd”, I see again the actual rows 1, then why on the
> final plan i.e. Node Type: "Bitmap Heap Scan” again planner estimated
> rows 1? How does it counts these? What does the Loops count says us
> about the query?  
>

It's not very clear to me whether you're asking how the planner computes
estimates in general, or how it computed these particular estimates (or
what issues you see there).

Perhaps this would give you at least some answers:

https://www.postgresql.org/docs/11/static/row-estimation-examples.html

regards

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


В списке pgsql-general по дате отправления:

Предыдущее
От: Rob Sargent
Дата:
Сообщение: Re: heads up on large text fields.
Следующее
От: Durgamahesh Manne
Дата:
Сообщение: Re: *Regarding brin_index on required column of the table