设置并查询KOVAE相关参数和查询状态变量

您可以通过数据库启动命令行方式、通过配置文件方式或在MySQL运行时动态修改三种方式来配置KOVAE相关参数。KOVAE插件新增了三个状态变量,包括kovae_enter_times、kovae_execution_times和kovae_execution_succeed_times,用于查看KOVAE相关的统计数据。

设置和查询KOVAE相关参数

KOVAE相关参数及其说明如表1所示。

表1 KOVAE相关参数及其说明

参数名称

是否支持启动命令行参数

是否支持启动配置文件

是否支持运行时动态修改

作用范围

类型

默认值

取值范围

参数说明

secondary_engine_cost_threshold

Global

double

100000

0~DBL_MAX (maximum double value)

用于查询使用第二引擎的代价阈值。

在代价大于该值时,将尝试使用第二引擎执行查询。

innodb_parallel_read_threads

Session

unsigned long

4

1~256

并行读表的线程数。

kovae_aggregator_hash_type

Session

unsigned int

0

0和1

Agg算子hash分组时的工作模式。

  • 0表示所有worker线程共用一个hash表。
  • 1表示每个worker线程使用各自的hash表。

当被分组记录数非常多,分组结果记录数很少时,模式1有明显提升效果。

当被分组记录数非常多,分组结果记录也非常多(分组结果记录数比本查询的并行线程数大几个数量级)时,应使用模式0。

kovae_hashjoin_batch_num

Session

unsigned long

1024

128~4096

hash表分区数量最大值。

kovae_log_level

Global

unsigned int

2

1~5

日志输出级别。

各个日志级别与对应数值:

  • ERR:1
  • WARNING:2
  • NOTICE:3
  • INFO:4
  • DEBUG:5

设置了日志输出级别后,会在MySQL的error log日志文件中输出小于或等于该配置值的日志级别的日志记录。

kovae_memory_buffer_size

Session

unsigned longlong

1073741824

268435456~264-1(maximum unsigned long long value)

如果排序、聚合、hashjoin和物化算子使用的内存量超过了该配置值的字节数,将触发落盘流程,以降低内存的使用量,但可能会影响性能。

kovae_memory_control

Global

bool

0

0和1

内存控制功能的总开关。

当设置为关闭时,并行查询的内存申请尽量从操作系统申请;当设置为开启时,所有并行查询可申请使用的内存量将受kovae_memory_max_size配置值的控制,所有并行查询从OS申请使用内存的操作将被统计和监控。

kovae_memory_max_size

Global

longlong

10*2^30

230~263-1(maximum long long value)

并行查询可以申请的内存总量。

开启kovae_memory_control后,kovae_memory_max_size的配置值才能生效。

当所有查询语句总共申请的内存字节数超过了设置的kovae_memory_max_size值时,系统将无法继续进行并行查询流程,并且可能会导致内存申请失败。在这种情况下,查询流程将自动退出。

说明:

内存控制非严格字节数的控制,存在一定误差。内存控制的精度受到并行查询的并行数和算子的影响,kovae_memory_max_size的配置值应该小于可用内存,以保留一定的预留余量。

kovae_memory_save_num

Global

unsigned int

100

0~1000

用于设置information_schema.KOVAE_MEMORY_HISTORY表可缓存的最近的并行查询记录数。当开启并行查询的内存控制功能后,您可以通过查询information_schema.KOVAE_MEMORY_HISTORY表来查看历史查询的内存使用信息记录。

kovae_serial_mode

Global

bool

0

0和1

用于控制串行模式的开关。

开启后,系统将限制查询操作只能单独执行一条SQL语句。

kovae_threadpool_size

Global

unsigned int

CPU的核数,若核数获取失败则为1

1~65535

线程池中最大可保留的线程数。所有并行查询的工作线程都从线程池中申请,当线程池中的线程数被申请完,新的线程申请将受到kovae_threadpool_stalltime参数的限制。当已申请的线程数达到kovae_threadpool_size后,新的线程要间隔kovae_threadpool_stalltime时间后才能申请成功。

kovae_threadpool_size一般可设置为可用CPU核数的3~5倍。

kovae_parallel_threads

Session

unsigned int

2

1~1000

单个并行查询可申请的最大工作线程数。

kovae_parallel_threads一般可设置为kovae_threadpool_size/大概率同时执行的并行查询数会话数的值。

kovae_threadpool_stalltime

Global

unsigned int

1800

0~232-1(maximum unsigned int value)

