mirror of
https://github.com/php/doc-ru.git
synced 2026-03-26 00:32:15 +01:00
1651 lines
73 KiB
XML
1651 lines
73 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 55089a115125366b79adbd0f99299d53e561fc10 Maintainer: rjhdby Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="mysqlnd.stats" xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||
<title>Статистика</title>
|
||
|
||
<para>
|
||
MySQL Native Driver поддерживает сбор статистики по взаимодействию
|
||
клиента с сервером. Статистические данные собираются с двух основных точек:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>Клиентская статистика</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>Статистика соединения</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
<para>
|
||
При работе с модулем <link linkend="book.mysqli">mysqli</link> эти статистические данные получают через два API-вызова:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara><function>mysqli_get_client_stats</function></simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><function>mysqli_get_connection_stats</function></simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
Статистика агрегируется по всем расширениям, которые используют драйвер MySQL Native
|
||
Driver.
|
||
Например, если модуль <link linkend="book.mysqli">mysqli</link>
|
||
и драйвер PDO MySQL настроены на работу с драйвером MySQLnd,
|
||
тогда вызовы функций модуля <link linkend="book.mysqli">mysqli</link>
|
||
и вызовы методов класса PDO будут влиять на статистику.
|
||
</simpara>
|
||
<simpara>
|
||
Нет способа узнать, насколько конкретный вызов API модуля,
|
||
который скомпилировали с драйвером MySQL Native Driver, повлиял на конкретную
|
||
статистику.
|
||
</simpara>
|
||
</note>
|
||
|
||
<section xml:id="mysqlnd.stats.retrieve" annotations="chunk:false">
|
||
<title>Получение статистики</title>
|
||
|
||
<simpara>
|
||
Клиентскую статистику получают через вызов функции
|
||
<function>mysqli_get_client_stats</function>.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Статистику соединения получают через вызов функции
|
||
<function>mysqli_get_connection_stats</function>.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Обе функции возвращают ассоциативный массив,
|
||
в котором метрики статистики — ключи, которые
|
||
соответствуют статистическим данным.
|
||
</simpara>
|
||
</section>
|
||
|
||
<section xml:id="mysqlnd.stats.statistics" annotations="chunk:false">
|
||
<title>Статистика драйвера MySQL Native Driver</title>
|
||
<simpara>
|
||
Бо́льшая часть статистических данных связана с подключением,
|
||
но отдельные данные связаны с процессом, и тогда это упоминается.
|
||
<!-- Process running the server? -->
|
||
</simpara>
|
||
<simpara>
|
||
Следующая статистика выдается драйвером MySQL Native Driver:
|
||
</simpara>
|
||
|
||
<variablelist>
|
||
<title>Сетевая статистика</title>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-sent">
|
||
<term><literal>bytes_sent</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество байтов, которые PHP отправил MySQL-серверу.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received">
|
||
<term><literal>bytes_received</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество байтов, которые PHP получил от MySQL-сервера.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-sent">
|
||
<term><literal>packets_sent</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов, которые отправили по протоколу MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received">
|
||
<term><literal>packets_received</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов, которые получили по протоколу MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.protocol-overhead-in">
|
||
<term><literal>protocol_overhead_in</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Накладные расходы протокола MySQL Client Server в байтах для входящего трафика.
|
||
Пока накладными расходами признаётся только заголовок Packet Header (4 байта).
|
||
<code>protocol_overhead_in = packets_received * 4</code>
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.protocol-overhead-out">
|
||
<term><literal>protocol_overhead_out</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Накладные расходы протокола MySQL Client Server в байтах для исходящего трафика.
|
||
Пока накладными расходами признаётся только заголовок Packet Header (4 байта).
|
||
<code>protocol_overhead_out = packets_received * 4</code>
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-ok-packet">
|
||
<term><literal>bytes_received_ok_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер полученных пакетов OK протокола MySQL Client Server в байтах.
|
||
Пакеты OK могут содержать сообщение о состоянии.
|
||
Длина сообщения о состоянии может варьироваться, и, следовательно, размер
|
||
пакета OK не фиксирован.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Общий размер в байтах включает размер пакета заголовка
|
||
(4 байта, см. накладные расходы протокола).
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-ok">
|
||
<term><literal>packets_received_ok</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество полученных пакетов OK протокола MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-eof-packet">
|
||
<term><literal>bytes_received_eof_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер полученных пакетов EOF протокола MySQL Client Server в байтах.
|
||
Размер пакетов EOF варьируется в зависимости от версии сервера.
|
||
Кроме того, пакет EOF может передавать сообщение об ошибке.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-eof">
|
||
<term><literal>packets_received_eof</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов EOF протокола MySQL Client Server.
|
||
</simpara>
|
||
<simpara>
|
||
Как и в случае с другой статистикой пакетов, количество пакетов будет
|
||
увеличиваться, даже если PHP получит не ожидаемый пакет,
|
||
а, например, сообщение об ошибке.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-rset-header-packet">
|
||
<term><literal>bytes_received_rset_header_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер результирующего набора пакетов заголовков протокола
|
||
MySQL Client Server в байтах.
|
||
Размер пакетов варьируется в зависимости от полезной нагрузки
|
||
(инструкции <literal>LOAD LOCAL INFILE</literal>, <literal>INSERT</literal>,
|
||
<literal>UPDATE</literal>, <literal>SELECT</literal>, сообщение об ошибке).
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-rset-header">
|
||
<term><literal>packets_received_rset_header</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов заголовков результирующего набора протокола MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-rset-field-meta-packet">
|
||
<term><literal>bytes_received_rset_field_meta_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер пакетов метаданных (информации о столбце) результирующего набора протокола
|
||
MySQL Client Server в байтах.
|
||
Конечно, размер зависит от столбцов в наборе результатов.
|
||
Пакет также может передавать ошибку или пакет EOF в случае
|
||
пакета COM_LIST_FIELDS.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-rset-field-meta">
|
||
<term><literal>packets_received_rset_field_meta</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов метаданных (информации о столбце) результирующего набора протокола
|
||
MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-rset-row-packet">
|
||
<term><literal>bytes_received_rset_row_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер пакетов данных строки результирующего набора протокола MySQL Client Server
|
||
в байтах.
|
||
Пакет также может передавать ошибку или пакет EOF.
|
||
Можно вычислить количество ошибок и пакетов EOF путём вычитания
|
||
метрик <literal>rows_fetched_from_server_normal</literal>
|
||
и <literal>rows_fetched_from_server_ps</literal>
|
||
из метрики <literal>bytes_received_rset_row_packet</literal>.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-rset-row">
|
||
<term><literal>packets_received_rset_row</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов данных строки результирующего набора протокола
|
||
MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-prepare-response-packet">
|
||
<term><literal>bytes_received_prepare_response_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер пакетов OK протокола MySQL Client Server для инициализации подготовленного запроса
|
||
(init-пакеты подготовленного запроса) в байтах.
|
||
Пакет также может передавать сообщение об ошибке.
|
||
Размер пакета зависит от версии MySQL-сервера.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-prepare-response">
|
||
<term><literal>packets_received_prepare_response</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов OK протокола MySQL Client Server для инициализации подготовленного
|
||
запроса (init-пакеты подготовленного запроса).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-change-user-packet">
|
||
<term><literal>bytes_received_change_user_packet</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общий размер пакетов COM_CHANGE_USER протокола MySQL Client Server protocol в байтах.
|
||
Пакет также может передавать ошибку или состояние EOF.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.bytes-received-ok-packet')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-received-change-user">
|
||
<term><literal>packets_received_change_user</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество пакетов COM_CHANGE_USER протокола MySQL Client Server.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.packets-sent-command">
|
||
<term><literal>packets_sent_command</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество команд протокола MySQL Client Server, которые отправил PHP на MySQL-сервер.
|
||
</simpara>
|
||
<simpara>
|
||
Нет способа узнать, какие именно команды и сколько из них отправил PHP.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-real-data_normal">
|
||
<term><literal>bytes_received_real_data_normal</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество байтов полезной нагрузки, которые получил PHP-клиент
|
||
от драйвера <literal>mysqlnd</literal> по текстовому протоколу.
|
||
</simpara>
|
||
<simpara>
|
||
Это размер фактических данных, которые содержатся в наборах результатов, которые
|
||
не исходят из подготовленных запросов и которые получил PHP-клиент.
|
||
</simpara>
|
||
<simpara>
|
||
Обратите внимание, что, хотя полный результирующий набор мог быть получен от MySQL-сервера
|
||
через драйвер <literal>mysqlnd</literal>, в этой статистике учитываются только фактические данные,
|
||
которые PHP-клиент получил от дайвера <literal>mysqlnd</literal>.
|
||
</simpara>
|
||
<para>
|
||
Пример последовательности кода, которая увеличивает значение, выглядит следующим образом:
|
||
<programlisting>
|
||
<![CDATA[
|
||
$mysqli = new mysqli();
|
||
$res = $mysqli->query("SELECT 'abc'");
|
||
$res->fetch_assoc();
|
||
$res->close();
|
||
]]>
|
||
</programlisting>
|
||
Каждая операция извлечения будет увеличивать значение.
|
||
</para>
|
||
<para>
|
||
Однако значение метрики не будет увеличено, если результирующий набор только
|
||
буферизуется на клиенте, но не извлекается, как, например, в следующем примере:
|
||
<programlisting>
|
||
<![CDATA[
|
||
$mysqli = new mysqli();
|
||
$res = $mysqli->query("SELECT 'abc'");
|
||
$res->close();
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bytes-received-real-data-ps">
|
||
<term><literal>bytes_received_real_data_ps</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество байтов полезной нагрузки, которую получил PHP-клиент
|
||
от драйвера <literal>mysqlnd</literal> по протоколу подготовленного запроса.
|
||
</simpara>
|
||
<simpara>
|
||
Это размер фактических данных, которые содержатся в наборах результатов, которые
|
||
не исходят из подготовленных запросов и которые получил PHP-клиент.
|
||
</simpara>
|
||
<simpara>
|
||
Модуль не увеличит значение, если PHP-клиент впоследствии не прочитает набор результатов.
|
||
</simpara>
|
||
<simpara>
|
||
Обратите внимание, что, хотя полный результирующий набор мог быть получен от MySQL-сервера
|
||
через драйвер <literal>mysqlnd</literal>, в этой статистике учитываются только фактические данные,
|
||
которые PHP-клиент получил от драйвера <literal>mysqlnd</literal>.
|
||
</simpara>
|
||
<simpara>
|
||
Смотрите также описание метрики <literal>bytes_received_real_data_normal</literal>.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<variablelist>
|
||
<title>Статистические данные результирующего набора</title>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.result-set-queries">
|
||
<term><literal>result_set_queries</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество запросов, которые сгенерировали набор результатов.
|
||
Примеры запросов, которые генерируют результирующий набор:
|
||
<literal>SELECT</literal>, <literal>SHOW</literal>.
|
||
</simpara>
|
||
<simpara>
|
||
Модуль не увеличивает значение метрики, если произойдет ошибка при чтении
|
||
пакета заголовка результирующего набора из строки.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Этой статистикой пользуются как косвенным показателем
|
||
количества запросов, которые PHP отправил на MySQL-сервер.
|
||
Это помогает определить клиента, который вызывает высокую нагрузку на базу данных.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.non-result-set-queries">
|
||
<term><literal>non_result_set_queries</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество запросов, которые не создали набор результатов.
|
||
Примеры запросов, которые не генерируют набор результатов:
|
||
<literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>LOAD DATA</literal>.
|
||
</simpara>
|
||
<simpara>
|
||
Модуль не увеличивает значение метрики, если произойдет ошибка при считывании
|
||
пакета заголовка результирующего набора из строки.
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.result-set-queries')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.no-index-used">
|
||
<term><literal>no_index_used</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество запросов, которые создали набор результатов, но не использовали индекс.
|
||
(Смотрите также параметр запуска <literal>--log-queries-not-using-indexes</literal> команды mysqld).
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Об этих запросах сообщают через исключение, для чего вызывают
|
||
<code>mysqli_report(MYSQLI_REPORT_INDEX);</code>.
|
||
Вместо этого можно сообщить о них через предупреждения путём вызова
|
||
<code>mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);</code>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.bad-index-used">
|
||
<term><literal>bad_index_used</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество запросов, которые сгенерировали набор результатов без хорошего индекса.
|
||
(Смотрите также параметр запуска <literal>--log-slow-queries</literal> команды mysqld).
|
||
</simpara>
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.no-index-used')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.slow-queries">
|
||
<term><literal>slow_queries</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
SQL-запросы, выполнение которых заняло больше секунд, чем значение параметра <literal>long_query_time</literal>,
|
||
и для проверки которых требовало как минимум такое количество строк,
|
||
которое задали в параметре <literal>min_examined_row_limit</literal>.
|
||
</simpara>
|
||
<caution>
|
||
<simpara>
|
||
Не сообщается через функцию <function>mysqli_report</function>.
|
||
</simpara>
|
||
</caution>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.buffered-sets">
|
||
<term><literal>buffered_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество буферизованных результирующих наборов, которые возвращают обычные
|
||
неподготовленные запросы.
|
||
</simpara>
|
||
<para>
|
||
Примеры вызовов API, которые буферизуют наборы результатов на клиенте:
|
||
<simplelist type="inline">
|
||
<member><function>mysqli_query</function></member>
|
||
<member><function>mysqli_store_result</function></member>
|
||
<member><function>mysqli_stmt_get_result</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.unbuffered-sets">
|
||
<term><literal>unbuffered_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество небуферизованных результирующих наборов, которые возвращают обычные
|
||
неподготовленные запросы.
|
||
</simpara>
|
||
<para>
|
||
Примеры вызовов API, которые не буферизуют наборы результатов на клиенте:
|
||
<simplelist type="inline">
|
||
<member><function>mysqli_use_result</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.ps-buffered-sets">
|
||
<term><literal>ps_buffered_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество буферизованных наборов результатов, которые возвращают подготовленные запросы.
|
||
</simpara>
|
||
<para>
|
||
Примеры вызовов API, которые буферизуют наборы результатов на клиенте:
|
||
<simplelist type="inline">
|
||
<member><function>mysqli_stmt_store_result</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.ps-unbuffered-sets">
|
||
<term><literal>ps_unbuffered_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество небуферизованных наборов результатов, которые возвращают подготовленные запросы.
|
||
</simpara>
|
||
<simpara>
|
||
По умолчанию подготовленные запросы не буферизуются,
|
||
поэтому эта метрика учтёт большинство подготовленных запросов.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.flushed-normal-sets">
|
||
<term><literal>flushed_normal_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество результирующих наборов, которые возвращают обычные
|
||
неподготовленные запросы с непрочитанными данными,
|
||
которые были без предупреждения сброшены.
|
||
</simpara>
|
||
|
||
<note>
|
||
<simpara>
|
||
Модуль сбрасывает только небуферизованные наборы результатов.
|
||
</simpara>
|
||
<simpara>
|
||
Небуферизованные результирующие наборы должны быть полностью получены перед
|
||
выполнением нового запроса по соединению, иначе
|
||
MySQL-сервер выдаст ошибку. Если приложение не извлекает
|
||
все строки из небуферизованного результирующего набора, команда mysqlnd
|
||
неявно извлекает результирующий набор, чтобы очистить строку.
|
||
</simpara>
|
||
<simpara>
|
||
Смотрите также описание метрик <literal>rows_skipped_normal</literal>, <literal>rows_skipped_ps</literal>.
|
||
</simpara>
|
||
<para>
|
||
Некоторые причины неявного сброса:
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Ошибка клиентского приложения
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Клиент прекратил чтение данных, когда нашёл то, что искал,
|
||
но заставил MySQL-сервер вычислять больше записей, чем требуется
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Клиентское приложение неожиданно остановилось
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.flushed-ps-sets">
|
||
<term><literal>flushed_ps_sets</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество результирующих наборов с непрочитанными данными, которые вернули
|
||
подготовленные запросы и которые были без предупреждения сброшены.
|
||
</simpara>
|
||
|
||
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('mysqlnd.stats.statistics.flushed-normal-sets')/db:listitem/db:note)">
|
||
<xi:fallback/>
|
||
</xi:include>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.ps-prepared-never-executed">
|
||
<term><literal>ps_prepared_never_executed</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество запросов, которые подготовили, но не выполнили.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.ps-prepared-once-executed">
|
||
<term><literal>ps_prepared_once_executed</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Количество подготовленных запросов, которые выполнили только один раз.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-server-normal">
|
||
<term><literal>rows_fetched_from_server_normal</literal></term>
|
||
<term><literal>rows_fetched_from_server_ps</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк результирующего набора, которые вернул сервер.
|
||
Сюда входят строки, которые клиент не прочитал,
|
||
но неявно получил из-за сброшенных небуферизованных результирующих наборов.
|
||
</simpara>
|
||
<simpara>
|
||
Смотрите также описание метрики <literal>packets_received_rset_row</literal>.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-buffered-from-server-normal">
|
||
<term><literal>rows_buffered_from_client_normal</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество буферизованных строк, которые получили в результате обычного запроса.
|
||
</simpara>
|
||
<simpara>
|
||
Это количество строк, которые вернул MySQL-сервер и буферизовал клиент.
|
||
</simpara>
|
||
<para>
|
||
Примеры запросов, которые буферизуют результаты:
|
||
<simplelist>
|
||
<member><function>mysqli_query</function></member>
|
||
<member><function>mysqli_store_result</function></member>
|
||
</simplelist>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-buffered-from-server-ps">
|
||
<term><literal>rows_buffered_from_server_ps</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
То же, что и метрика <literal>rows_buffered_from_client_normal</literal>,
|
||
но для подготовленных запросов.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-client-normal-buffered">
|
||
<term><literal>rows_fetched_from_client_normal_buffered</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк, которые извлёк клиент из буферизованного результирующего набора,
|
||
который создал обычный запрос.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-client-ps-buffered">
|
||
<term><literal>rows_fetched_from_client_ps_buffered</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк, которые извлёк клиент из буферизованного результирующего набора,
|
||
который создал подготовленный запрос.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-client-normal-unbuffered">
|
||
<term><literal>rows_fetched_from_client_normal_unbuffered</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк, которые извлёк клиент из небуферизованного результирующего набора,
|
||
который создал обычный запрос.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-client-ps-unbuffered">
|
||
<term><literal>rows_fetched_from_client_ps_unbuffered</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк, которые извлёк клиент из небуферизованного результирующего набора,
|
||
который создал подготовленный запрос.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-fetched-from-client-ps-cursor">
|
||
<term><literal>rows_fetched_from_client_ps_cursor</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество строк, которые клиент извлёк из курсора,
|
||
который создал подготовленный запрос.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<!-- TODO: This seems to actually be supported, check and document -->
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.rows-skipped-normal">
|
||
<term><literal>rows_skipped_normal</literal></term>
|
||
<term><literal>rows_skipped_ps</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Метрику зарезервировали для будущих нужд (пока не поддерживается).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.copy-on-write">
|
||
<term><literal>copy_on_write_saved</literal></term>
|
||
<term><literal>copy_on_write_performed</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
При запуске команды mysqlnd переменные, которые возвращает модуль, указывают
|
||
на внутренние сетевые буферы результатов команды mysqlnd.
|
||
Если данные не изменяются, извлеченные данные сохраняются в памяти только один раз.
|
||
Однако для внесения изменений в данные потребуется, чтобы команда mysqlnd выполнила
|
||
операцию копирования при записи.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.free-result">
|
||
<term><literal>explicit_free_result</literal></term>
|
||
<term><literal>implicit_free_result</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня соединения и процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Общее количество высвобожденных результирующих наборов.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-null">
|
||
<term><literal>proto_text_fetched_null</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_NULL</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-null">
|
||
<term><literal>proto_binary_fetched_null</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_NULL</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-bit">
|
||
<term><literal>proto_text_fetched_bit</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_BIT</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-bit">
|
||
<term><literal>proto_binary_fetched_bit</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_BIT</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-tinyint">
|
||
<term><literal>proto_text_fetched_tinyint</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TINY</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-tinyint">
|
||
<term><literal>proto_binary_fetched_tinyint</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TINY</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-short">
|
||
<term><literal>proto_text_fetched_short</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_SHORT</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-short">
|
||
<term><literal>proto_binary_fetched_short</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_SHORT</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-int24">
|
||
<term><literal>proto_text_fetched_int24</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_INT24</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-int24">
|
||
<term><literal>proto_binary_fetched_int24</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_INT24</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-int">
|
||
<term><literal>proto_text_fetched_int</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_LONG</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-int">
|
||
<term><literal>proto_binary_fetched_int</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_LONG</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-bigint">
|
||
<term><literal>proto_text_fetched_bigint</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_LONGLONG</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-bigint">
|
||
<term><literal>proto_binary_fetched_bigint</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_LONGLONG</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-decimal">
|
||
<term><literal>proto_text_fetched_decimal</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DECIMAL</literal> или <literal>MYSQL_TYPE_NEWDECIMAL</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-decimal">
|
||
<term><literal>proto_binary_fetched_decimal</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DECIMAL</literal> или <literal>MYSQL_TYPE_NEWDECIMAL</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-float">
|
||
<term><literal>proto_text_fetched_float</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_FLOAT</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-float">
|
||
<term><literal>proto_binary_fetched_float</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_FLOAT</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-double">
|
||
<term><literal>proto_text_fetched_double</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DOUBLE</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-double">
|
||
<term><literal>proto_binary_fetched_double</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DOUBLE</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-date">
|
||
<term><literal>proto_text_fetched_date</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DATE</literal> или <literal>MYSQL_TYPE_NEWDATE</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-date">
|
||
<term><literal>proto_binary_fetched_date</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DATE</literal> или <literal>MYSQL_TYPE_NEWDATE</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-year">
|
||
<term><literal>proto_text_fetched_year</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_YEAR</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-year">
|
||
<term><literal>proto_binary_fetched_year</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_YEAR</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-time">
|
||
<term><literal>proto_text_fetched_time</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TIME</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-time">
|
||
<term><literal>proto_binary_fetched_time</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TIME</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-datetime">
|
||
<term><literal>proto_text_fetched_datetime</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DATETIME</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-datetime">
|
||
<term><literal>proto_binary_fetched_datetime</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_DATETIME</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-timestamp">
|
||
<term><literal>proto_text_fetched_timestamp</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TIMESTAMP</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-timestamp">
|
||
<term><literal>proto_binary_fetched_timestamp</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TIMESTAMP</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-string">
|
||
<term><literal>proto_text_fetched_string</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_STRING</literal>, <literal>MYSQL_TYPE_VARSTRING</literal> или <literal>MYSQL_TYPE_VARCHAR</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-string">
|
||
<term><literal>proto_binary_fetched_string</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_STRING</literal>, <literal>MYSQL_TYPE_VARSTRING</literal> или <literal>MYSQL_TYPE_VARCHAR</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-blob">
|
||
<term><literal>proto_text_fetched_blob</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TINY_BLOB</literal>,
|
||
<literal>MYSQL_TYPE_MEDIUM_BLOB</literal>,
|
||
<literal>MYSQL_TYPE_LONG_BLOB</literal>
|
||
или <literal>MYSQL_TYPE_BLOB</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-blob">
|
||
<term><literal>proto_binary_fetched_blob</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_TINY_BLOB</literal>,
|
||
<literal>MYSQL_TYPE_MEDIUM_BLOB</literal>,
|
||
<literal>MYSQL_TYPE_LONG_BLOB</literal>
|
||
или <literal>MYSQL_TYPE_BLOB</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-enum">
|
||
<term><literal>proto_text_fetched_enum</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_ENUM</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-enum">
|
||
<term><literal>proto_binary_fetched_enum</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_ENUM</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-set">
|
||
<term><literal>proto_text_fetched_set</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_SET</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-set">
|
||
<term><literal>proto_binary_fetched_set</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_SET</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-geometry">
|
||
<term><literal>proto_text_fetched_geometry</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_GEOMETRY</literal>,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-geometry">
|
||
<term><literal>proto_binary_fetched_geometry</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_GEOMETRY</literal>,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-text-fetched-other">
|
||
<term><literal>proto_text_fetched_other</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типов
|
||
<literal>MYSQL_TYPE_<replaceable>*</replaceable></literal>,
|
||
не перечисленных ранее,
|
||
которые модуль извлёк из обычного запроса (текстовый протокол MySQL-сервера).
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Теоретически значение всегда должно равняться <literal>0</literal>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.proto-binary-fetched-other">
|
||
<term><literal>proto_binary_fetched_other</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество столбцов типа
|
||
<literal>MYSQL_TYPE_<replaceable>*</replaceable></literal>,
|
||
не включённых ранее,
|
||
которые модуль получил из подготовленного запроса (двоичный протокол MySQL-сервера).
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Теоретически, значение всегда должно равняться <literal>0</literal>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
<variablelist>
|
||
<title>Статистические данные соединения</title>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.connect-success">
|
||
<term><literal>connect_success</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество успешных попыток подключения.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
<literal>connect_success</literal> содержит сумму
|
||
успешных постоянных и непостоянных попыток подключения.
|
||
Следовательно, количество успешных попыток непостоянного подключения равно
|
||
разности <literal>connect_success - pconnect_success</literal>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.pconnect-success">
|
||
<term><literal>pconnect_success</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество успешных попыток постоянного подключения.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.connect-failure">
|
||
<term><literal>connect_failure</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество неудачных попыток подключения.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.reconnect">
|
||
<term><literal>reconnect</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.active-connections">
|
||
<term><literal>active_connections</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Общее количество активных постоянных и непостоянных подключений.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Общее количество активных непостоянных соединений равно
|
||
разности <literal>active_connections - active_persistent_connections</literal>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.active-persistent-connections">
|
||
<term><literal>active_persistent_connections</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Общее количество активных постоянных соединений.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.explicit-close">
|
||
<term><literal>explicit_close</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество явно закрытых соединений.
|
||
</simpara>
|
||
<example>
|
||
<title>Примеры фрагментов кода, которые вызывают явное закрытие</title>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<programlisting>
|
||
<![CDATA[
|
||
$link = new mysqli(/* ... */);
|
||
$link->close(/* ... */);
|
||
]]>
|
||
</programlisting>
|
||
</listitem>
|
||
<listitem>
|
||
<programlisting>
|
||
<![CDATA[
|
||
$link = new mysqli(/* ... */);
|
||
$link->connect(/* ... */);
|
||
]]>
|
||
</programlisting>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</example>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.implicit-close">
|
||
<term><literal>implicit_close</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество неявно закрытых соединений.
|
||
</simpara>
|
||
<example>
|
||
<title>Примеры фрагментов кода, которые вызывают неявное закрытие</title>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<programlisting>
|
||
<![CDATA[
|
||
$link = new mysqli(/* ... */);
|
||
$link->real_connect(/* ... */);
|
||
]]>
|
||
</programlisting>
|
||
</listitem>
|
||
<listitem>
|
||
<programlisting>
|
||
<code>unset($link)</code>
|
||
</programlisting>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Постоянное соединение: объединенное соединение создали методом
|
||
real_connect, и, возможно, установили неизвестный набор опций, — закрывается
|
||
неявно, чтобы избежать возврата соединения с неизвестными параметрами
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Persistent connection: ping/change_user завершается неудачно, а ext/mysqli
|
||
закрывает соединение
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Окончание работы скрипта: закрываются соединения,
|
||
которые пользователь не закрыл явно
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</example>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.disconnect-close">
|
||
<term><literal>disconnect_close</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Сбои подключения, на которые указывает вызов метода API-интерфейса языка C
|
||
<literal>mysql_real_connect</literal> при попытке
|
||
установить соединение.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.in-middle-of-command-close">
|
||
<term><literal>in_middle_of_command_close</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Соединение прервалось в середине выполнения команды
|
||
(не были получены выдающиеся результирующие наборы после отправки запроса
|
||
и до получения ответа, во время получения данных, во время
|
||
передачи данных через LOAD DATA).
|
||
</simpara>
|
||
<warning>
|
||
<simpara>
|
||
Если не выполняются асинхронные запросы,
|
||
это должно произойти, только если PHP-приложение неожиданно завершилось,
|
||
и PHP автоматически закрывает соединение.
|
||
</simpara>
|
||
</warning>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.init-command-executed-count">
|
||
<term><literal>init_command_executed_count</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество выполнений команды инициализации.
|
||
Например: <code>mysqli_options(MYSQLI_INIT_COMMAND , $value)</code>.
|
||
</simpara>
|
||
<simpara>
|
||
Количество успешных запусков — разность
|
||
<literal>init_command_executed_count - init_command_failed_count</literal>.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.init-command-failed-count">
|
||
<term><literal>init_command_failed_count</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество неудачных команд инициализации.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<variablelist>
|
||
<title><literal>Статистика команд COM_*</literal></title>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.com">
|
||
<term><literal>com_quit</literal></term>
|
||
<term><literal>com_init_db</literal></term>
|
||
<term><literal>com_query</literal></term>
|
||
<term><literal>com_field_list</literal></term>
|
||
<term><literal>com_create_db</literal></term>
|
||
<term><literal>com_drop_db</literal></term>
|
||
<term><literal>com_refresh</literal></term>
|
||
<term><literal>com_shutdown</literal></term>
|
||
<term><literal>com_statistics</literal></term>
|
||
<term><literal>com_process_info</literal></term>
|
||
<term><literal>com_connect</literal></term>
|
||
<term><literal>com_process_kill</literal></term>
|
||
<term><literal>com_debug</literal></term>
|
||
<term><literal>com_ping</literal></term>
|
||
<term><literal>com_time</literal></term>
|
||
<term><literal>com_delayed_insert</literal></term>
|
||
<term><literal>com_change_user</literal></term>
|
||
<term><literal>com_binlog_dump</literal></term>
|
||
<term><literal>com_table_dump</literal></term>
|
||
<term><literal>com_connect_out</literal></term>
|
||
<term><literal>com_register_slave</literal></term>
|
||
<term><literal>com_stmt_prepare</literal></term>
|
||
<term><literal>com_stmt_execute</literal></term>
|
||
<term><literal>com_stmt_send_long_data</literal></term>
|
||
<term><literal>com_stmt_close</literal></term>
|
||
<term><literal>com_stmt_reset</literal></term>
|
||
<term><literal>com_stmt_set_option</literal></term>
|
||
<term><literal>com_stmt_fetch</literal></term>
|
||
<term><literal>com_daemon</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество попыток PHP отправить конкретную команду <literal>COM_*</literal>
|
||
на MySQL-сервер.
|
||
</simpara>
|
||
<simpara>
|
||
Значение метрики увеличивается после проверки строки и сразу
|
||
перед отправкой соответствующего пакета клиент-серверного протокола MySQL.
|
||
</simpara>
|
||
<caution>
|
||
<simpara>
|
||
Если драйвер MySQLnd не сможет отправить пакет по сети, значение метрики не будет уменьшаться.
|
||
При сбое драйвер MySQLnd выдаёт PHP-предупреждение
|
||
<quote>Error while sending %s packet. PID=%d.</quote>
|
||
</simpara>
|
||
</caution>
|
||
|
||
<example>
|
||
<title>Примеры использования</title>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>
|
||
Проверьте, отправляет ли PHP конкретные команды на MySQL-сервер, например:
|
||
проверьте, отправляет ли клиент команду <literal>COM_PROCESS_KILL</literal>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Вычислите среднее количество выполнений подготовленных операторов
|
||
путём сравнения команду <literal>COM_EXECUTE</literal>
|
||
с командой <literal>COM_PREPARE</literal>
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Выясните, не запускал ли PHP неподготовленные SQL-запросы
|
||
путём проверки, равно ли значение команды <literal>COM_QUERY</literal> нулю
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Определите PHP-скрипты, которые запускают чрезмерное количество SQL-запросов
|
||
путём проверки команд <literal>COM_QUERY</literal>
|
||
и <literal>COM_EXECUTE</literal>
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</example>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
|
||
<variablelist>
|
||
<title>Прочие статистические данные</title>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.stmt-close">
|
||
<term><literal>explicit_stmt_close</literal></term>
|
||
<term><literal>implicit_stmt_close</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Общее количество закрытых подготовленных заявлений.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Подготовленный запрос всегда явно закрыт. Единственный раз, когда он закрывается неявно, — когда подготовка не удалась.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.memory-management">
|
||
<term><literal>mem_emalloc_count</literal></term>
|
||
<term><literal>mem_emalloc_ammount</literal></term>
|
||
<term><literal>mem_ecalloc_count</literal></term>
|
||
<term><literal>mem_ecalloc_ammount</literal></term>
|
||
<term><literal>mem_realloc_count</literal></term>
|
||
<term><literal>mem_realloc_ammount</literal></term>
|
||
<term><literal>mem_efree_count</literal></term>
|
||
<term><literal>mem_malloc_count</literal></term>
|
||
<term><literal>mem_malloc_ammount</literal></term>
|
||
<term><literal>mem_calloc_count</literal></term>
|
||
<term><literal>mem_calloc_ammount</literal></term>
|
||
<term><literal>mem_ealloc_count</literal></term>
|
||
<term><literal>mem_ealloc_ammount</literal></term>
|
||
<term><literal>mem_free_count</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Это статистика уровня процесса.
|
||
</simpara>
|
||
<simpara>
|
||
Вызовы управления памятью.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.command-buffer-too-small">
|
||
<term><literal>command_buffer_too_small</literal></term>
|
||
<!-- TODO: XInclude/sync description of INI setting
|
||
ini.mysqlnd.net-cmd-buffer-size with this statistic -->
|
||
<listitem>
|
||
<simpara>
|
||
Количество модулей сетевого буфера команд при отправке команд из PHP на сервер MySQL.
|
||
</simpara>
|
||
<simpara>
|
||
Драйвер mysqlnd выделяет для каждого подключения внутренний командный или сетевой буфер,
|
||
размер которого задали в байтах в опции конфигурации
|
||
<link linkend="ini.mysqlnd.net-cmd-buffer-size">mysqlnd.net_cmd_buffer_size</link>.
|
||
</simpara>
|
||
<simpara>
|
||
Драйвер MySQLnd увеличит размер буфера до размера,
|
||
который требуется для отправки команды,
|
||
если команда протокола MySQL Client Server наподобие <literal>COM_QUERY</literal>
|
||
(обычный запрос) не помещается в буфер.
|
||
Каждый раз при расширении буфера для одного соединения
|
||
метрика <literal>command_buffer_too_small</literal> увеличивается на единицу.
|
||
</simpara>
|
||
<simpara>
|
||
Если драйверу MySQLnd приходится увеличивать размер буфера сверх первоначального размера,
|
||
который задали в байтах в опции <link linkend="ini.mysqlnd.net-cmd-buffer-size">mysqlnd.net_cmd_buffer_size</link>,
|
||
почти для каждого соединения,
|
||
размер по умолчанию для буфера увеличивают, чтобы избежать перераспределения памяти.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry xml:id="mysqlnd.stats.statistics.connection-reused">
|
||
<term><literal>connection_reused</literal></term>
|
||
<listitem>
|
||
<simpara>
|
||
Общее количество переиспользований постоянного соединения.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</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
|
||
-->
|