Статистика
Використання статистичних даних
MySQL Native Driver підтримує збір статистики щодо взаємодії клієнта із сервером. Статистика збирається з двох основних точок:
-
Клієнтська статистика
-
Статистика з'єднання
Якщо ви використовуєте модуль mysqli
, ця статистика доступна за допомогою двох функцій, що звертаються до API:
Зауваження :
Статистика агрегується з усіх модулів, які використовують MySQL Native Driver. Наприклад, якщо підключити та
ext/mysql
иext/mysqli
через MySQL Native Driver, як виклики функційext/mysql
так иext/mysqli
буде внесено до загальної статистики. Можливість поділу статистики в залежності від використаного модуля відсутня. Ви можете налаштувати драйвера PDO MySQL,ext/mysql
иext/mysqli
для опціонального використання MySQL Native Driver При цьому всі три модулі змінюватимуть статистику.
Доступ до клієнтської статистики
Для отримання клієнтської статистики потрібно виконати функцію mysqli_get_client_stats(). Функція викликається без установок.
Функція повертає асоціативний масив, що використовує як ключі назви метрик статистики і як значення цих метрик, власне, значення.
Також клієнтська статистика доступна за допомогою функції phpinfo()
Доступ до статистики з'єднання
Щоб отримати статистику з'єднання, виконайте функцію mysqli_get_connection_stats(), передавши як параметр ресурс з'єднання.
Функція повертає асоціативний масив, що використовує як ключі назви метрик статистики і як значення цих метрик, власне, значення.
Буферизовані та небуферизовані результуючі набори
Результуючі набори можуть бути буферизовані та небуферизовані. При використанні стандартних налаштувань, ext/mysql
иext/mysqli
працюють із буферизованими результуючими наборами під час використання нормальних (не підготовлених) запитів. Буферизовані результуючі набори кешуються на стороні клієнта. Після виконання запиту всі результати передаються на клієнта, де зберігаються в кеші. Перевага буферизованих запитів у тому, що відразу вивільняються серверні ресурси, пов'язані зі зберіганням результуючого набору.
Небуферизовані результуючі набори, з іншого боку, зберігаються на сервері набагато довше. Якщо ви хочете скоротити споживання пам'яті на клієнті, але при цьому навантажити сервер, використовуйте небуферизовані результуючі набори. Якщо вузьким місцем у вашій системі є сервер баз даних, то варто задуматися про якнайшвидше переміщення результатів на клієнта. Зазвичай клієнти масштабуються набагато легше, ніж сервер БД. Навантаження лягає не тільки на пам'ять, але й на інші ресурси, які повинна підтримувати база даних для обслуговування з'єднання, такі як відкриті файлові дескриптори та нитки виконання.
Підготовлені запити за замовчуванням використовують небуферизовані результуючі набори. У будь-якому випадку ви можете використовувати функцію mysqli_stmt_store_result()для буферизации результатов.
Статистика MySQL Native Driver, що повертається
Наступна таблиця демонструє список функцій, що повертаються. mysqli_get_client_stats() і mysqli_get_connection_stats()статистики.
Статистика mysqlnd: Мережа
Метрика | Область применения | Опис | Замечания |
---|---|---|---|
bytes_sent | З'єднання | Кількість байт, переданих від PHP на сервер MySQL | Може використовуватись для перевірки ефективності протоколу стиснення |
bytes_received | З'єднання | Кількість байт, отриманих від сервера MySQL | Може використовуватись для перевірки ефективності протоколу стиснення |
packets_sent | З'єднання | Кількість пакетів надісланих від клієнта серверу MySQL | Використовується для налагодження реалізації клієнт-серверного протоколу |
packets_received | З'єднання | Кількість пакетів, прийнятих клієнтом від сервера MySQL | Використовується для налагодження реалізації клієнт-серверного протоколу |
protocol_overhead_in | З'єднання | накладні витрати клієнт-серверного протоколу MySQL у байтах для вхідного трафіку. на даний момент тільки заголовок пакета (4 байти) вважається накладними витратами. protocol_overhead_in = packets_received * 4 | Використовується для налагодження реалізації клієнт-серверного протоколу |
protocol_overhead_out | З'єднання | MySQL Client Server protocol overhead in bytes for outgoing traffic. Currently only the Packet Header (4 bytes) is considered as overhead. protocol_overhead_out = packets_sent * 4 | Використовується для налагодження реалізації клієнт-серверного протоколу |
bytes_received_ok_packet | З'єднання | Загальна кількість байт прийнятих ОК пакетів клієнт-серверного протоколу MySQL. OK-пакети можуть містити статусні повідомлення. Довжина статусних повідомлень може змінюватися, отже, розмір ОК-пакетів не фіксована. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_ok | З'єднання | Кількість прийнятих OK-пакетів | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_eof_packet | З'єднання | Загальна кількість байт прийнятих пакетів EOF. Розмір пакета EOF може змінюватись в залежності від версії сервера. Також EOF-пакети можуть використовуватися як транспорт для повідомлень про помилки. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_eof | З'єднання | Кількість прийнятих пакетів EOF. Як і для іншої статистики пакетів, це число може збільшуватися кожного разу, коли PHP не отримує очікуваний пакет, а, наприклад, отримує повідомлення про помилку. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_rset_header_packet | З'єднання | Загальна кількість байт прийнятих заголовних пакетів результуючих наборів. Розмір пакетів залежить від корисного навантаження (LOAD LOCAL INFILE INSERT UPDATE SELECT , повідомлення про помилку). | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_rset_header | З'єднання | Кількість пакетів заголовків результуючих наборів. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_rset_field_meta_packet | З'єднання | Загальний розмір у байтах отриманих пакетів із метаданими результуючих наборів (інформації про стовпці). Звичайно розмір кожного пакета індивідуальний. Ці пакети можуть бути транспортом для помилок і EOF-пакетів у разі COM_LIST_FIELDS. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_rset_field_meta | З'єднання | Загальна кількість отриманих пакетів із метаданими результуючих наборів (інформації про стовпці). | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_rset_row_packet | З'єднання | Загальний розмір у байтах одержаних пакетів з даними результуючого набору. Ці пакети можуть бути транспортом для помилок і як EOF-пакетів. Ви можете обчислити кількість помилок і EOF-пакетів забравши rows_fetched_from_server_normal иrows_fetched_from_server_ps отbytes_received_rset_row_packet | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_rset_row | З'єднання | Кількість пакетів із даними результуючих наборів та їх сумарний обсяг у байтах. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_prepare_response_packet | З'єднання | Загальний розмір байтів ОК-пакетів ініціалізації підготовлених запитів. (Ініціалізують пакети підготовлених запитів). Ці пакети можуть бути транспортом для помилок. Розмір пакета залежить від версії Mysql: 9 байт для MySQL4.1 та 12 байт починаючи з 5.0. Немає надійного способу дізнатися про кількість помилок. Ви можете визначити, що трапилася помилка, якщо, наприклад, ви працюєте з MySQL 5.0 або новіше, а bytes_received_prepare_response_packet != packets_received_prepare_response * 12. Також дивіться ps_prepared_never_executed ps_prepared_once_executed | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_prepare_response | З'єднання | Кількість одержаних ОК-пакетів для ініціалізації підготовлених запитів. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
bytes_received_change_user_packet | З'єднання | Загальний розмір у байтах отриманих пакетів COM_CHANGE_USER. Пакети можуть бути транспортом для помилок і EOF-пакетів. | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_received_change_user | З'єднання | Кількість прийнятих пакетів COM_CHANGE_USER | Використовується для налагодження реалізації клієнт-серверного протоколу. Зверніть увагу, що загальний розмір включає заголовний пакет, розміром 4 байти. |
packets_sent_command | З'єднання | Кількість команд надісланих від PHP серверу MySQL. Можливість дізнатися, які конкретно та в яких кількостях надсилалися команди відсутня. Найкраще, для чого ви можете використовувати цю метрику, це перевіряти, що посилає команди серверу MySQL та підтримка MySQL у PHP не заборонена. Також немає можливості визначити кількість помилок, що виникли під час відправлення цих команд. Єдина впізнавана помилка – це command_buffer_too_small (дивіться нижче). | Використовується для налагодження реалізації клієнт-серверного протоколу |
bytes_received_real_data_normal | З'єднання | Кількість байт корисного навантаження витягнутого клієнтом PHP з mysqlnd із використанням текстового протоколу. | Це актуальний розмір даних, що містяться в результуючому наборі, які клієнт PHP вже завантажив. Зверніть увагу, що хоч можливо mysqlnd забрав і повний результуючий набір з сервера MySQL, але в цій метриці враховуються лише дані, вже отримані клієнтом PHP від mysqlnd . . Наприклад, наступний код збільшить значення метрики: |
$mysqli = new mysqli();
$res = $mysqli->query("SELECT 'abc'");
$res->fetch_assoc();
$res->close();
Кожна операція вилучення збільшує це число.
Статистика не зміниться, якщо результуючий набір був буферизований, але не витягнутий, як у цьому прикладі:
$mysqli = new mysqli();
$res = $mysqli->query("SELECT 'abc'");
$res->close();
bytes_received_real_data_ps
| Поєднання | Кількість байт корисного навантаження, витягнутого клієнтом PHP з mysqlnd
використовуючи підготовлені запити. | Це розмір лише тих даних, які витягнули клієнт PHP. Значення метрики не збільшуватиметься якщо клієнт PHP не буде запитувати ці дані. Зверніть увагу, що хоч можливо mysqlnd
забрав і повний результуючий набір з сервера MySQL, але в цій метриці враховуються лише дані, вже отримані клієнтом PHP від mysqlnd
Также смотритеbytes_received_real_data_normal
.
Результуючий набір
Статистика mysqlnd: результуючий набір
Метрика | Область применения | Опис | Замечания |
---|---|---|---|
result_set_queries | З'єднання | Кількість запитів, за якими було створено результуючий набір. Приклад запитів, що створюють результуючий набір: SELECT SHOW . . Статистика не збільшуватиметься у разі виникнення помилки читання заголовного пакета результуючого набору. | Ви можете використовувати цю метрику як опосередкований лічильник виконаних запитів, наприклад, для виявлення клієнта, що створює велике навантаження на БД. |
non_result_set_queries | З'єднання | Кількість запитів, за якими не створено результуючий набір. Приклад запитів, що не створюють результуючого набору: INSERT UPDATE LOAD DATA . . Статистика не збільшуватиметься у разі виникнення помилки читання заголовного пакета результуючого набору. | Ви можете використовувати цю метрику як опосередкований лічильник виконаних запитів, наприклад, для виявлення клієнта, що створює велике навантаження на БД. |
no_index_used | З'єднання | Кількість запитів, що створюють результуючий набір, але не використовували індекси (також дивіться опцію запуску mysqld-log-queries-not-using-indexes). Якщо ви бажаєте отримувати звіти про подібні запити, ви можете використовувати mysqli_report(MYSQLI_REPORT_INDEX) для того, щоб ext/mysqli викидав виняток. Якщо ви віддаєте перевагу просто попередження, використовуйте mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT). | |
bad_index_used | З'єднання | Кількість запитів, що створюють результуючий набір, але не використовували хороші індекси (дивіться також опцію запуску mysqld –log-slow-queries). | Якщо ви бажаєте отримувати звіти про подібні запити, ви можете використовувати mysqli_report(MYSQLI_REPORT_INDEX)для того, щоб ext/mysqli викидав виняток. Якщо ви віддаєте перевагу просто попередження, використовуйте mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT) |
slow_queries | З'єднання | SQL-запити, що виконувались довше long_query_time секунд і перебору, що зажадали, більш ніж min_examined_row_limit рядків. | Не вилучається за допомогою mysqli_report() |
buffered_sets | З'єднання | Кількість буферизованих результуючих наборів, повернутих нормальними запитами. Нормальні, тут і далі не підготовлені. | Приклади викликів API, які буферизують результуючий набір на клієнта: mysql_query()mysqli_query()mysqli_store_result()mysqli_stmt_get_result(). . Буферизація результуючого набору на клієнті гарантує, що серверні ресурси будуть звільнені так швидко, як можливо, і робить позиціонування простішим. Погана новина в тому, що це буде варто додаткової витрати пам'яті клієнта. Зауважте, що mysqlnd (на відміну від клієнтської бібліотеки MySQL) залежить від обмежень PHP на згадку, оскільки використовує внутрішній менеджер пам'яті PHP. Це є однією з причин, чому memory_get_usage() при використанні mysqlnd показує більше значення, ніж при використанні клієнтської бібліотеки MySQL. . memory_get_usage() не заміряє споживання пам'яті клієнтською бібліотекою MySQL, оскільки не використовує внутрішній менеджер пам'яті PHP. |
unbuffered_sets | З'єднання | Кількість небуферизованих результуючих наборів, повернутих нормальними (не підготовленими) запитами. | Приклади викликів API, які не буферизують результуючий набір на клієнта: mysqli_use_result() |
ps_buffered_sets | З'єднання | Кількість буферизованих результуючих наборів, повернутих підготовленими запитами. За замовчуванням підготовлені запити не буферизуються. | Приклади викликів API, які буферизують результуючий набір на клієнта: mysqli_stmt_store_result |
ps_unbuffered_sets | З'єднання | Кількість небуферизованих результуючих наборів, повернутих підготовленими запитами. | За замовчуванням підготовлені запити не буферизуються. |
flushed_normal_sets | З'єднання | Кількість результуючих наборів, повернутих нормальними (не підготовленими) запитами з непрочитаними даними, які були обнулені прозоро для вас. Подібне відбувається лише з небуферизованими результуючими наборами. | Небуферизовані результуючі набори повинні бути повністю вилучені, перш ніж буде можливо запустити новий запит у тому ж з'єднанні з MySQL, інакше буде помилка. Якщо програма не витягла всі рядки небуферизованого результуючого набору, mysqlnd примусово витягне його, щоб звільнити ресурси сервера. Також дивіться rows_skipped_normal иrows_skipped_ps . Можливі причини, що ведуть до примусового обнулення: |
-
Помилка клієнтської програми
-
Клієнт перестав отримувати записи, оскільки знайшов, що шукав, але результуючий набір не був витягнутий остаточно
-
Аварійне завершення клієнтської програми
flushed_ps_sets
| Поєднання | Кількість результуючих наборів, повернутих підготовленими запитами з непрочитаними даними, які були обнулені прозоро для вас. Подібне відбувається лише з небуферизованими результуючими наборами. | Небуферизовані результуючі набори повинні бути повністю вилучені, перш ніж буде можливо запустити новий запит у тому ж з'єднанні з MySQL, інакше буде помилка. Якщо програма не витягла всі рядки небуферизованого результуючого набору, mysqlnd примусово витягне його, щоб звільнити ресурси сервера. Також дивіться rows_skipped_normal
иrows_skipped_ps
. Можливі причини, що ведуть до примусового обнулення:
-
Помилка клієнтської програми
-
Клієнт перестав отримувати записи, оскільки знайшов, що шукав, але результуючий набір не був витягнутий остаточно
-
Аварійне завершення клієнтської програми
ps_prepared_never_executed
| Поєднання | Кількість підготовлених, але з запущених запитів. | Підготовлені запити споживають серверні ресурси. Ви не повинні готувати запити, якщо не запускатимете їх. | | ps_prepared_once_executed
| Поєднання | Кількість підготовлених запитів, запущених лише один раз. | Головна ідея підготовлених запитів у тому, що той самий запит буде запускатися кілька разів, але, можливо, з іншими параметрами. Це дозволяє заощадити на підготовці запитів, дозволяючи зробити розбір запиту лише один раз, а потім просто підставляти параметри і запускати. При підготовці запиту відбувається кешування результату, наприклад, можна багаторазово використовувати дерево розбору, створене один раз на етапі підготовки. Якщо ж ви запускаєте підготовлений запит лише один раз, то жодного виграшу порівняно з нормальними запитами не буде, навіть навпаки, будуть додаткові витрати на кешування підготовленого запиту. Таким чином, підготовлені запити, які використовуються лише один раз, ведуть до погіршення продуктивності. | | rows_fetched_from_server_normal
rows_fetched_from_server_ps
| Поєднання | Загальна кількість успішно вилучених рядків з бази MySQL незалежно від того, використані вони були додатком чи ні. Частина рядків можуть не вилучатись додатком, але при цьому примусово обнулятися. | Також дивіться packets_received_rset_row
rows_buffered_from_client_normal
rows_buffered_from_client_ps
| Поєднання | Загальна кількість успішно буферизованих рядків, отриманих під час виконання "нормальних" запитів. Це кількість рядків, витягнутих з MySQL та буферизованих на клієнті. Зверніть увагу, що існує дві незалежні метрики для буферизованих рядків і (переданих від MySQL до буферу mysqlnd) і рядків, прочитаних додатком (переданих з буфера mysqlnd клієнтської програми). Якщо кількість буферизованих рядків більше, ніж кількість витягнутих клієнтом, варто звернути увагу до клієнтські запити, оскільки вони отримують більше даних, ніж їм насправді потрібно. | Приклад запитів, що буферизують результуючі набори: mysqli_query() mysqli_store_result() rows_fetched_from_client_normal_buffered
rows_fetched_from_client_ps_buffered
| Поєднання | Загальна кількість витягнутих клієнтів рядків із буферизованих результуючих наборів для будь-якого типу запитів. | | | rows_fetched_from_client_normal_unbuffered
rows_fetched_from_client_ps_unbuffered
| Поєднання | Total number of rows fetched by the client from unbuffered result set created by "normal" query or prepared statement. | | | rows_fetched_from_client_ps_cursor
| Поєднання | Загальна кількість витягнутих клієнтів рядків із небуферизованих результуючих наборів для будь-якого типу запитів. | | | rows_skipped_normal
rows_skipped_ps
| Поєднання | Зарезервовано для використання у майбутньому і на даний момент не підтримується | | | copy_on_write_saved
copy_on_write_performed
| Процес | Якщо використовується mysqlnd: змінні, повернуті модулем, вказують на внутрішній мережевий буфер результатів mysqlnd. Якщо ви не змінювали змінні, вилучені дані будуть збережені в пам'яті один раз. Якщо ви змінювали змінні, mysqlnd виконає копіювання під час запису для захисту внутрішніх мережних буферів результату від зміни. Якщо використовується клієнтська бібліотека MySQL: Ви завжди тримаєте дані в пам'яті в двох примірниках. Один раз у внутрішніх буферах клієнтської бібліотеки MySQL, і ще один раз у змінних, повернутих модулем. Теоретично, mysqlnd може до 40% скоротити споживання пам'яті. У будь-якому випадку пам'ятайте, що цю економію не вдасться заміряти за допомогою memory_get_usage(). explicit_free_result
implicit_free_result
| З'єднання, процес (тільки на стадії очищення підготовлених запитів) Загальна кількість звільнених результуючих наборів. | Очищення завжди проводиться явно, але для результуючих наборів, створених командами, що ініціалізують, наприклад mysqli_options(MYSQLI_INIT_COMMAND , ...)
proto_text_fetched_null
proto_text_fetched_bit
proto_text_fetched_tinyint
proto_text_fetched_short
proto_text_fetched_int24
proto_text_fetched_int
proto_text_fetched_bigint
proto_text_fetched_decimal
proto_text_fetched_float
proto_text_fetched_double
proto_text_fetched_date
proto_text_fetched_year
proto_text_fetched_time
proto_text_fetched_datetime
proto_text_fetched_timestamp
proto_text_fetched_string
proto_text_fetched_blob
proto_text_fetched_enum
proto_text_fetched_set
proto_text_fetched_geometry
proto_text_fetched_other
| Поєднання | Загальна кількість стовпців певного типу, витягнутих нормальними запитами (текстовий протокол MySQL). | Зв'язування метаданих C API / MySQL з іменами метрик статистики:
-
MYSQL_TYPE_NULL
- proto_text_fetched_null -
MYSQL_TYPE_BIT
- proto_text_fetched_bit -
MYSQL_TYPE_TINY
- proto_text_fetched_tinyint -
MYSQL_TYPE_SHORT
- proto_text_fetched_short -
MYSQL_TYPE_INT24
- proto_text_fetched_int24 -
MYSQL_TYPE_LONG
- proto_text_fetched_int -
MYSQL_TYPE_LONGLONG
- proto_text_fetched_bigint -
MYSQL_TYPE_DECIMAL
MYSQL_TYPE_NEWDECIMAL
- proto_text_fetched_decimal -
MYSQL_TYPE_FLOAT
- proto_text_fetched_float -
MYSQL_TYPE_DOUBLE
- proto_text_fetched_double -
MYSQL_TYPE_DATE
MYSQL_TYPE_NEWDATE
- proto_text_fetched_date -
MYSQL_TYPE_YEAR
- proto_text_fetched_year -
MYSQL_TYPE_TIME
- proto_text_fetched_time -
MYSQL_TYPE_DATETIME
- proto_text_fetched_datetime -
MYSQL_TYPE_TIMESTAMP
- proto_text_fetched_timestamp -
MYSQL_TYPE_STRING
MYSQL_TYPE_VARSTRING
MYSQL_TYPE_VARCHAR
- proto_text_fetched_string -
MYSQL_TYPE_TINY_BLOB
MYSQL_TYPE_MEDIUM_BLOB
MYSQL_TYPE_LONG_BLOB
MYSQL_TYPE_BLOB
- proto_text_fetched_blob -
MYSQL_TYPE_ENUM
- proto_text_fetched_enum -
MYSQL_TYPE_SET
- proto_text_fetched_set -
MYSQL_TYPE_GEOMETRY
- proto_text_fetched_geometry -
Будь-які не перелічені
MYSQL_TYPE_*
- proto_text_fetched_other
Зверніть увагу, що константи типів MYSQL_* можуть не асоціюватися з однаковими шпальтами SQL для різних версій MySQL.
proto_binary_fetched_null
proto_binary_fetched_bit
proto_binary_fetched_tinyint
proto_binary_fetched_short
proto_binary_fetched_int24
proto_binary_fetched_int
proto_binary_fetched_bigint
proto_binary_fetched_decimal
proto_binary_fetched_float
proto_binary_fetched_double
proto_binary_fetched_date
proto_binary_fetched_year
proto_binary_fetched_time
proto_binary_fetched_datetime
proto_binary_fetched_timestamp
proto_binary_fetched_string
proto_binary_fetched_blob
proto_binary_fetched_enum
proto_binary_fetched_set
proto_binary_fetched_geometry
proto_binary_fetched_other
| Поєднання | Загальна кількість стовпців певного типу, які витягли підготовлені запити (бінарний протокол MySQL). | Зв'язок типів з proto_text_*
дивіться у попередньому пункті. |
Статистика mysqlnd: З'єднання
Метрика | Область применения | Опис | Замечания |
---|---|---|---|
connect_success connect_failure | З'єднання | Загальна кількість вдалих/невдалих спроб з'єднання. | Перевикористані та інші типи з'єднань включаються. |
reconnect | Процес | Загальна кількість спроб виконати real_connect на вже відкритому з'єднанні. | Наступний код $link = new mysqli(...); $link->real_connect(...) призведе до переєднання. Але $link = new mysqli(...); $link->connect(...) не приведе, оскільки $link->connect(...) примусово закриє існуюче з'єднання перед створенням нового. |
pconnect_success | З'єднання | Загальна кількість успішних спроб відкрити постійне з'єднання | Обратите внимание, чтоconnect_success містить сумарну кількість звичайних та постійних з'єднань. Отже кількість звичайних сполук можна обчислити так: connect_success pconnect_success |
active_connections | З'єднання | Загальна кількість активних сполук, як звичайних, і постійних. | |
active_persistent_connections | З'єднання | Загальна кількість активних постійних з'єднань. | Загальна кількість активних непостійних з'єднань дорівнює: active_connections active_persistent_connections |
explicit_close | З'єднання | Загальна кількість закритих з'єднань (тільки ext/mysqli). | Приклад коду, в якому явно закривається з'єднання: |
$link = new mysqli(...); $link->close(...)
$link = new mysqli(...); $link->connect(...)
implicit_close
| Поєднання | Загальна кількість неявно закритих з'єднань (тільки ext/mysqli). | Приклад коду, в якому з'єднання закривається не явно:
-
$link = new mysqli(...); $link->real_connect(...)
-
unset($link)
-
Постійне з'єднання: з'єднання було створено за допомогою real_connect і, можливо, з невідомим набором опцій - закривається неявно для запобігання перевикористання з'єднання з невідомим набором опцій
-
Постійне з'єднання: ping/change_user завершуються з помилкою та ext/mysqli закриває з'єднання
-
Закінчення роботи скрипта: закриваються з'єднання, які не закриті користувачем явно
disconnect_close
| Поєднання | Помилки з'єднання, що повертаються під час виклику C API mysql_real_connect() під час встановлення з'єднання. | Викликається disconnect_close
тому, що ідентифікатор з'єднання, переданий у виклик C API, повинен бути закритий. | | in_middle_of_command_close
| Процес | З'єднання закрито під час виконання команди (результуючий набір не вилучений, після запуску запиту та до отримання відповіді, під час отримання даних, під час завантаження даних за допомогою LOAD DATA). | Якщо ви не використовуєте асинхронні запити, подібне може статися лише в тому випадку, якщо робота скрипту несподівано перервалася і PHP автоматично закрив з'єднання. | | init_command_executed_count
| Поєднання | Загальна кількість запусків команд, що ініціалізують, наприклад mysqli_options(MYSQLI_INIT_COMMAND , ...)
. | Кількість успішно запущених команд дорівнює init_command_executed_count
init_command_failed_count
. init_command_failed_count
| Поєднання | Загальна кількість невдалих команд, що ініціалізують. | |
Статистика mysqlnd: Команди COM_*
Метрика | Область применения | Опис | Замечания |
---|---|---|---|
com_quit com_init_db com_query com_field_list com_create_db com_drop_db com_refresh com_shutdown com_statistics com_process_info com_connect com_process_kill com_debug com_ping com_time com_delayed_insert com_change_user com_binlog_dump com_table_dump com_connect_out com_register_slave com_stmt_prepare com_stmt_execute com_stmt_send_long_data com_stmt_close com_stmt_reset com_stmt_set_option com_stmt_fetch com_daemon | З'єднання | Загальна кількість спроб надіслати одну з COM_* команд із PHP серверу MySQL. | |
Метрика збільшується після перевірки синтаксису команди і перед відсиланням відповідного пакета серверу MySQL. Якщо mysqlnd не вдалося надіслати пакет, метрика не буде зменшена. У разі невдалої посилки mysqlnd поверне попередження Error while sending %s packet. PID=%d. |
Приклади використання:
-
Відстежити, що PHP посилає певні команди серверу, наприклад, що клієнт надсилає
COM_PROCESS_KILL
-
Порахувати середню кількість запусків підготовлених запитів, порівнявши
COM_EXECUTE
сCOM_PREPARE
-
Перевірити, що PHP виконує непідготовлені запити, переконавшись, що
COM_QUERY
одно нулю -
Визначити скрипт PHP, який виконує безліч запитів, перевіривши
COM_QUERY
иCOM_EXECUTE
Інше
Статистика mysqlnd: Інше
Метрика | Область применения | Опис | Замечания |
---|---|---|---|
explicit_stmt_close implicit_stmt_close | Процес | Загальна кількість закритих запитів. | Закриття завжди відбувається явно, крім помилок під час підготовки. |
mem_emalloc_count mem_emalloc_ammount mem_ecalloc_count mem_ecalloc_ammount mem_erealloc_count mem_erealloc_ammount mem_efree_count mem_malloc_count mem_malloc_ammount mem_calloc_count mem_calloc_ammount mem_realloc_count mem_realloc_ammount mem_free_count | Процес | Дзвінки менеджера пам'яті. | Лише для розробників. |
command_buffer_too_small | З'єднання | Кількість модулів мережного командного буфера під час відправки команди від PHP серверу MySQL. | |
mysqlnd виділяє внутрішній командний/мережевий буфер розміру mysqlnd.net_cmd_buffer_size (php.ini) байт для кожного з'єднання. Якщо команда клієнт-серверного протоколу MySQL, наприклад COM_QUERY (звичайний запит), що не міститься в ньому, mysqlnd збільшує розмір буфера до необхідного розміру. Щоразу, коли розмір буфера збільшується для з'єднання, command_buffer_too_small збільшується на одиницю. |
Якщо mysqlnd збільшує розмір буфера більше за його початковий розмір mysqlnd.net_cmd_buffer_size
(php.ini) практично для кожного з'єднання вам варто задуматися про зміну цього значення.
Розмір за замовчуванням буфера становить 4096 байт, що є найменшим можливим значенням. Це значення можна змінити в php.ini, змінивши значення ключа mysqlnd.net_cmd_buffer_size
или используяmysqli_options(MYSQLI_OPT_NET_CMD_BUFFER_SIZE, int size)
connection_reused