Управление кластером Spider
Прямой SQL
Прямой SQL — это способ отображения уменьшенного выполнения на удаленных бэкендах и сохранения результатов в локальной таблице. Это может быть последовательным, используя функцию UDF spider_direct_sql, или одновременным, используя spider_bg_direct_sql.
spider1 backend << EOF
CREATE TEMPORARY TABLE res
(
id int(10) unsigned NOT NULL,
k int(10) unsigned NOT NULL DEFAULT '0',
c char(120) NOT NULL DEFAULT '',
pad char(60) NOT NULL DEFAULT ''
) ENGINE=MEMORY;
SELECT spider_direct_sql(
'SELECT * FROM sbtest s WHERE s.id IN(10,12,13)',
'res',
concat('host "', host, '", port "', port, '", user "', username, '", password "', password, '", database "', tgt_db_name, '"')
) a
FROM
mysql.spider_tables
WHERE
db_name = 'backend' and table_name like 'sbtest#P#pt%';
SELECT * FROM res;
EOF
Или, если вы используете SERVER:
SELECT spider_direct_sql(
'SELECT * FROM sbtest s WHERE s.id IN(10,12,13)',
'res',
concat('server "', server, '"')
) a
FROM mysql.spider_tables
WHERE db_name = 'backend' and table_name like 'sbtest#P#pt%' ;
По умолчанию для spider_bg_direct_sql используется одновременный доступ ко всем бэкендам. Если у вас есть несколько партиций, хранящихся внутри одного бэкенда, вы все равно можете увеличить параллелизм, влияющий на различные каналы каждой партиции.
CREATE TEMPORARY TABLE res
(
id int(10) unsigned NOT NULL ,
col_microsec DATETIME(6) default NOW(8),
db varchar(20)
) ENGINE=MEMORY;
SELECT spider_bg_direct_sql( 'SELECT count(*) ,min(NOW(6)),min(DATABASE())) FROM sbtest', 'res', concat('srv "', server,'" cch ',@rn:=@rn+1 ) ) a FROM mysql.spider_tables,(SELECT @rn:=1) t2 WHERE db_name = 'bsbackend' and table_name like 'sbtest#P#pt%';
Сокет прямого обработчика
Проверьте, что Сокет обработчика работает на узлах бэкенда
:~# backend2 -e "show variables like 'handler%'" +-------------------------------+---------------+ | Variable_name | Value | +-------------------------------+---------------+ | handlersocket_accept_balance | 0 | | handlersocket_address | 192.168.0.201 | | handlersocket_backlog | 32768 | | handlersocket_epoll | 1 | | handlersocket_plain_secret | | | handlersocket_plain_secret_wr | | | handlersocket_port | 20500 | | handlersocket_port_wr | 20501 | | handlersocket_rcvbuf | 0 | | handlersocket_readsize | 0 | | handlersocket_sndbuf | 0 | | handlersocket_threads | 4 | | handlersocket_threads_wr | 1 | | handlersocket_timeout | 300 | | handlersocket_verbose | 10 | | handlersocket_wrlock_timeout | 12 | +-------------------------------+---------------+
spider1 backend << EOF
CREATE TEMPORARY TABLE res
(
id int(10) unsigned NOT NULL,
k int(10) unsigned NOT NULL DEFAULT '0',
c char(120) NOT NULL DEFAULT '',
pad char(60) NOT NULL DEFAULT ''
) ENGINE=MEMORY;
SELECT spider_direct_sql('1\t=\t1\t2\t100000\t0','res', 'host "192.168.0.202", table "sbtest", database "test", port "20500", access_mode "1"');
Копирование таблиц между узлами
Функция UDF spider_copy_tables доступна для копирования данных таблицы из идентификатора источника ссылки в список идентификаторов назначения ссылки без остановки вашей службы для копирования
spider_copy_tables(Spider table name, source link ID, destination link ID list[, parameters])
-
Returns 1если копирование данных выполнено успешно. -
Returns 0если копирование данных завершилось ошибкой.
Если таблица Spider разбита на разделы, необходимо установить «Имя таблицы Spider» с именем части, например, «table_name#P#part_name».
Вы можете проверить имя таблицы и идентификатор ссылки с именем части, используя следующий SQL:
SELECT table_name FROM mysql.spider_tables;
Перераспределение
Общий журнал
Для захвата всех запросов, отправленных на удаленные бэкенды на Spider Node:
SET GLOBAL general_log=ON; SET GLOBAL spider_general_log=ON; SET GLOBAL spider_log_result_errors=1; SET GLOBAL spider_log_result_error_with_sql=3;
Компиляция в отладочном режиме
Компилируйте MariaDB в отладочном режиме
#cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=Debug -DWITH_FAST_MUTEXES=ON -DWITH_VALGRIND=ON
Запустите MariaDB следующим образом, чтобы иметь подробный файл трассировки команд
mysqld --debug=S:T:t:r:p:n:L:i:F:f:D:d,info,error,query,qcache,my,exit,general,where:O,/tmp/mysqld.trace
Или с Valgrind, чтобы получить полную трассировку стека при сбое.
valgrind /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/inetbase/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/inetbase/mysql/lucifer.err --open-files-limit=65000 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
Сообщите об ошибке в MariaDB JIRA (см. Отчет об ошибках) или в службу поддержки MariaDB Corporation.
Компиляция в статическом режиме
Доступно начиная с версии 3.1.14
Чтобы активировать Spider в качестве статического плагина, измените «MODULE_ONLY» на «MANDATORY» в файле storage/spider/CMakeList.txt перед компиляцией.
Обратите внимание, что функции UDF Spider не будут работать с такими настройками.
Переменные состояния
Было введено несколько новых переменных состояния:
- Spider_direct_aggregate
- Spider_direct_order_limit
- Spider_mon_table_cache_version
- Spider_mon_table_cache_version_req
Таблицы схемы информации
- Установлена новая таблица схемы информации Information Schema - SPIDER_ALLOC_MEM.
+-------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------------+------+-----+---------+-------+ | ID | int(10) unsigned | NO | | 0 | | | FUNC_NAME | varchar(64) | YES | | NULL | | | FILE_NAME | varchar(64) | YES | | NULL | | | LINE_NO | int(10) unsigned | YES | | NULL | | | TOTAL_ALLOC_MEM | bigint(20) unsigned | YES | | NULL | | | CURRENT_ALLOC_MEM | bigint(20) | YES | | NULL | | | ALLOC_MEM_COUNT | bigint(20) unsigned | YES | | NULL | | | FREE_MEM_COUNT | bigint(20) unsigned | YES | | NULL | | +-------------------+---------------------+------+-----+---------+-------+
Схема производительности
Схема производительности обычно используется для устранения неполадок, которые занимают время внутри вашей рабочей нагрузки. Схема производительности не должна активироваться для серверов, которые постоянно испытывают большую нагрузку, но в большинстве случаев приемлемо потерять 5-20% дополнительного ЦП для отслеживания выполнения внутренних процессов сервера.
Чтобы активировать схему производительности, используйте системную переменную performance_schema и добавьте следующее в раздел сервера файла конфигурации MariaDB.
performance_schema=on
Активируйте зонды Spider для мониторинга.
UPDATE performance_schema.setup_instruments SET ENABLED='YES', TIMED='yes' WHERE NAME LIKE '%spider%';
Выполните ваши запросы...
И проверьте показатели производительности. Удалите определенные метрики Spider, чтобы получить более общее представление.
SELECT * FROM performance_schema.events_waits_summary_global_by_event_name WHERE COUNT_STAR<>0 AND EVENT_NAME LIKE '%spider%' ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/spider-cluster-management/