Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-15 Thread Alexander Hartmaier
I guess the DBA's don't like it because Oracle starts one process per
connection unless you use connection pooling.
I think that's a listener setting, your DBA's should know.

--
Best regards, Alex


Am Mittwoch, den 08.09.2010, 16:54 +0200 schrieb Simon Miner:
 Thanks for the responses,

 Jason, I don't think reducing the number of database connections will
 hurt responsiveness.  Even though there are 3 separate Catalyst apps,
 each HTTP request will only involve one of them (since they all run
 out of the same web server), so there should never be contention
 between the apps for the shared database connection.  Does this make
 sense?

 Tom and Nicholas, I wish this was premature optimization, but my
 organization has experienced serious performance issues in the past
 related to multiple (Oracle) database connections per HTTP server
 process.  Extra Oracle connections are expensive to maintain,
 particularly on the database server, and so we've tried to ensure that
 a single server process only has a single connection to a given
 database (since that's all it should need at any given time).

 I've attached a Devel::NYTProf screenshot for one of the server
 processes I profiled this morning. Looks like it confirms the multiple
 database connections.

 So back to initial question -- How do I update the models of my three
 Catalyst apps to share a single Oracle database connection?

 Thanks again.  I really appreciate your feedback.

  Simon

 On Tue, Sep 7, 2010 at 11:40 PM, Nicholas Wehr
 catal...@bionikchickens.com wrote:
 I'm with Tom on this one. Unless you've narrowed all
 optimization efforts and this is all you have left - it could
 be worth a try.. but as Jason points out, you may not gain a
 thing. I'd recommend profiling your code and tracking down
 performance issues from that base level. Please post your
 results - I've very curious!

 -nw



 On Tue, Sep 7, 2010 at 7:21 PM, Tomas Doran
 bobtf...@bobtfish.net wrote:

 On 7 Sep 2010, at 18:59, Simon Miner wrote:
 All three of these apps run under a single
 Apache 1.3.42/mod_perl 1.31 server.


 Wow, mod_perl 1 Ok then :)


  It appears that each server process creates a
 unique database connection variable for each
 of these apps. Although these database
 connections get reused from request to
 request, I would like to make things even more
 efficient by having a single database
 connection variable per server process which
 gets shared across all 3 Catalyst apps.


 Why do you think that this will help or affect
 anything?

 I.e. is this not premature optimisation?

 Cheers
 t0m




 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo:
 http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/




 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo:
 http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/




 --
 -- Simon


***
T-Systems Austria GesmbH   Rennweg 97-99, 1030 Wien
Handelsgericht Wien, FN 79340b
***
Notice: This e-mail contains information that is confidential and may be 
privileged.
If you are not the intended recipient, please notify the sender and then
delete this e-mail immediately.
***

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-08 Thread Simon Miner
Thanks for the responses,

Jason, I don't think reducing the number of database connections will hurt
responsiveness.  Even though there are 3 separate Catalyst apps, each HTTP
request will only involve one of them (since they all run out of the same
web server), so there should never be contention between the apps for the
shared database connection.  Does this make sense?

Tom and Nicholas, I wish this was premature optimization, but my
organization has experienced serious performance issues in the past related
to multiple (Oracle) database connections per HTTP server process.  Extra
Oracle connections are expensive to maintain, particularly on the database
server, and so we've tried to ensure that a single server process only has a
single connection to a given database (since that's all it should need at
any given time).

I've attached a Devel::NYTProf screenshot for one of the server processes I
profiled this morning. Looks like it confirms the multiple database
connections.

So back to initial question -- How do I update the models of my three
Catalyst apps to share a single Oracle database connection?

Thanks again.  I really appreciate your feedback.

 Simon

