Antes de tudo, você deve considerar esse design com cuidado. As melhores práticas no design de banco de dados são evitar dividir seus dados em vários bancos de dados o máximo possível. É claro que há exceções (por exemplo, se você precisa permitir que os clientes / aplicativos modifiquem seus esquemas), mas, em geral, a escalabilidade na direção de se conectar a vários bancos de dados é ruim. Além disso, consultas cruzadas a bancos de dados são difíceis de escrever, caras e mal suportadas em muitos sistemas de bancos de dados (da maioria), forçando você a fazer um monte de trabalho que poderia ser feito pelo banco de dados no aplicativo. A manutenção é um pesadelo quando você tem um relacionamento N..N entre bancos de dados e aplicativos.
Em segundo lugar, sua explicação é um pouco incerta, mas eu me pergunto como você usa sua piscina ..? Normalmente, com o prefork você mantém alguns servidores ao redor, para melhorar a latência. Contanto que o servidor viva, a conexão persistente também deve. O pconnect realmente não se agrupa, nem parece que você faz. Você poderia dar um exemplo mais claro?
Em terceiro lugar, existem vários recursos que você pode executar. É provável que os Descritores de Arquivos apresentem um problema bem cedo, e ter muitas conexões de cada trabalhador consumirá memória no Apache e no banco de dados. Além disso, estabelecer as conexões será caro, mesmo com um pool de conexão. Se você não puder reduzir o número de bancos de dados em uso, provavelmente terá de reduzir o volume de recursos desperdiçados por conexões db obsoletas.
Se alguém me procurasse com um design que exigisse conexões com centenas de bancos de dados de um funcionário do Apache, eu os enviaria diretamente para a prancheta. Há muitas coisas que podem e vão dar errado com esse design. Mesclar os bancos de dados ou, se isso não for possível, colocar em uma camada intermediária.
edite: Ok, agora as coisas estão um pouco mais claras.
Isso é parcialmente uma questão de planejamento de capacidade, e normalmente é impossível fornecer boas respostas. Mas, para esclarecer alguns pontos.
-
Como mencionado anteriormente, você tem muitos limites que pode atingir ao tentar estabelecer conexões com muitos bancos de dados. Os descritores de arquivos e a memória (especialmente memória compartilhada) provavelmente serão os primeiros limites atingidos.
-
O que você está fazendo não é realmente o pool de conexões, pois as conexões persistentes nunca serão retornadas a um pool. São apenas conexões persistentes, o que economiza alguma sobrecarga.
-
Minha abordagem, se realmente preciso fragmentar os bancos de dados dessa maneira (que eu acho que é uma escolha de design muito ruim) seria dedicar processos do Apache para cada banco de dados. Dessa forma, reduzo o risco de acumular muitas conexões persistentes em um processo. Não há como, até onde eu sei, fazer isso sem ter várias instalações do Apache2 e dividir as solicitações com base no FQDN. Soluções alternativas que eu consideraria seriam consumir o custo de usar o connect e usar o cache para tentar minimizar o número de ocorrências do banco de dados e examinar se não consigo separar o aplicativo da web da confusão do banco de dados.