Pergunta

Eu tenho esta dúvida, eu procurei na web e as respostas parecem ser diversificada. É melhor usar mysql_pconnect sobre mysql_connect ao se conectar a um banco de dados via PHP? Eu li que as escalas PConnect muito melhor, mas, por outro lado, sendo uma conexão persistente ... tendo 10 000 conexões ao mesmo tempo, todos persistente, não parece escalável para mim.

Agradecemos antecipadamente.

Foi útil?

Solução

conexões persistentes devem ser desnecessários para MySQL. Em outras bases de dados (como o Oracle), fazendo uma conexão é caro e demorado, por isso, se você pode voltar a usar uma conexão que é uma grande vitória. Mas essas marcas de pool de conexão oferta de banco de dados, o que resolve o problema de uma maneira melhor.

Fazendo uma conexão com um banco de dados MySQL é rápido em comparação com as outras marcas, portanto, usando conexões persistentes dá proporcionalmente menos benefício para MySQL do que seria de outra marca de banco de dados.

Conexões persistentes têm um lado negativo também. O servidor de banco de dados aloca recursos para cada conexão, se as conexões são necessários ou não. Então você vê um monte de desperdício de recursos para nenhum propósito se as conexões estão ociosos. Eu não sei se você vai chegar a 10.000 conexões ociosas, mas até mesmo um par de cem é caro.

Conexões tem estado, e não seria apropriado para um pedido de PHP à informação "herdar" a partir de uma sessão previamente usado por outro pedido PHP. Por exemplo, tabelas temporárias e variáveis ??de usuário são normalmente limpo como um fecha a conexão, mas não se você usar conexões persistentes. Da mesma forma as configurações baseadas em sessão como conjunto de caracteres e collation. Além disso, LAST_INSERT_ID() iria relatar o id passado gerado durante a sessão -. Mesmo que foi durante uma solicitação PHP antes

Para o MySQL, pelo menos, a desvantagem de conexões persistentes provavelmente supera os seus benefícios. E há outras, melhores técnicas para alcançar alta escalabilidade.


actualização de Março de 2014:

MySQL velocidade de conexão sempre foi baixo em comparação com outras marcas de RDBMS, mas está ficando ainda melhor.

http://mysqlserverteam.com/improving-connectdisconnect-performance/

No MySQL 5.6 começamos a trabalhar na otimização do código de manipulação de conexões e desconexões. E este trabalho tem acelerado no MySQL 5.7. Neste post vou mostrar primeiro os resultados alcançados e, em seguida, descrever o que temos feito para obtê-los.

Leia o blog para mais detalhes e comparações de velocidade.

Outras dicas

Basicamente você tem que equilibrar o custo de criar conexões contra mantendo conexões. Mesmo que o MySQL é muito rápido na criação de uma nova conexão, ainda custa - em tempo de configuração da linha, e no tempo de configuração TCP / IP do seu servidor web. Isso é perceptível em um site de alta o suficiente tráfego. Infelizmente, o PHP não tem qualquer controle sobre a persistência de conexões. Portanto, a resposta é diminuir o tempo limite ocioso no MySQL um longo caminho (como até 20 segundos), e se o tamanho do cache fio. Juntos, isso geralmente funciona muito bem.

Por outro lado, a sua aplicação deve respeitar o estado da conexão. É melhor se ele não faz suposições sobre o estado da sessão está. Se você usar tabelas temporárias, em seguida, usando CRIAR SE NÃO EXISTE e TRUNCATE TABLE ajuda muito, assim como nomeá-los exclusivamente (como inclusive como ID de usuário). As transações são pouco mais problemático; mas seu código sempre pode fazer ROLLBACK no topo, apenas no caso.

É muito improvável que você vai chegar a 10.000 conexões. De qualquer forma, ir para a fonte oficial. (Grifo meu).

Se conexões persistentes não têm qualquer funcionalidade adicional, quais são elas servem?