On Tue, Sep 7, 2010 at 11:40 PM, Nicholas Wehr
catal...@bionikchickens.comwrote:

 I'm with Tom on this one. Unless you've narrowed all optimization efforts
 and this is all you have left - it could be worth a try.. but as Jason
 points out, you may not gain a thing. I'd recommend profiling your code and
 tracking down performance issues from that base level. Please post your
 results - I've very curious!

 -nw


 On Tue, Sep 7, 2010 at 7:21 PM, Tomas Doran bobtf...@bobtfish.net wrote:


 On 7 Sep 2010, at 18:59, Simon Miner wrote:

 All three of these apps run under a single Apache 1.3.42/mod_perl 1.31
 server.


 Wow, mod_perl 1 Ok then :)


   It appears that each server process creates a unique database connection
 variable for each of these apps. Although these database connections get
 reused from request to request, I would like to make things even more
 efficient by having a single database connection variable per server process
 which gets shared across all 3 Catalyst apps.


 Why do you think that this will help or affect anything?

 I.e. is this not premature optimisation?

 Cheers
 t0m



 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/



 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/




-- 
-- Simon
attachment: nytprof.gif___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-08 Thread Stuart Watt
 Sounds like a job for DBD::Proxy or DBD::Gofer, not that I've ever 
used them, and I have no idea whether they would play nice with DBIC -- 
the DBIC folks would have a better grasp on that question. That would 
leave the Catalyst parts unchanged apart from configuration, which would 
be a good thing architecturally.


--S

Stuart Watt
ARM Product Developer
Information Balance

On 9/8/2010 10:54 AM, Simon Miner wrote:

Thanks for the responses,

Jason, I don't think reducing the number of database connections will 
hurt responsiveness.  Even though there are 3 separate Catalyst apps, 
each HTTP request will only involve one of them (since they all run 
out of the same web server), so there should never be contention 
between the apps for the shared database connection.  Does this make 
sense?


Tom and Nicholas, I wish this was premature optimization, but my 
organization has experienced serious performance issues in the past 
related to multiple (Oracle) database connections per HTTP server 
process.  Extra Oracle connections are expensive to maintain, 
particularly on the database server, and so we've tried to ensure that 
a single server process only has a single connection to a given 
database (since that's all it should need at any given time).


I've attached a Devel::NYTProf screenshot for one of the server 
processes I profiled this morning. Looks like it confirms the multiple 
database connections.


So back to initial question -- How do I update the models of my three 
Catalyst apps to share a single Oracle database connection?


Thanks again.  I really appreciate your feedback.

 Simon

On Tue, Sep 7, 2010 at 11:40 PM, Nicholas Wehr 
catal...@bionikchickens.com mailto:catal...@bionikchickens.com wrote:


I'm with Tom on this one. Unless you've narrowed all optimization
efforts and this is all you have left - it could be worth a try..
but as Jason points out, you may not gain a thing. I'd recommend
profiling your code and tracking down performance issues from that
base level. Please post your results - I've very curious!

-nw


On Tue, Sep 7, 2010 at 7:21 PM, Tomas Doran bobtf...@bobtfish.net
mailto:bobtf...@bobtfish.net wrote:


On 7 Sep 2010, at 18:59, Simon Miner wrote:

All three of these apps run under a single Apache
1.3.42/mod_perl 1.31 server.


Wow, mod_perl 1 Ok then :)


 It appears that each server process creates a unique
database connection variable for each of these apps.
Although these database connections get reused from
request to request, I would like to make things even more
efficient by having a single database connection variable
per server process which gets shared across all 3 Catalyst
apps.


Why do you think that this will help or affect anything?

I.e. is this not premature optimisation?

Cheers
t0m



___
List: Catalyst@lists.scsys.co.uk
mailto:Catalyst@lists.scsys.co.uk
Listinfo:
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/



___
List: Catalyst@lists.scsys.co.uk mailto:Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/




--
-- Simon

--
This message was scanned by ESVA and is believed to be clean.
Click here to report this message as spam. 
http://antispam.infobal.com/cgi-bin/learn-msg.cgi?id=7897728072.B3B1D



