更新时间:2024-05-07 GMT+08:00

分布列推荐函数

分布列推荐针对的是在分布式数据库下分布列以及分布方式的推荐,目的是在进行业务迁移或业务上线时,减少选择表分布列的人力成本。

  • sqladvisor.init(char, boolean, boolean, boolean, int, int)

描述:初始化参数。

返回值类型:bool

表1 init参数说明

参数

类型

说明

是否必选

kind

char

推荐类型,目前支持分布列推荐 'D'。

isUseCost

boolean

是否使用优化器,有数据的情况选择是。

isUseCollect

boolean

是否从收集的负载中开始分析,默认值为false。

isConstraintPrimaryKey

boolean

是否保持主键约束,默认值为true。

sqlCount

int

收集sql数量,默认值为10000,范围:1 ~ 100000。

maxMemory

int

分布列推荐最大占用内存,默认值为1024,范围:1 ~ 10240,单位MB。

  • sqladvisor.set_weight_params(real, real, real)

描述:设置启发式规则不同成分的权重,调用init的时候会设置一个默认参数,分析时可以不调用该函数。

返回值类型:bool

表2 set_weight_params参数说明。

参数

类型

说明

是否必选

joinWeight

real

join的权重,范围:0 ~ 1000

goupbyWeight

real

group by的权重,范围:0 ~ 1000

qualWeight

real

predicate的权重,范围:0 ~ 1000

此函数非必须调用,在执行init函数的时候,会预置一个默认权重分别是join: 1.0, group by: 0.1, predicate: 0.05。

  • sqladvisor.set_cost_params(bigint, boolean, text)

描述:使用Whtif代价模式可以设置的参数。

返回值类型:bool

表3 set_cost_params参数说明

参数

类型

说明

是否必选

maxTime

bigint

推荐的最大时间,小于等于0默认为不限时,单位min。

isTotalSQL

boolean

是否使用全部SQL参与计算,true:全部SQL,false:会按照百分位过滤掉代价过大或者过小的SQL。

compressLevel

text

压缩程度表示推荐算法搜索空间的大小,'low', 'med', 'high'。

  • 此函数非必须调用,在执行init函数的时候,会预置参数maxTime:-1,isTotalSQL:true, compressLevel :'high'。
  • 用户选择的压缩程度越低,时间越长,越有可能推出更好的结果。
  • sqladvisor.assign_table_type(text)

描述:指定表为复制表。

参数:表名

返回值类型:bool

指定复制表需要在调用analyze_query和analyze_workload前使用。

  • sqladvisor.analyze_query(text, int)

描述:导入需要推荐的SQL语句,并对语句的成分进行分析。

返回值类型:bool

表4 analyze_query参数说明

参数

类型

说明

是否必选

query

text

SQL语句。

frequency

int

该语句在负载中的频率,默认值为1,范围:1 ~ 2147483647。

  • 如果参数query中存在如单引号(')等特殊字符,可以使用单引号(')进行转义。
  • 半在线模式不支持该函数。
  • sqladvisor.analyze_workload()

描述:分析在线收集的负载信息。

返回值类型:bool

  • sqladvisor.get_analyzed_result(text)

描述:获取当前表提取出来的有益成分。

参数:text

返回值类型:record

函数返回字段说明如下。

名称

类型

描述

schema_name

text

模式名

table_name

text

表名

col_name

text

列名

operator

text

算子类型

count

int

统计该操作符的次数

  • sqladvisor.run()

描述:根据指定的模式和输入的SQL进行计算分析。

返回值类型:bool

  • sqladvisor.get_distribution_key()

描述:获取推荐结果。

分析结果保存在session中,session断连结果丢失。

返回值类型:record

函数返回字段说明如下。

名称

类型

描述

db_name

text

数据库名

schema_name

text

模式名

table_name

text

表名

distribution_type

text

推荐的分布类型

distribution_key

text

推荐分布列

start_time

timestamp

推荐开始时间

end_time

timestamp

推荐结束时间

cost_improve

text

推荐结果对于代价的提升

comment

text

备注

  • sqladvisor.clean()

描述:清理session中推荐过程中的全部内存。

返回值类型:bool

  • sqladvisor.start_collect_workload(int, int)

描述:开启在线收集负载。

返回值类型:bool

表5 start_collect_workload参数说明

参数

类型

说明

是否必选

sqlCount

int

在线收集负载最大sql数量,默认值为10000,范围:1 ~ 100000。

maxMemory

int

在线收集负载最大占用内存,默认值为1024,范围:1 ~ 10240,单位MB。

  • 在线收集功能只能由系统管理员调用。
  • 同一时间只能收集一个数据库的负载。
  • 收集负载目前只支持普通SQL和存储过程中的DML、DQL语句。
  • sqladvisor.end_collect_workload()

描述:关闭在线收集负载。

返回值类型:bool

  • 关闭在线收集功能只能由系统管理员调用。
  • sqladvisor.clean_workload()

描述:清理负载中的内存。

返回值类型:bool

  • 清理负载内存功能只能由系统管理员调用。
  • 必须手动执行清理函数。

使用建议

  • 启发式、WhatIf代价推荐模式调用状态机。

  • 半在线推荐模式调用状态机。