mod_perl + mysql + apache::dbi - сликом дохрена mysql
Проблема: до 400 виясщих потоков mysql - в общем случае количество
соединений с базой примерно равно количеству процессов апача.
Подозреваю, что дело в следующем: когда вызывается скрипт, создается
новое соединение, которое живет до тех пор, пока не умрет данный процесс
апача. апач и mysql живут на одном хосте. mtop показывает, что
практически все соединения находятся в состоянии sleep.
Имеем скрипт вида:
package WpTOP::Browser;
use Apache::Constants qw(:common);
use Apache::Request;
use HTML::Template;
use DBI;
.....
my $conninfo = "DBI:mysql:database=$dbname;host=$dbhost;port=3306";
sub handler
{
my $dbhandler = DBI->connect($conninfo , $dbuser,
$dbpass,{'RaiseError'=> 1, 'AutoCommit' => 1}) || die "Can't connect to
DB:$!";
#чего-то тут делаем с запросом
}
sub DESTROY
{
$dbhandler->disconnect(); #Хотя это вобщем-то игнорируется.
}
Из httpd.conf
PerlModule Apache::DBI
PerlRequire /home/alex/startup.pl
PerlFreshRestart On
<VirtualHost 1.1.1.1>
User user
Group user
ServerAdmin support@user.com
DocumentRoot /home/user/site
ServerName user.com
ServerAlias www.user.com
ErrorLog /home/user/logs/error.log
CustomLog /home/user/logs/access.log full
PerlModule Apache::DBI
PerlModule WpTOP::Browser
<Location /Browser>
SetHandler perl-script
PerlHandler WpTOP::Browser
PerlSendHeader On
</Location>
<Location /View>
PerlModule Apache::DBI
PerlModule WpTOP::View
SetHandler perl-script
PerlHandler WpTOP::View
PerlSendHeader On
</Location>
/VirtualHost>
startup.pl:
wptop:/home/funtus/public_html# cat /home/alex/startup.pl
#!/usr/local/bin/perl -w
$ENV{MOD_PERL} or die "GATEWAY_INTERFACE not Perl!";
use Apache::Registry;
use Apache::DBI;
#use Apache::AuthDBI;
use strict;
$Apache::DBI::DEBUG = 1;
.........
my $conninfo = "DBI:mysql:database=$dbname;host=$dbhost;port=3306";
Apache::DBI->connect_on_init
($conninfo , $dbuser, $dbpass,{'RaiseError' => 1, 'AutoCommit' => 1});
Reply to: