Исчерпывающее руководство по функции 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, чтобы обнаружить потерянное соединение, и разбирайте строку в карту «ключ/значение», когда нужны отдельные числа для проверок работоспособности или дашбордов.