Перейти к содержанию

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 — дополнительное подключение, использует специальный драйвер для быстрого чтения.