当线程池中的线程全被申请以至于没有空闲线程时,新的查询将无法获得可用的工作线程。为了避免过多的线程创建和资源浪费,设置一个等待时间kovae_threadpool_stalltime,当两次申请失败的时间超过了该等待时间(单位秒),才会扩展新的工作线程,以提供给新的并行查询使用。

kovae_threadpool_stalltime可保持默认值。

kovae_statement_history_schema_size

Global

unsigned longlong

10000

100~263-1(maximum long long value)

INFORMATION_SCHEMA.KOVAE_STATEMENT_HISTORY表的最大缓存行数,记录的缓存在KOVAE插件加载时申请分配,在KOVAE卸载时释放。

kovae_threads_history_schema_size

Global

unsigned longlong

100000

10000~263-1(maximum long long value)

INFORMATION_SCHEMA.KOVAE_THREADS_HISTORY表的最大缓存行数,记录的缓存在KOVAE插件加载时申请分配,在KOVAE卸载时释放。

kovae_memory_detail_history_schema_size

Global

unsigned longlong

1000000

10000~263-1(maximum long long value)

INFORMATION_SCHEMA.KOVAE_MEMORY_DETAIL_HISTORY表的最大缓存行数,记录的缓存在KOVAE插件加载时申请分配,在KOVAE卸载时释放。

kovae_buffer_detail_history_schema_size

Global

unsigned longlong

1000000

10000~263-1(maximum long long value)

INFORMATION_SCHEMA.KOVAE_BUFFER_DETAIL_HISTORY表的最大缓存行数,记录的缓存在KOVAE插件加载时申请分配,在KOVAE卸载时释放。

kovae_memory_detail_rowadapter

Global

bool

false

true和false

rowadapter算子是否做内存申请释放的信息统计。

若开启统计,则对算子性能有略微劣化影响。

kovae_memory_detail_tablescan

Global

bool

false

true和false

tablescan算子是否做内存申请释放的信息统计。

kovae_memory_detail_indexrangescan

Global

bool

false

true和false

index range scan算子是否做内存申请释放的信息统计。

kovae_memory_detail_indexscan

Global

bool

false

true和false

index scan算子是否做内存申请释放的信息统计。

kovae_memory_detail_agg

Global

bool

false

true和false

agg算子是否做内存申请释放的信息统计。

kovae_memory_detail_material

Global

bool

false

true和false

materialize算子是否做内存申请释放的信息统计。

kovae_memory_detail_sort

Global

bool

false

true和false

sort算子是否做内存申请释放的信息统计。

kovae_memory_detail_hashjoin

Global

bool

false

true和false

hashjoin算子是否做内存申请释放的信息统计。

kovae_memory_detail_limit

Global

bool

false

true和false

limit算子是否做内存申请释放的信息统计。

kovae_memory_detail_nestedloopjoin

Global

bool

false

true和false

nestedloopjoin算子是否做内存申请释放的信息统计。

kovae_memory_detail_streaming

Global

bool

false

true和false

streaming算子是否做内存申请释放的信息统计。

kovae_buffer_view_tablescan

Global

bool

false

true和false

table scan算子是否做缓存占用释放的信息统计。

kovae_buffer_view_agg

Global

bool

false

true和false

agg算子是否做缓存占用释放的信息统计。

kovae_buffer_view_sort

Global

bool

false

true和false

sort算子是否做缓存占用释放的信息统计。

kovae_buffer_view_hashjoin

Global

bool

false

true和false

hashjoin算子是否做缓存占用释放的信息统计。

kovae_buffer_view_material

Global

bool

false

true和false

materialize算子是否做缓存占用释放的信息统计。

  1. 通过MySQL客户端登录MySQL服务。
  2. 执行如下命令,设置KOVAE相关参数。

    set variable 参数名=参数值;
    set global variable 参数名=参数值;

  3. 执行如下命令,查看已设置的KOVAE相关参数。

    show variables like "%参数名%";

查询状态变量

KOVAE插件新增了如表2所示的3个状态变量,用于查看KOVAE相关的统计数据。

表2 状态变量名及其说明

状态变量名

说明

kovae_enter_times

进入KOVAE引擎的SQL语句个数。

kovae_execution_times

通过白名单控制过滤,在KOVAE引擎执行的SQL语句个数。

kovae_execution_succeed_times

在KOVAE引擎执行完成的SQL语句个数。

  1. 通过MySQL客户端登录MySQL服务。
  2. 执行如下命令,查询状态变量值。

    show status like "%状态变量名%";