HandlerSocket
HandlerSocket — это протокол доступа к данным MySQL. Он позволяет пропускать стандартные этапы обработки SQL-запросов, чтобы быстрее получать данные.
HandlerSocket ускоряет только SELECT-запросы. Для записи данных используйте обычное SQL-подключение.
Как работает HandlerSocket
-
Напрямую обращается к данным. Не требует парсинга, открытия таблиц и оптимизации запросов. Снижает нагрузку на сервер.
-
Поддерживает асинхронную обработку. Несколько потоков могут обрабатывать сотни тысяч запросов одновременно.
Сравнение производительности при разных способах доступа к данным
| Способ доступа | Запросов в секунду | Нагрузка на CPU: пользовательские процессы | Нагрузка на CPU: системные процессы |
|---|---|---|---|
| MySQL через SQL-клиент | 105 000 | 60% | 28% |
| memcached | 420 000 | 8% | 88% |
| MySQL через HandlerSocket | 750 000 | 45% | 53% |
Результаты могут меняться в зависимости от версии MySQL и аппаратных характеристик сервера.
Как установить HandlerSocket
-
Cоберите плагин из исходников MySQL. Этот способ подходит, если нужно добавить HandlerSocket к существующей MySQL.
-
Используйте MariaDB. Это форк MySQL, в котором HandlerSocket включен по умолчанию. Способ подходит для новых проектов, где можно выбрать СУБД с нуля.
Подробную инструкцию по настройке HandlerSocket в MariaDB читайте в официальной документации HandlerSocket Plugin for MariaDB .
После установки добавьте параметры HandlerSocket в конфигурационный файл MySQL.
Чтобы настроить пул потоков, укажите значение handlersocket_threads в диапазоне от 8 до 32 в конфигурационном файле my.cnf.
Как подключить HandlerSocket
Добавьте указание на HandlerSocket в конфигурационный файл /bitrix/.settings.php под ключом 'default':
'default' => [
'className' => \Bitrix\Main\DB\MysqliConnection::class,
'handlersocket' => [
'read' => 'handlersocket', // Использовать HandlerSocket для чтения
],
],
Добавьте отдельное соединение для HandlerSocket с указанием хоста и порта:
'handlersocket' => [
'className' => \Bitrix\Main\Data\HsphpReadConnection::class,
'host' => 'localhost', // Хост сервера HandlerSocket
'port' => 9998, // Порт для чтения (обычно 9998)
],
Пример конфигурации с HandlerSocket
Этот конфигурационный файл позволяет настроить два типа подключений к БД — обычное через MySQL и быстрое через HandlerSocket:
'connections' => [
'value' => [
// Основное соединение с MySQL базой данных через MySQLi
'default' => [
'className' => \Bitrix\Main\DB\MysqliConnection::class, // Используем драйвер MySQLi для соединения
'host' => 'localhost:31006', // Хост базы данных с указанием порта (нестандартный порт 31006)
'database' => 'admin_bus', // Имя базы данных
'login' => 'admin_bus', // Имя пользователя для доступа к БД
'password' => 'admin_bus', // Пароль пользователя
'options' => 2, // Дополнительные опции соединения (2 - отложенное соединение)
'handlersocket' => [ // Настройки HandlerSocket (альтернативный метод доступа к MySQL)
'read' => 'handlersocket', // Использование HandlerSocket для операций чтения
],
],
// Настройки соединения HandlerSocket для чтения данных
'handlersocket' => [
'className' => \Bitrix\Main\Data\HsphpReadConnection::class, // Специальный класс для работы с HandlerSocket
'host' => 'localhost', // Хост HandlerSocket
'port' => '9998', // Порт HandlerSocket
],
],
'readonly' => true, // Запрещает изменение настроек во время выполнения скрипта
],
-
default— основное подключение, использует стандартный MySQL-драйвер. -
handlersocket— дополнительное подключение, использует специальный драйвер для быстрого чтения.