NAME
DBIx::Class::QueryLog::Analyzer - Query Analysis
VERSION
version 1.005001
SYNOPSIS
Analyzes the results of a QueryLog. Create an Analyzer and pass it the QueryLog:
my
$schema
= ...
# Get your schema!
my
$ql
= DBIx::Class::QueryLog->new;
$schema
->storage->debugobj(
$ql
);
$schema
->storage->debug(1);
...
# do some stuff!
my
$ana
= DBIx::Class::QueryLog::Analyzer->new({
querylog
=>
$ql
});
my
@queries
=
$ana
->get_sorted_queries;
# or...
my
$totaled
=
$ana
->get_totaled_queries;
METHODS
new
Create a new DBIx::Class::QueryLog::Analyzer
get_sorted_queries
Returns an arrayref of all Query objects, sorted by elapsed time (descending).
get_fastest_query_executions($sql_statement)
Returns an arrayref of Query objects representing in order of the fastest executions of a given statement. Accepts either SQL or a DBIx::Class::QueryLog::Query object. If given SQL, it must match the executed SQL, including placeholders.
$ana
->get_slowest_query_executions(
"SELECT foo FROM bar WHERE gorch = ?"
);
get_slowest_query_executions($sql_statement)
Opposite of get_fastest_query_executions. Same arguments.
get_totaled_queries
Returns hashref of the queries executed, with same-SQL combined and totaled. So if the same query is executed multiple times, it will be combined into a single entry. The structure is:
$var
= {
'SQL that was EXECUTED'
=> {
count
=> 2,
time_elapsed
=> 1931,
queries
=> [
DBIx::Class::QueryLog...,
DBIx::Class::QueryLog...
]
}
}
This is useful for when you've fine-tuned individually slow queries and need to isolate which queries are executed a lot, so that you can determine which to focus on next.
To sort it you'll want to use something like this (sorry for the long line, blame perl...):
my
$analyzed
=
$ana
->get_totaled_queries;
my
@keys
=
reverse
sort
{
$analyzed
->{
$a
}->{
'time_elapsed'
} <=>
$analyzed
->{
$b
}->{
'time_elapsed'
}
}
keys
(%{
$analyzed
});
So one could sort by count or time_elapsed.
get_totaled_queries_by_bucket
Same as get_totaled_queries, but breaks the totaled queries up by bucket:
$var = { 'bucket1' => { 'SQL that was EXECUTED' => { count => 2, time_elapsed => 1931, queries => [ DBIx::Class::QueryLog..., DBIx::Class::QueryLog... ] } } 'bucket2' => { ... } }
It is otherwise identical to get_totaled_queries
AUTHORS
Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>
Cory G Watson <gphat at cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Cory G Watson <gphat at cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.