initial translation of oci8/dtrace

This commit is contained in:
leonardolara
2024-12-20 08:45:21 -03:00
parent e56cd78f27
commit 69ad792c6d

406
reference/oci8/dtrace.xml Normal file
View File

@@ -0,0 +1,406 @@
<?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
-->