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

Предыдущая
Следующая