___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-08 Thread Brian Phillips
(Hopefully I'm not out of my depth here)

I feel your pain WRT Oracle connections as we've had similar complaints from
our DBA overlords about the number of connections our app was making here at
$work.  Do you have your mod_perl processes behind some sort of proxy?  If
you run your mod_perl application in the same apache instance that serves
static content any child that is spawned, even if it's just for serving HTML
or an image file, will be fully functional (including having a database
connection for each catalyst app that is hosted on that server).  You might
consider changing how your application is deployed and use FastCGI (or
mod_perl behind a proxy) so that it's easier to control the number of
processes (and therefore database connections) you spin up.

On Wed, Sep 8, 2010 at 10:46 AM, Stuart Watt sw...@infobal.com wrote:

  Sounds like a job for DBD::Proxy or DBD::Gofer, not that I've ever used
 them, and I have no idea whether they would play nice with DBIC -- the DBIC
 folks would have a better grasp on that question. That would leave the
 Catalyst parts unchanged apart from configuration, which would be a good
 thing architecturally.

 --S

 Stuart Watt
 ARM Product Developer
 Information Balance

 On 9/8/2010 10:54 AM, Simon Miner wrote:

 Thanks for the responses,

 Jason, I don't think reducing the number of database connections will hurt
 responsiveness.  Even though there are 3 separate Catalyst apps, each HTTP
 request will only involve one of them (since they all run out of the same
 web server), so there should never be contention between the apps for the
 shared database connection.  Does this make sense?

 Tom and Nicholas, I wish this was premature optimization, but my
 organization has experienced serious performance issues in the past related
 to multiple (Oracle) database connections per HTTP server process.  Extra
 Oracle connections are expensive to maintain, particularly on the database
 server, and so we've tried to ensure that a single server process only has a
 single connection to a given database (since that's all it should need at
 any given time).

 I've attached a Devel::NYTProf screenshot for one of the server processes I
 profiled this morning. Looks like it confirms the multiple database
 connections.

 So back to initial question -- How do I update the models of my three
 Catalyst apps to share a single Oracle database connection?

 Thanks again.  I really appreciate your feedback.

  Simon

 On Tue, Sep 7, 2010 at 11:40 PM, Nicholas Wehr 
 catal...@bionikchickens.com wrote:

 I'm with Tom on this one. Unless you've narrowed all optimization efforts
 and this is all you have left - it could be worth a try.. but as Jason
 points out, you may not gain a thing. I'd recommend profiling your code and
 tracking down performance issues from that base level. Please post your
 results - I've very curious!

 -nw


 On Tue, Sep 7, 2010 at 7:21 PM, Tomas Doran bobtf...@bobtfish.netwrote:


 On 7 Sep 2010, at 18:59, Simon Miner wrote:

 All three of these apps run under a single Apache 1.3.42/mod_perl 1.31
 server.


  Wow, mod_perl 1 Ok then :)


   It appears that each server process creates a unique database
 connection variable for each of these apps. Although these database
 connections get reused from request to request, I would like to make things
 even more efficient by having a single database connection variable per
 server process which gets shared across all 3 Catalyst apps.


  Why do you think that this will help or affect anything?

 I.e. is this not premature optimisation?

 Cheers
 t0m



 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/



 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/




 --
 -- Simon

 --
 This message was scanned by ESVA and is believed to be clean.
 Click here to report this message as 
 spam.http://antispam.infobal.com/cgi-bin/learn-msg.cgi?id=7897728072.B3B1D


 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/


 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/


___
List: Catalyst@lists.scsys.co.uk
Listinfo: 

Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-08 Thread Tomas Doran


On 8 Sep 2010, at 19:17, Javier Arturo Rodriguez wrote:


On 9/8/10 4:54 PM, Simon Miner wrote:
The parameters defining the connection have to be exactly the same,  
including the connect attributes! If there  is no appropriate  
database handle or if the ping method fails, a new connection is  
established and the handle is stored for later re-use.
I agree that this is not early optimization -- just good  
housekeeping. Oracle SQL Net connections are indeed expensive to set  
up but tend to consume near-zero resources when idle, so I would not  
worry too much about connection reuse among apps just yet - in my  
book this is more of a sysadmin issue.


I'm entirely unsure which side you're arguing for here.

