perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Boysenberry Payne <boysenbe...@humaniteque.com>
Subject Re: I'm getting max connection errors for Apache::DBI
Date Thu, 09 Feb 2006 17:58:00 GMT
Ok I switched to using fully qualified database requests as:
database_name.table_name and received the following errors:


8854 Apache::DBI             need ping: yes
8854 Apache::DBI             new connect to  
'database=adm_accounts; 
host=localhostNamePassAutoCommit=1PrintError=1RaiseError=1Username=Name'

DBD::mysql::st execute failed: Table 'boysie_habtiat.sessions' doesn't  
exist at /Users/boysie/mod_perl_inc/Habitat/DB/Select.pm line 95.
Failed uni_select Execute Query: SELECT session, time FROM  
boysie_habtiat.sessions WHERE NOW() > time ORDER BY time Error: Table  
'boysie_habtiat.sessions' doesn't exist at  
/Users/boysie/mod_perl_inc/Habitat/DB/Select.pm line 96.


So it seems like it wont let me get into another database...

Boysenberry

boysenberrys.com | habitatlife.com | selfgnosis.com

On Feb 9, 2006, at 9:35 AM, Tom Schindl wrote:

> What if you'd write all your SQL-Statements in a fully qualified  
> manner?
>
> ---------------8<---------------
> SELECT * FROM $DB1.$TABLE1;
> SELECT * FROM $DB2.$TABLE1;
> ---------------8<---------------
>
> Tom
>
>
> Boysenberry Payne wrote:
>> The only difference in each connection is the database. I tried  
>> connecting
>> to the same database then using $h-do( "USE new_database" ); But it  
>> doesn't
>> switch to the new database (works fine using DBI.)
>>
>> *I decided as a temporary hack I'd try the following:*
>>
>> sub clean_processes {
>>
>> my $self = shift;
>> my $dbs = $self->{dbs};
>> my $h = $dbs->{local};
>> my $sth = $h->prepare( "SHOW FULL PROCESSLIST" ) or warn "error " .
>> $h->errstr;
>> $sth->execute or warn "error " . $h->errstr;
>> my $tbl_ary_ref = $sth->fetchall_arrayref({});
>> return unless( int( @$tbl_ary_ref ) > 50 );
>> foreach( @$tbl_ary_ref ) {
>> if( $_->{Command} ) {
>> if( ( $_->{Command} eq "Sleep" ) || ( $_->{Command} eq "Killed" ) ) {
>> if( $_->{Time} ) {
>> warn "Killing ID: $_->{Id} USER: $_->{User} DB: $_->{db}";
>> my $sth2 = $h->prepare( "KILL $_->{Id}" ) or warn "error " .  
>> $h->errstr;
>> $sth2->execute or warn "error " . $h->errstr;
>> }
>> }
>> }
>> }
>> return;
>> }
>>
>> *Not only does it not kill the processes, but it stops allowing for a
>> connection to any database giving the following error:*
>> [error] [client 127.0.0.1] DBD driver has not implemented the  
>> AutoCommit
>> attribute at /usr/local/lib/perl5/site_perl/5.8.7/Apache/DBI.pm line
>> 250.\n, referer: http://127.0.0.1/web_address/
>>
>> *When I watch the error_log and the $Apache::DBI::DEBUG = 2 I get one  
>> of
>> the two following:*
>> need ping: yes
>> 12844 Apache::DBI new connect to
>> 'database=boysie_habitat; 
>> host=localhostrooth1jAcK36AutoCommit=1PrintError=1RaiseError=1Username 
>> =root'
>>
>> 12844 Apache::DBI disconnect (overloaded)
>> *or:*
>> need ping: yes
>> 12848 Apache::DBI already connected to
>> 'database=boysie_habitat; 
>> host=localhostUsernamePasswordAutoCommit=1PrintError=1RaiseError=1User 
>> name=root'
>>
>> 12848 Apache::DBI disconnect (overloaded)
>>
>> I will be a list of them 5 at a time (I'm guessing one for each  
>> child.)
>> Then as long as I only use that database no problem. As soon
>> as I switch databases which is the only thing that changes in my new
>> connections, I spawns all new database threads. So if I have
>> 100 databases to connect to I get ( 100 * as many child apache process
>> as the requests came in on). I don't think setting my max
>> connections 700+ makes sense especially since the remaining  
>> connections
>> are shown as sleeping.
>>
>> Is there a way to connect to more than one database without spawning
>> "extra" mysql connections?
>> Also, my local development is on OSX, where as my production  
>> environment
>> is Red Hat Linux.
>> I'm using Apache2 and MP2 for both, only proxy in the production
>> environment though.
>>
>>
>> PS For some reason my email responses aren't making it to the list,
>> sorry...
>>
>> Thanks,
>> Boysenberry
>>
>> boysenberrys.com | habitatlife.com | selfgnosis.com
>>
>> On Feb 8, 2006, at 6:22 PM, Perrin Harkins wrote:
>>
>>     On Wed, 2006-02-08 at 11:51 -0600, Boysenberry Payne wrote:
>>
>>         What I'm seeing is 37 mysql threads being created for 7 apache
>>         children. It would seem as
>>         though I would need to create a 5/1 ratio of mysql  
>> connections to
>>         apache children. Is that normal?
>>
>>
>>     No. If you use the same connection info every time, you should  
>> only see
>>     one connection per child. If you have two databases, you should  
>> see two
>>     connections per child. Maybe you are still not using the same  
>> connect
>>     string each time? The debug output should tell you if it thinks  
>> it has
>>     a connection already or not.
>>
>>     - Perrin
>>
>>
>>
>

Mime
View raw message