[Dbix-class] profiling Cat/DBIx app

jason konrad konradjg at gmail.com
Fri Jul 20 21:38:28 GMT 2007


I was doing some profiling of our Cat/DBIx application which is  
running in a mod_perl environment. I'm currently using DBIx::Class  
0.07005. I was surprised to see DBIx::Class::Row::get_columns at the  
top of the list for taking the most time. The server was under a very  
high load during these tests. I'm thinking that the fact that the  
server was under a very high load it was causing the response from  
mysql running on the same machine to be a bit slow. WHich would make  
sense but then I noticed from the calling tree that for every call to  
get_columns a Data::Dumper object was being created and that seems a  
bit strange.

  Here is some output from dprofpp

# dprofpp -r /tmp/dprof/27422/tmon.out
Storable::_freeze has 1 unstacked calls in outer
Catalyst::__ANON__ has -95 unstacked calls in outer
AutoLoader::AUTOLOAD has -1 unstacked calls in outer
DBIx::Class::Row::get_column has 94 unstacked calls in outer
bytes::length has 1 unstacked calls in outer
Total Elapsed Time = 108.3457 Seconds
          Real Time = 108.3457 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
34.3   37.21 37.289    190   0.1959 0.1963   
DBIx::Class::Row::get_columns
9.35   10.13  2.759     95   0.1066 0.0290  Catalyst::__ANON__
7.58   8.212 11.061    665   0.0123 0.0166  Tree::Simple::_insertChildAt
6.16   6.670  0.149    665   0.0100 0.0002  DBIx::Class::Row::get_column
2.39   2.592  2.806    570   0.0045 0.0049   
kRad::Util::Helpers::placeholder

# dprofpp /tmp/dprof/27422/tmon.out
Storable::_freeze has 1 unstacked calls in outer
Catalyst::__ANON__ has -95 unstacked calls in outer
AutoLoader::AUTOLOAD has -1 unstacked calls in outer
DBIx::Class::Row::get_column has 94 unstacked calls in outer
bytes::length has 1 unstacked calls in outer
Total Elapsed Time = 108.5012 Seconds
   User+System Time = 6.871273 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
46.5   3.195  4.574    665   0.0048 0.0069  Tree::Simple::_insertChildAt
18.2   1.256  1.334    570   0.0022 0.0023   
kRad::Util::Helpers::placeholder
17.0   1.173  0.029     95   0.0123 0.0003  Catalyst::__ANON__
10.5   0.726  0.020    665   0.0011 0.0000  DBIx::Class::Row::get_column
2.43   0.167  0.205    190   0.0009 0.0011   
DBIx::Class::Row::get_columns


Then a snippet from the calling tree.

DBIx::Class::InflateColumn::new
DBIx::Class::Row::new
DBIx::Class::Row::insert
DBIx::Class::Row::get_columns
    Data::Dumper::new
    Data::Dumper::DESTROY
    DBD::_::db::prepare_cached
DBIx::Class::Row::get_column
    DBI::common::FETCH
    AutoLoader::__ANON__
    Storable::_freeze
       Storable::net_mstore
    Storable::_freeze
       Storable::net_mstore
    DBIx::Class::ResultSet::__ANON__
    DBD::_::db::prepare_cached
DBIx::Class::InflateColumn::new
DBIx::Class::Row::new
DBIx::Class::Row::insert
DBIx::Class::Row::get_columns
    Data::Dumper::new
    Data::Dumper::DESTROY
    DBD::_::db::prepare_cached
DBIx::Class::Row::get_column
DBIx::Class::Row::get_column
DBIx::Class::Row::get_column
DBIx::Class::Row::get_column
    Storable::mretrieve
DBIx::Class::Row::get_column
DBIx::Class::Relationship::CascadeActions::update
DBIx::Class::InflateColumn::update
DBIx::Class::Row::update
DBIx::Class::Row::get_column
    DBD::_::db::prepare_cached
    Tie::IxHash::FIRSTKEY
    Tie::IxHash::FIRSTKEY



Thanks,
   konrad








More information about the Dbix-class mailing list