Re: Query Plan Columns

Поиск
Список
Период
Сортировка
От David E. Wheeler
Тема Re: Query Plan Columns
Дата
Msg-id 5A8ABDFC-B106-4ACB-9391-9E191B16CA60@kineticode.com
обсуждение исходный текст
Ответ на Re: Query Plan Columns  (Roberto Mello <roberto.mello@gmail.com>)
Ответы Re: Query Plan Columns  ("David E. Wheeler" <david@kineticode.com>)
Re: Query Plan Columns  (Dimitri Fontaine <dimitri@2ndQuadrant.fr>)
Список pgsql-hackers
On Nov 7, 2010, at 5:24 AM, Roberto Mello wrote:

> Yes, but I am wondering whether you should just stick to what would
> come out of a normal explain, for consistency sake. Maybe provide
> another function, or parameter that would cast the results to
> intervals?

I think it's more convenient to have intervals.

So my final list:
   CREATE TABLE plans (       planned_at              TIMESTAMPTZ,       node_id                 TEXT PRIMARY KEY,
parent_id               TEXT REFERENCES plans(node_id),       node_type               TEXT NOT NULL,
total_runtime          INTERVAL,       strategy                TEXT,       operation               TEXT,
startup_cost           FLOAT,       total_cost              FLOAT,       plan_rows               FLOAT,
plan_width             INTEGER,       actual_startup_time     INTERVAL,       actual_total_time       INTERVAL,
actual_rows            FLOAT,       actual_loops            FLOAT,       parent_relationship     TEXT,       sort_key
            TEXT[],       sort_method             TEXT[],       sort_space_used         BIGINT,       sort_space_type
     TEXT,       join_type               TEXT,       join_filter             TEXT,       hash_cond               TEXT,
    relation_name           TEXT,       alias                   TEXT,       scan_direction          TEXT,
index_name             TEXT,       index_cond              TEXT,       recheck_cond            TEXT,       tid_cond
          TEXT,       merge_cond              TEXT,       subplan_name            TEXT,       function_name
TEXT,      function_call           TEXT,       filter                  TEXT,       one_time_filter         TEXT,
command                TEXT,       shared_hit_blocks       BIGINT,       shared_read_blocks      BIGINT,
shared_written_blocks  BIGINT,       local_hit_blocks        BIGINT,       local_read_blocks       BIGINT,
local_written_blocks   BIGINT,       temp_read_blocks        BIGINT,       temp_written_blocks     BIGINT,       output
                TEXT[],       hash_buckets            BIGINT,       hash_batches            BIGINT,
original_hash_batches  BIGINT,       peak_memory_usage       BIGINT,       schema                  TEXT,       cte_name
              TEXT,              triggers                trigger_plan[]   ); 

planned_at is just the current time (from NOW()).

node_id is simply `md5( pg_backend_pid() || clock_timestamp() )`, which is run just before each node is parsed.

trigger_plan is a composite type:
   CREATE TYPE trigger_plan AS (       trigger_name    TEXT,       constraint_name TEXT,       relation        TEXT,
  time            INTERVAL,       calls           FLOAT   ); 

I'm wondering if there's any reason why we couldn't have EXPLAIN do something like this itself in core:
   EXPLAIN (format table) SELECT * FROM bar;

It could output a table like the above. FWIW, The function I've written works like this:
   SELECT plan('SELECT * FROM bar');

Which is an okay workaround. Anyone else think that this might be useful?

Best,

David



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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: W3C Specs: Web SQL
Следующее
От: "David E. Wheeler"
Дата:
Сообщение: Re: Query Plan Columns