您可以通过数据库启动命令行方式、通过配置文件方式或在MySQL运行时动态修改三种方式来配置KOVAE相关参数。KOVAE插件新增了三个状态变量,包括kovae_enter_times、kovae_execution_times和kovae_execution_succeed_times,用于查看KOVAE相关的统计数据。
KOVAE相关参数及其说明如表1所示。
参数名称 |
是否支持启动命令行参数 |
是否支持启动配置文件 |
是否支持运行时动态修改 |
作用范围 |
类型 |
默认值 |
取值范围 |
参数说明 |
---|---|---|---|---|---|---|---|---|
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分组时的工作模式。
当被分组记录数非常多,分组结果记录数很少时,模式1有明显提升效果。 当被分组记录数非常多,分组结果记录也非常多(分组结果记录数比本查询的并行线程数大几个数量级)时,应使用模式0。 |
kovae_hashjoin_batch_num |
是 |
是 |
是 |
Session |
unsigned long |
1024 |
128~4096 |
hash表分区数量最大值。 |
kovae_log_level |
是 |
是 |
是 |
Global |
unsigned int |
2 |
1~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算子是否做缓存占用释放的信息统计。 |
set variable 参数名=参数值; set global variable 参数名=参数值;
show variables like "%参数名%";
KOVAE插件新增了如表2所示的3个状态变量,用于查看KOVAE相关的统计数据。
状态变量名 |
说明 |
---|---|
kovae_enter_times |
进入KOVAE引擎的SQL语句个数。 |
kovae_execution_times |
通过白名单控制过滤,在KOVAE引擎执行的SQL语句个数。 |
kovae_execution_succeed_times |
在KOVAE引擎执行完成的SQL语句个数。 |
show status like "%状态变量名%";