From a1547490c4e2fb91d33debc9a924cc9133d78dba Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 16 Jul 2013 11:53:47 +0200 Subject: [PATCH] [SIGNED-OFF] Bug 10611: Use mysql_auto_reconnect instead of ping DBD::Mysql provides a mysql_auto_reconnect flag. Using it avoid to do a ping. Benchmarks: use Modern::Perl; use C4::Context; for ( 1 .. 1000 ) { $dbh = C4::Context->dbh; } * without this patch on a local DB: perl t.pl 0,49s user 0,02s system 98% cpu 0,525 total * without this patch on a remote DB: perl t.pl 0,52s user 0,05s system 1% cpu 37,358 total * with this patch on a local DB: perl t.pl 0,46s user 0,04s system 99% cpu 0,509 total * with this patch on a remote DB: perl t.pl 0,49s user 0,02s system 56% cpu 0,892 total Testing the auto reconnect: use Modern::Perl; use C4::Context; my $ping = $dbh->ping; say $ping; $dbh->disconnect; $ping = $dbh->ping; say $ping; Signed-off-by: Bernardo Gonzalez Kriegel Comment: Real improvement. No koha-qa errors prove t/db_dependent/Circulation_issuingrules.t produces no error t/db_dependent/Circulation_issuingrules.t .. ok All tests successful. Test: run twice sample script with more iterations first local, then remote 1) without patch a) local real 0m2.461s user 0m0.848s sys 0m1.052s b) local real 0m2.427s user 0m1.072s sys 0m0.852s 2) with patch a) local real 0m0.213s user 0m0.196s sys 0m0.012s b) local real 0m0.208s user 0m0.200s sys 0m0.008s 3) without patch a) remote real 0m14.957s user 0m2.048s sys 0m2.012s b) remote real 0m15.472s user 0m1.816s sys 0m2.728s 4) with patch a) remote real 0m0.221s user 0m0.208s sys 0m0.012s b) remote real 0m0.216s user 0m0.192s sys 0m0.020s --- C4/Context.pm | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/C4/Context.pm b/C4/Context.pm index 739a0ec..874a9ae 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -789,16 +789,14 @@ sub _new_Zconn { # Internal helper function (not a method!). This creates a new # database connection from the data given in the current context, and # returns it. +our $db_driver = 'mysql'; sub _new_dbh { ## $context - ## correct name for db_schme - my $db_driver; + ## correct name for db_schme if ($context->config("db_scheme")){ $db_driver=db_scheme2dbi($context->config("db_scheme")); - }else{ - $db_driver="mysql"; } my $db_name = $context->config("database"); @@ -824,6 +822,10 @@ sub _new_dbh $dbh->{RaiseError} = 0; } + if ( $db_driver eq 'mysql' ) { + $dbh->{mysql_auto_reconnect} = 1; + } + my $tz = $ENV{TZ}; if ( $db_driver eq 'mysql' ) { # Koha 3.0 is utf-8, so force utf8 communication between mySQL and koha, whatever the mysql default config. @@ -860,8 +862,10 @@ sub dbh my $self = shift; my $sth; - if (defined($context->{"dbh"}) && $context->{"dbh"}->ping()) { - return $context->{"dbh"}; + if ( defined $db_driver && $db_driver eq 'mysql' && $context->{"dbh"} ) { + return $context->{"dbh"}; + } elsif ( defined $db_driver && defined($context->{"dbh"}) && $context->{"dbh"}->ping()) { + return $context->{"dbh"}; } # No database handle or it died . Create one. -- 1.7.9.5