Как запустить функцию параллельного запроса Mysql? - PullRequest
0 голосов
/ 22 февраля 2020

MySQL 8.0.19

mysql> show variables like 'innodb_parallel_read_threads';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_parallel_read_threads | 4     |
+------------------------------+-------+
1 row in set (0.00 sec)

Судя по плану выполнения, хотя стоимость и высока, параллельные запросы не запускаются.

mysql> explain analyze SELECT count(a.name) FROM b,a WHERE b.id = a.id AND a.id < 10000\G
*************************** 1. row ***************************
EXPLAIN: -> Aggregate: count(a.`name`)  (actual time=79199.970..79199.971 rows=1 loops=1)
    -> Inner hash join (b.id = a.id)  (cost=29804029261222.55 rows=29803521726988) (actual time=52129.791..79198.823 rows=9999 loops=1)
        -> Table scan on b  (cost=31.81 rows=18758239) (actual time=0.385..19630.712 rows=20000000 loops=1)
        -> Hash
            -> Filter: (a.id < 10000)  (cost=4909601.51 rows=15888229) (actual time=2.266..52117.583 rows=9999 loops=1)
                -> Table scan on a  (cost=4909601.51 rows=47669458) (actual time=2.262..48985.413 rows=50000000 loops=1)

1 row in set (1 min 19.25 sec)

1 Ответ

0 голосов
/ 22 февраля 2020

Текущие варианты использования для параллельного чтения очень ограничены. В то время как документация

innodb_parallel_read_threads

Определяет количество потоков, которые можно использовать для параллельных чтений кластеризованного индекса. Параллельное сканирование разделов поддерживается с MySQL 8.0.17. Параллельное чтение потоков может улучшить производительность CHECK TABLE.

немного расплывчато, документация по функциям описывает текущие варианты использования более подробно:

FR1: SELECT COUNT (*) FROM TABLE Т; индекс будет сканироваться параллельно только в том случае, если сканирование является неблокирующим сканированием и --innodb-parallel-read-threads> 1. В противном случае он будет откатываться к старой строке при сканировании строки.

FR2: вторая фаза ПРОВЕРЬТЕ ТАБЛИЦУ Т; также выполнит параллельное сканирование.

FR3: поддержка семантики MV CC.

FR4: новая переменная уровня сеанса --innodb-parallel-read-threads для управления количеством потоков в использовать для параллельного SELECT COUNT (*) ...;

  1. Минимальное значение 1
  2. Значение по умолчанию 4
  3. Максимальное значение 256.

NFR1: ускорение должно быть в 10 раз больше для SELECT COUNT (*) FROM t; на соответствующем оборудовании (например, tetra02).

Вкратце: вы должны увидеть улучшение только для select count(*) from table (без всякой фразы where). И это также не будет упомянуто в плане выполнения, в настоящее время вы можете увидеть эффект только путем сравнения времени выполнения с различными значениями innodb_parallel_read_threads.

Это новая функция, и в ее текущем состоянии в основном закладывая основу для будущих разработок:

Текущая область ограничена предоставлением достаточной инфраструктуры для операций DDL для чтения данных параллельно. Проведение второй фазы CHECK TABLE параллельно является дополнительным бонусом на данный момент. Это немного ускоряет CHECK TABLE.

Разработчики будут тестировать и постепенно расширять эту функцию (например, MySQL 8.0.17 добавлена ​​поддержка секционированных таблиц, и кажется, что эта поддержка для вторичных индексов находится в стадии разработки), но она может займет некоторое время, пока ваш запрос сможет его использовать.

...