NAME
Pg::Explain - Object approach at reading explain analyze output
VERSION
Version 0.96
SYNOPSIS
Quick summary of what the module does.
Perhaps a little code snippet.
use Pg::Explain;
my $explain = Pg::Explain->new('source_file' => 'some_file.out');
...
my $explain = Pg::Explain->new(
'source' => 'Seq Scan on tenk1 (cost=0.00..333.00 rows=10000 width=148)'
);
...
FUNCTIONS
source_format
What is the detected format of source plan. One of: TEXT, JSON, YAML, OR XML.
planning_time
How much time PostgreSQL spent planning the query. In milliseconds.
execution_time
How much time PostgreSQL spent executing the query. In milliseconds.
total_runtime
How much time PostgreSQL spent working on this query. This was part of EXPLAIN OUTPUT only for PostgreSQL 9.3 or older.
trigger_times
Information about triggers that were called during execution of this query. Array of hashes, where each hash can contains:
name - name of the trigger
calls - how many times it was called
time - total time spent in all executions of this trigger
add_trigger_time
Adds new information about trigger time.
It will be available at $node->trigger_times (returns arrayref)
runtime
How long did the query run. Tries to get the value from various sources (total_runtime, execution_time, or top_node->actual_time_last).
source
Returns original source (text version) of explain.
source_filtered
Returns filtered source explain.
Currently there are only two filters:
remove quotes added by pgAdmin3
remove + character at the end of line, added by default psql config.
new
Object constructor.
Takes one of (only one!) (source, source_file) parameters, and either parses it from given source, or first reads given file.
top_node
This method returns the top node of parsed plan.
For example - in this plan:
QUERY PLAN
--------------------------------------------------------------
Limit (cost=0.00..0.01 rows=1 width=4)
-> Seq Scan on test (cost=0.00..14.00 rows=1000 width=4)
top_node is Pg::Explain::Node element with type set to 'Limit'.
Generally every output of plans should start with ->top_node(), and descend recursively in it, using subplans(), initplans() and sub_nodes() methods.
parse_source
Internally (from ->BUILD()) called function which checks which parser to use (text, json, xml, yaml), runs appropriate function, and stores top level node in $self->top_node.
check_for_parallelism
Handles parallelism by setting "force_loops" if plan is analyzed and there are gather nodes.
Generally, for each
_read_source_from_file
Helper function to read source from file.
as_text
Returns parsed plan back as plain text format (regenerated from in-memory structure).
This is mostly useful for (future at the moment) anonymizations.
get_struct
Function which returns simple, not blessed, hashref with all information about the explain.
This can be used for debug purposes, or as a base to print information to user.
Output looks like this:
{
'top_node' => {....},
'planning_time' => '12.34',
'execution_time' => '12.34',
'total_runtime' => '12.34',
'trigger_times' => [
{ 'name' => ..., 'time' => ..., 'calls' => ... },
...
],
}
anonymize
Used to remove all individual values from the explain, while still retaining all values that are needed to see what's wrong.
AUTHOR
hubert depesz lubaczewski, <depesz at depesz.com>
BUGS
Please report any bugs or feature requests to depesz at depesz.com
.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Pg::Explain
COPYRIGHT & LICENSE
Copyright 2008-2015 hubert depesz lubaczewski, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.