mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
407 lines
13 KiB
XML
407 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: f4c44b86948f70a7e89f582b500e2595452e00f0 Maintainer: leonardolara Status: ready -->
|
||
<chapter xml:id="oci8.dtrace" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>OCI8 e Rastreamento dinâmico DTrace</title>
|
||
<para>
|
||
O OCI8 2.0 introduziu sondas DTrace estáticas que podem ser usadas em
|
||
sistemas operacionais compatíveis com o DTrace.
|
||
Consulte <link linkend="features.dtrace">Rastreamento Dinâmico DTrace</link>
|
||
para obter uma visão geral do PHP e do DTrace.
|
||
</para>
|
||
|
||
<section>
|
||
<title>Instalando OCI8 com suporte a DTrace</title>
|
||
<para>
|
||
Para habilitar o suporte a DTrace no PHP OCI8, o OCI8 deve ser compilado como uma extensão
|
||
compartilhada após a definição de <literal>PHP_DTRACE</literal>.
|
||
</para>
|
||
<para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
$ export PHP_DTRACE=yes
|
||
$ pecl install oci8
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
Edite o php.ini,
|
||
defina <link linkend="ini.extension-dir">extension_dir</link> para o
|
||
diretório que contém o <filename>oci8.so</filename> criado e também
|
||
habilite a extesão adicionando:
|
||
</para>
|
||
<para>
|
||
<informalexample>
|
||
<screen>
|
||
<![CDATA[
|
||
extension=oci8.so
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
Se o PHP OCI8 for instalado a partir do PECL usando <filename>phpize</filename> e
|
||
<filename>configure</filename> (ao invés
|
||
de <filename>pecl</filename>), ainda será necessário definir
|
||
<literal>PHP_DTRACE=yes</literal>. Isto acontece porque
|
||
a opção <literal>--enable-dtrace</literal> será ignorada pelo
|
||
script <filename>configure</filename> limitado de um pacote PECL.
|
||
</para>
|
||
|
||
<para>
|
||
Consulte <link linkend="install.pecl">Instalação de extensões
|
||
PECL</link> para intruções gerais de instalação via PECL.
|
||
</para>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Sondas Estáticas DTrace no PHP OCI8</title>
|
||
<table>
|
||
<title>As seguintes sondas estáticas estão disponíveis no PHP OCI8</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Nome da Sonda</entry>
|
||
<entry>Descrição da Sonda</entry>
|
||
<entry>Argumentos da Sonda</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>oci8-connect-entry</literal></entry>
|
||
<entry>Iniciada por oci_connect(), oci_pconnect() e oci_new_connect(). É ativada antes da conexão ao banco de dados ser estabelecida.</entry>
|
||
<entry>char *<varname>username</varname>, char *<varname>dbname</varname>, char *<varname>charset</varname>, long <varname>session_mode</varname>, int <varname>persistent</varname>, int <varname>exclusive</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connect-return</literal></entry>
|
||
<entry>É ativada no final da conexão.</entry>
|
||
<entry>void *<varname>connection</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-check-connection</literal></entry>
|
||
<entry>É ativada se um erro Oracle possa ter tornado a conexão inválida.</entry>
|
||
<entry>void *<varname>connection</varname>, char *<varname>client_id</varname>, int <varname>is_open</varname>, long <varname>errcode</varname>, unsigned long <varname>server_status</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-sqltext</literal></entry>
|
||
<entry>É ativada quando oci_parse() é executada.</entry>
|
||
<entry>void *<varname>connection</varname>, char *<varname>client_id</varname>, void *<varname>statement</varname>, char *<varname>sql</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connection-close</literal></entry>
|
||
<entry>É ativada quando a conexão ao banco de dados é completamente destruída.</entry>
|
||
<entry>void *<varname>connection</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-error</literal></entry>
|
||
<entry>É ativada se um erro Oracle ocorrer.</entry>
|
||
<entry>int <varname>status</varname>, long <varname>errcode</varname></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-execute-mode</literal></entry>
|
||
<entry>É ativada na função <function>oci_execute</function> para mostrar o modo de execução.</entry>
|
||
<entry>void *<varname>connection</varname>, char *<varname>client_id</varname>, void *<varname>statement</varname>, unsigned int <varname>mode</varname></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
<para>
|
||
Estas sondas são úteis para rastrear scripts OCI8.
|
||
</para>
|
||
|
||
<para>
|
||
As variáveis <varname>connection</varname> e <varname>statement</varname>
|
||
são ponteiros para estruturas internas usados para rastrear
|
||
conexões e instruções executadas do PHP.
|
||
</para>
|
||
|
||
<para>
|
||
A variável <varname>client_id</varname> é o valor definido
|
||
por <function>oci_set_client_identifier</function>.
|
||
</para>
|
||
|
||
<para>
|
||
</para>
|
||
|
||
<para>
|
||
</para>
|
||
|
||
<para>
|
||
</para>
|
||
|
||
|
||
<para>
|
||
O núcleo do PHP também tem sondas estáticas.
|
||
Consulte <link linkend="features.dtrace.static-probes">Sondas Estáticas
|
||
DTrace no Núcleo do PHP</link>.
|
||
</para>
|
||
|
||
<table>
|
||
<title>Sondas DTrace Internas de Depuração no OCI8</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Nome da Sonda</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>oci8-connect-expiry</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connect-lookup</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connect-p-dtor-close</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connect-p-dtor-release</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-connect-type</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-sesspool-create</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-sesspool-stats</literal></entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>oci8-sesspool-type</literal></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
<para>
|
||
Estas sondas são úteis para mantenedores do OCI8. Consulte o código-fonte para argumentos e para ver quando elas serão ativadas.
|
||
</para>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Listando Sondas Estáticas DTrace no PHP OCI8</title>
|
||
<para>
|
||
Para listar sondas disponíveis, inicie um processo PHP e depois execute:
|
||
<informalexample>
|
||
<programlisting>
|
||
<![CDATA[
|
||
# dtrace -l
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<para>
|
||
O resultado será similar a:
|
||
<informalexample>
|
||
<programlisting>
|
||
<![CDATA[
|
||
ID PROVIDER MODULE FUNCTION NAME
|
||
[ . . . ]
|
||
17 phpoci22116 oci8.so php_oci_dtrace_check_connection oci8-check-connection
|
||
18 phpoci22116 oci8.so php_oci_do_connect oci8-connect-entry
|
||
19 phpoci22116 oci8.so php_oci_persistent_helper oci8-connect-expiry
|
||
20 phpoci22116 oci8.so php_oci_do_connect_ex oci8-connect-lookup
|
||
21 phpoci22116 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close
|
||
22 phpoci22116 oci8.so php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release
|
||
23 phpoci22116 oci8.so php_oci_do_connect oci8-connect-return
|
||
24 phpoci22116 oci8.so php_oci_do_connect_ex oci8-connect-type
|
||
25 phpoci22116 oci8.so php_oci_connection_close oci8-connection-close
|
||
26 phpoci22116 oci8.so php_oci_error oci8-error
|
||
27 phpoci22116 oci8.so php_oci_statement_execute oci8-execute-mode
|
||
28 phpoci22116 oci8.so php_oci_create_spool oci8-sesspool-create
|
||
29 phpoci22116 oci8.so php_oci_create_session oci8-sesspool-stats
|
||
30 phpoci22116 oci8.so php_oci_create_session oci8-sesspool-type
|
||
31 phpoci22116 oci8.so php_oci_statement_create oci8-sqltext
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<para>
|
||
Os valores da coluna PROVIDER consistem no prefixo <literal>phpoci</literal> e
|
||
o ID fo processo PHP atual.
|
||
</para>
|
||
|
||
<para>
|
||
A coluna FUNCTION refere-se aos nomes de função da implementação C
|
||
interna do PHP onde cada provedor está localizado.
|
||
</para>
|
||
|
||
<para>
|
||
Se um processo PHP não estiver em execução, nenhuma sonda PHP será exibida.
|
||
</para>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Exemplo de DTrace com PHP OCI8</title>
|
||
<para>
|
||
Este exemplo mostra o básico da linguagem de script D do DTrace.
|
||
<example>
|
||
<title><filename>user_oci8_probes.d</filename> para rastrear todas as Sondas Estáticas PHP OCI8 em nível de usuário com DTrace</title>
|
||
<programlisting>
|
||
<![CDATA[
|
||
#!/usr/sbin/dtrace -Zs
|
||
|
||
#pragma D option quiet
|
||
|
||
php*:::oci8-connect-entry
|
||
{
|
||
printf("%lld: PHP connect-entry\n", walltimestamp);
|
||
printf(" credentials=\"%s@%s\"\n", arg0 ? copyinstr(arg0) : "", arg1 ? copyinstr(arg1) : "");
|
||
printf(" charset=\"%s\"\n", arg2 ? copyinstr(arg2) : "");
|
||
printf(" session_mode=%ld\n", (long)arg3);
|
||
printf(" persistent=%d\n", (int)arg4);
|
||
printf(" exclusive=%d\n", (int)arg5);
|
||
}
|
||
|
||
php*:::oci8-connect-return
|
||
{
|
||
printf("%lld: PHP oci8-connect-return\n", walltimestamp);
|
||
printf(" connection=0x%p\n", (void *)arg0);
|
||
}
|
||
|
||
php*:::oci8-connection-close
|
||
{
|
||
printf("%lld: PHP oci8-connect-close\n", walltimestamp);
|
||
printf(" connection=0x%p\n", (void *)arg0);
|
||
}
|
||
|
||
php*:::oci8-error
|
||
{
|
||
printf("%lld: PHP oci8-error\n", walltimestamp);
|
||
printf(" status=%d\n", (int)arg0);
|
||
printf(" errcode=%ld\n", (long)arg1);
|
||
}
|
||
|
||
php*:::oci8-check-connection
|
||
{
|
||
printf("%lld: PHP oci8-check-connection\n", walltimestamp);
|
||
printf(" connection=0x%p\n", (void *)arg0);
|
||
printf(" client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
|
||
printf(" is_open=%d\n", arg2);
|
||
printf(" errcode=%ld\n", (long)arg3);
|
||
printf(" server_status=%lu\n", (unsigned long)arg4);
|
||
}
|
||
|
||
php*:::oci8-sqltext
|
||
{
|
||
printf("%lld: PHP oci8-sqltext\n", walltimestamp);
|
||
printf(" connection=0x%p\n", (void *)arg0);
|
||
printf(" client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
|
||
printf(" statement=0x%p\n", (void *)arg2);
|
||
printf(" sql=\"%s\"\n", arg3 ? copyinstr(arg3) : "");
|
||
}
|
||
|
||
php*:::oci8-execute-mode
|
||
{
|
||
printf("%lld: PHP oci8-execute-mode\n", walltimestamp);
|
||
printf(" connection=0x%p\n", (void *)arg0);
|
||
printf(" client_id=\"%s\"\n", arg1 ? copyinstr(arg1) : "");
|
||
printf(" statement=0x%p\n", (void *)arg2);
|
||
printf(" mode=0x%x\n", arg3);
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
|
||
<para>
|
||
Este script usa a opção <literal>-Z</literal> para
|
||
<filename>dtrace</filename>, permitindo que ele seja executado quando não houver
|
||
processo PHP em execução. Se esta opção fosse omitida, o script
|
||
terminaria imediatamente quando nenhum executável do PHP estivesse em execução
|
||
porque ele sabe que nenhuma das sondas a serem monitoradas
|
||
existiriam.
|
||
</para>
|
||
|
||
<para>
|
||
Em máquinas com múltiplas CPUs, a ordem das sondas pode não parecer
|
||
sequencial. Isto depende de qual CPU está processando as sondas,
|
||
e como os threads migram através dos CPUs. Exibir o horário de cada sonda
|
||
ajuda a reduzir a confusão.
|
||
</para>
|
||
|
||
<para>
|
||
O script rastreia todos os pontos de sondas estáticas do PHP OCI8 em nível de usuário,
|
||
durante toda a execução do script PHP. Execute o script D:
|
||
<informalexample>
|
||
<programlisting>
|
||
<![CDATA[
|
||
# ./user_oci8_probes.d
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<para>
|
||
Execute uma aplicação ou um script PHP. O script D de monitoramento
|
||
exeubirá os argumentos de cada sonda assim que ativada. Por exemplo, um simples
|
||
script PHP que consulta uma tabela pode produzir o seguinte resultado de
|
||
rastreamento:
|
||
<informalexample>
|
||
<programlisting>
|
||
<![CDATA[
|
||
1381794982092854582: PHP connect-entry
|
||
credentials="hr@localhost/pdborcl"
|
||
charset=""
|
||
session_mode=0
|
||
persistent=0
|
||
exclusive=0
|
||
1381794982183158766: PHP oci8-connect-return
|
||
connection=0x7f4a7907bfb8
|
||
1381794982183594576: PHP oci8-sqltext
|
||
connection=0x7f4a7907bfb8
|
||
client_id="Chris"
|
||
statement=0x7f4a7907c2a0
|
||
sql="select * from employees"
|
||
1381794982183783706: PHP oci8-execute-mode
|
||
connection=0x7f4a7907bfb8
|
||
client_id="Chris"
|
||
statement=0x7f4a7907c2a0
|
||
mode=0x20
|
||
1381794982444344390: PHP oci8-connect-close
|
||
connection=0x7f4a7907bfb8
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<para>
|
||
Quando o monitoramento estiver concluído, o script D pode ser encerrado com um
|
||
<keycombo action='simul'><keycap>CTRL</keycap><keycap>C</keycap></keycombo>.
|
||
</para>
|
||
|
||
</section>
|
||
|
||
<section>
|
||
&reftitle.seealso;
|
||
<simplelist>
|
||
<member><link linkend="features.dtrace">Rastreamento Dinâmico DTrace</link></member>
|
||
</simplelist>
|
||
</section>
|
||
|
||
</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
|
||
-->
|
||
|