W3docs

Исчерпывающее руководство по функции mysqli_stat в PHP

Узнайте, как использовать mysqli_stat в PHP для получения статуса MySQL-сервера, разбора строки и мониторинга соединения.

При работе с базами данных MySQL в PHP расширение mysqli предоставляет множество функций для взаимодействия с сервером. mysqli_stat — одна из простейших для проверки состояния: она запрашивает у MySQL-сервера одну строку с текущим статусом — время работы, количество выполненных запросов, число открытых потоков и так далее.

В этом руководстве объясняется, что возвращает mysqli_stat, как вызвать её в процедурном и объектно-ориентированном стилях, как преобразовать сырые данные в пригодные для использования числа и каких распространённых подводных камней следует избегать.

mysqli_stat — это не функция файловой системы stat(). Если вам нужны метаданные файла (размер, права доступа, inode), обратитесь к stat в PHP и fstat.

Что делает mysqli_stat

mysqli_stat — это встроенная функция, возвращающая текущий статус MySQL-сервера в виде одной строки, разделённой пробелами. Это PHP-эквивалент команды mysqladmin status в командной строке — быстрый снимок состояния, а не полный дамп производительности.

Типичное возвращаемое значение выглядит так:

Uptime: 272701  Threads: 1  Questions: 18  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 5  Queries per second avg: 0.000

Значение полей:

ПолеОписание
UptimeСекунды работы сервера
ThreadsТекущие открытые клиентские соединения
QuestionsОператоры, выполненные с момента запуска
Slow queriesЗапросы, превысившие long_query_time
OpensТаблицы, открытые сервером
Open tablesТаблицы, открытые в данный момент
Queries per second avgСредняя пропускная способность запросов

Синтаксис

// Procedural style
mysqli_stat(mysqli $connection): string|false

// Object-oriented style
$connection->stat(): string|false

Функция принимает ссылку на соединение, возвращённую mysqli_connect (процедурный стиль), или объект mysqli (ООП), и возвращает строку статуса в случае успеха или false при ошибке (например, когда соединение было потеряно).

Базовое использование

Процедурный стиль

Сначала установите соединение, затем считайте статус. Всегда обрабатывайте возврат false как ошибку.

<?php

$connection = mysqli_connect('localhost', 'username', 'password', 'mydatabase');

if (!$connection) {
    die('Connection failed: ' . mysqli_connect_error());
}

$status = mysqli_stat($connection);

if ($status === false) {
    echo 'Error: ' . mysqli_error($connection);
} else {
    echo $status;
}

Объектно-ориентированный стиль

Тот же вызов в виде метода объекта mysqli:

<?php

$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');

if ($mysqli->connect_errno) {
    die('Connection failed: ' . $mysqli->connect_error);
}

echo $mysqli->stat();

Разбор статуса на числа

Сырая строка подходит для логирования, но для мониторинга обычно нужны отдельные значения. Каждое поле имеет вид Name: value, разделённый двумя пробелами, поэтому строку можно разбить на карту «ключ/значение»:

<?php

function parseMysqlStat(string $status): array
{
    $result = [];

    foreach (explode('  ', $status) as $pair) {
        // Each pair looks like "Uptime: 272701"
        [$key, $value] = array_map('trim', explode(':', $pair, 2));
        $result[$key] = $value;
    }

    return $result;
}

$status = 'Uptime: 272701  Threads: 1  Questions: 18  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 5  Queries per second avg: 0.000';

$stats = parseMysqlStat($status);

echo 'Uptime in seconds: ' . $stats['Uptime'] . PHP_EOL;
echo 'Active threads: ' . $stats['Threads'] . PHP_EOL;
echo 'Slow queries: ' . $stats['Slow queries'] . PHP_EOL;

Вывод:

Uptime in seconds: 272701
Active threads: 1
Slow queries: 0

Теперь $stats['Uptime'] и $stats['Slow queries'] легко использовать для установки порогов, оповещений или построения графиков.

Распространённые сценарии использования

  • Проверка работоспособности. Вызывайте mysqli_stat в эндпоинте проверки состояния; если возвращается false, база данных недоступна.
  • Лёгкий мониторинг. Периодически считывайте Threads и Queries per second avg, чтобы выявить всплески нагрузки.
  • Обнаружение медленных запросов. Рост счётчика Slow queries — ранний сигнал об отсутствии нужного индекса.

Подводные камни

  • Возвращает строку, а не массив. var_dump результата показывает одну строку. Разбирайте её самостоятельно (см. выше), прежде чем выполнять математические операции над значениями.
  • Проверяйте false, а не пустую строку. При обрыве соединения функция возвращает логическое false. Используйте строгое сравнение (=== false), чтобы не перепутать его с пустой строкой.
  • Это снимок, а не история. Такие значения, как Questions, являются накопленными с момента запуска сервера; для измерения скорости нужно сделать два замера и вычесть.
  • Требуется действительное соединение. Если соединение не было установлено, вызов mysqli_stat выдаст предупреждение или ошибку. Всегда проверяйте соединение заранее — см. mysqli_connect_error.

Связанные функции

  • mysqli_connect — открыть соединение, которое необходимо для mysqli_stat.
  • mysqli_get_server_info — строка версии сервера.
  • mysqli_ping — проверить (и при необходимости восстановить) соединение.

Заключение

mysqli_stat — небольшой, но практичный инструмент для мониторинга MySQL-сервера из PHP. Она возвращает единственную строку статуса с показателями времени работы, потоков и запросов. Проверяйте результат на false, чтобы обнаружить потерянное соединение, и разбирайте строку в карту «ключ/значение», когда нужны отдельные числа для проверок работоспособности или дашбордов.

Практика

Практика
Что возвращает mysqli_stat() в PHP?
Что возвращает mysqli_stat() в PHP?
Was this page helpful?