Files
archived-doc-pt-br/reference/mysqli/persistconns.xml
Marcos Marcolin 02e46637b7 Translation/Update by @marcosmarcolin
* Ajustar link de novos recursos e incompatibilidades da migração do 7.0 para 7.1.

* docs: missing translation of reference/mysqli.

* docs: missing translation of reference/mysqli/functions.

* docs: missing translation of reference/mysqli/mysqli

* docs: remove english text.

Co-authored-by: Marcos Marcolin <marcos@ixcsoft.com.br>
2023-01-17 11:45:41 -03:00

142 lines
3.9 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a714378ed87cdbdbde3b10ded183e8df7b243cb4 Maintainer: marcosmarcolin Status: ready --><!-- CREDITS: marcosmarcolin -->
<chapter xml:id="mysqli.persistconns" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>A extensão mysqli e conexões persistentes</title>
<para>
A ideia por trás das conexões persistentes é
que uma conexão entre um processo cliente e um banco de dados pode ser
reutilizada por um processo cliente, em vez de ser criada e destruída
várias vezes. Isso reduz a sobrecarga de criar novas conexões
sempre que uma é necessária, pois as conexões não utilizadas
são armazenadas em cache e estão prontas para serem reutilizadas.
</para>
<para>
Ao contrário da extensão mysql, mysqli não fornece uma função separada
para abrir conexões persistentes. Para abrir uma conexão persistente,
você deve preceder <literal>p:</literal> ao nome do host ao conectar.
</para>
<para>
O problema com conexões persistentes é que elas podem ser deixadas em
estados imprevisíveis pelos clientes. Por exemplo, um bloqueio de tabela
pode ser ativado antes que um cliente seja encerrado inesperadamente. Um novo
processo cliente reutilizando essa conexão persistente obterá a conexão
<quote>como está</quote>. Qualquer limpeza precisaria ser feita pelo novo
processo cliente antes que ele pudesse fazer bom uso da conexão ]
persistente, aumentando a carga do programador.
</para>
<para>
A conexão persistente da extensão <literal>mysqli</literal>,
no entanto, fornece código de manipulação de limpeza integrado. A limpeza
realizada pelo <literal>mysqli</literal> inclui:
</para>
<itemizedlist>
<listitem>
<para>
Reverter transações ativas
</para>
</listitem>
<listitem>
<para>
Fechar e descartar tabelas temporárias
</para>
</listitem>
<listitem>
<para>
Desbloquear tabelas
</para>
</listitem>
<listitem>
<para>
Redefinir variáveis de sessão
</para>
</listitem>
<listitem>
<para>
Fechar declarações preparadas (sempre acontece com PHP)
</para>
</listitem>
<listitem>
<para>
Fechar manipulador
</para>
</listitem>
<listitem>
<para>
Liberar bloqueios adquiridos com <function>GET_LOCK</function>
</para>
</listitem>
</itemizedlist>
<para>
Isso garante que as conexões persistentes estejam em um estado limpo ao
retornar do pool de conexões, antes que o processo do cliente as use.
</para>
<para>
A extensão <literal>mysqli</literal> faz essa limpeza
chamando automaticamente a função C-API
<literal>mysql_change_user()</literal>.
</para>
<para>
O recurso de limpeza automática tem vantagens e desvantagens.
A vantagem é que o programador não precisa mais se preocupar em
adicionar código de limpeza, pois ele é chamado automaticamente. No entanto, a
desvantagem é que o código pode ser um <emphasis>pouco</emphasis>
mais lento, pois o código para executar a limpeza precisa ser executado
sempre que uma conexão é retornada do pool de conexões.
</para>
<para>
É possível desligar o código de limpeza automática, compilando o
PHP com
<constant>MYSQLI_NO_CHANGE_USER_ON_PCONNECT</constant>
definido.
</para>
<note>
<para>
A extensão <literal>mysqli</literal> suporta conexões
persistentes ao usar MySQL Native Driver ou MySQL Client
Library.
</para>
</note>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->