Oracle connections are expensive _to make_, but given you spend one  
per process per app (and your app serves just the dynamic content),  
who cares?


I'd consider being able to treat my applications as entirely disparate  
disconnected entities as a good feature (especially as one app is able  
to say things which affect the DB connection wide - if connections  
were shared between apps this could be more than a single app issue)...


So, in summary - yes, reconnecting per request bad, but you're using  
DBIC anyway - so that's not what's happening.. Reconnecting once for  
each app per process, fine - stop stressing about it..


Cheers
t0m


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


[Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-07 Thread Simon Miner
Hi,

I am running 3 separate Catalyst (version '5.80022) apps that use a common
(Oracle 11g) database.  Each app has a model class which wraps around a
common DBIC schema class, like so.

-

package App1::Model::DB;



use strict;

use base 'Catalyst::Model::DBIC::Schema';



__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;

-

package App2::Model::DB;



use strict;

use base 'Catalyst::Model::DBIC::Schema';



__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;

-

package App3::Model::DB;



use strict;

use base 'Catalyst::Model::DBIC::Schema';



__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;

-

This setup passes changes to the Common::DB::Schema class on to the Catalyst
app model classes.



All three of these apps run under a single Apache 1.3.42/mod_perl 1.31
server.  It appears that each server process creates a unique database
connection variable for each of these apps. Although these database
connections get reused from request to request, I would like to make things
even more efficient by having a single database connection variable per
server process which gets shared across all 3 Catalyst apps.  How do I
update my model to accomplish this?



Thanks.

-- 
-- Simon
___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-07 Thread Jason L. Froebe

Hi Simon,

Reducing the number of connections to the database from three to one 
will reduce the responsiveness and will definitely hurt when trying to 
debug issues (performance, etc).  My recommendation is that each 
application have at least one unique connection to the database.


jason


On 09/07/2010 12:59 PM, Simon Miner wrote:

Hi,

I am running 3 separate Catalyst (version '5.80022) apps that use a 
common (Oracle 11g) database. Each app has a model class which wraps 
around a common DBIC schema class, like so.


-

package App1::Model::DB;

use strict;

use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;


-

package App2::Model::DB;

use strict;

use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;

-

package App3::Model::DB;

use strict;

use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__-config(

schema_class = Common::DB::Schema',

);

1;

-

This setup passes changes to the Common::DB::Schema class on to the 
Catalyst app model classes.


All three of these apps run under a single Apache 1.3.42/mod_perl 1.31 
server. It appears that each server process creates a unique database 
connection variable for each of these apps. Although these database 
connections get reused from request to request, I would like to make 
things even more efficient by having a single database connection 
variable per server process which gets shared across all 3 Catalyst 
apps. How do I update my model to accomplish this?


Thanks.


--
-- Simon


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/
   


___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/


Re: [Catalyst] How to share a database connection across multiple Catalyst apps?

2010-09-07 Thread Nicholas Wehr
I'm with Tom on this one. Unless you've narrowed all optimization efforts
and this is all you have left - it could be worth a try.. but as Jason
points out, you may not gain a thing. I'd recommend profiling your code and
tracking down performance issues from that base level. Please post your
results - I've very curious!

-nw

On Tue, Sep 7, 2010 at 7:21 PM, Tomas Doran bobtf...@bobtfish.net wrote:


 On 7 Sep 2010, at 18:59, Simon Miner wrote:

 All three of these apps run under a single Apache 1.3.42/mod_perl 1.31
 server.


 Wow, mod_perl 1 Ok then :)


   It appears that each server process creates a unique database connection
 variable for each of these apps. Although these database connections get
 reused from request to request, I would like to make things even more
 efficient by having a single database connection variable per server process
 which gets shared across all 3 Catalyst apps.


 Why do you think that this will help or affect anything?

 I.e. is this not premature optimisation?

 Cheers
 t0m



 ___
 List: Catalyst@lists.scsys.co.uk
 Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
 Searchable archive:
 http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
 Dev site: http://dev.catalyst.perl.org/

___
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/