A resposta aqui é extremamente simples - eficiência. Conexões persistentes são bom se a sobrecarga para criar um link ao seu servidor SQL é alta. Ou não essa sobrecarga é muito alta depende de muitos fatores. Como o quê tipo de banco de dados que é, ou não se senta no mesmo computador em que o seu servidor web se senta, como carregado a máquina do servidor SQL se senta em é e assim por diante. A linha inferior é que, se a sobrecarga de conexão está alta, conexões persistentes ajudá-lo consideravelmente . Eles causam a criança processo de simplesmente conectar apenas uma vez durante toda sua duração, em vez de cada vez que ele processa uma página que requer conexão com o servidor SQL. Isto significa que para cada criança que abriu uma conexão persistente será ter o seu próprio aberta persistente conexão com o servidor. Por exemplo, se você tivesse 20 criança diferente processos que corriam um script que fez uma conexão persistente com o seu SQL servidor, você tem 20 diferentes conexões ao servidor SQL, um de cada criança.

Note, no entanto, que isso pode ter algum inconvenientes se você estiver usando um banco de dados com limites de conexão que são excedida por criança persistente conexões. Se o seu banco de dados tem um limite de 16 ligações simultâneas, e no curso de um servidor ocupado sessão, 17 crianças tópicos tentar connect, não será capaz de. E se existem erros em seus scripts que não permitem que as conexões para fechar baixo (tais como ciclos infinitos), o banco de dados com apenas 16 conexões pode ser rapidamente ficar sobrecarregado. Verifique se o seu documentação de banco de dados para obter informações sobre o manuseio abandonados ou ocioso conexões.

mysql_connect() e mysql_pconnect() ambos estão trabalhando para conexão com o banco, mas com pouca diferença. Em mysql_pconnect(), p significa conexão persistência.

Quando estamos usando a função mysql_connect(), cada vez que é abrir e fechar a conexão de banco de dados, dependendo da solicitação.

Mas no caso da função mysql_pconnect():

  • Primeiro, ao conectar, a função irá tentar encontrar uma conexão (persistente) que já esteja aberta com o mesmo host, nome de usuário e senha. Se for encontrado, um identificador para ele será devolvido em vez de abrir uma nova conexão.

  • Em segundo lugar, a conexão com o servidor SQL não será fechada quando a execução dos fins de script. Em vez disso, a conexão permanecerá aberta para uso futuro (mysql_close() não fechar ligação estabelecida mysql_pconnect()).

mysql_pconncet() é útil quando você tem um monte de semáforo em seu site. Naquela época, para cada pedido que não vai abrir uma conexão, mas vai levá-lo a partir da piscina. Isto irá aumentar a eficiência de seu site. Mas para mysql_connect uso geral () é o melhor.

mysql_connect ()

1.mysql_connect pode ser usado para fechar o tempo connection.Every é abrir e fechar a conexão de banco de dados, dependendo da solicitação.

banco de dados 2.Here é aberto toda vez que quando a página é carregada em MYSQL conexão

3. Quando a página é carregada, o banco de dados é cada vez carregado

4.It é usado para fechar a conexão

Exemplo:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

Descrição:

host:. Especifica um nome de host ou um endereço IP como localhost

mysql_user: Especifica o MySQL nome de usuário

mysql_password: Especifica a senha MySQL

mysql_pconnect ()

1.We usar o mysql_pconncet (), que inicialmente tenta encontrar uma conexão persistente aberto.

2. mysql_pconncet () abre uma conexão persistente

3.O mysql_pconnect () não suporta a ligação estreita

4.mysql_pconnect () não pode fechar a conexão. Aqui abrir uma conexão persistente com o banco de dados

5.Here necessidade de banco de dados não ser sempre que conectado.

6. A necessidade banco de dados não ser conectado a cada vez em mysql_pconncet ().

mais detalhes: http://prittytimes.com/difference-between-mysql_connect- e-mysql_pconnect /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top