分布列推荐函数
分布列推荐针对的是在分布式数据库下分布列以及分布方式的推荐,目的是在进行业务迁移或业务上线时,减少选择表分布列的人力成本。
- sqladvisor.init(char, boolean, boolean, boolean, int, int)
描述:初始化参数。
返回值类型:bool
参数 |
类型 |
说明 |
是否必选 |
---|---|---|---|
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
参数 |
类型 |
说明 |
是否必选 |
---|---|---|---|
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
参数 |
类型 |
说明 |
是否必选 |
---|---|---|---|
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
参数 |
类型 |
说明 |
是否必选 |
---|---|---|---|
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
参数 |
类型 |
说明 |
是否必选 |
---|---|---|---|
sqlCount |
int |
在线收集负载最大sql数量,默认值为10000,范围:1 ~ 100000。 |
是 |
maxMemory |
int |
在线收集负载最大占用内存,默认值为1024,范围:1 ~ 10240,单位MB。 |
是 |
- 在线收集功能只能由系统管理员调用。
- 同一时间只能收集一个数据库的负载。
- 收集负载目前只支持普通SQL和存储过程中的DML、DQL语句。
- sqladvisor.end_collect_workload()
描述:关闭在线收集负载。
返回值类型:bool
- 关闭在线收集功能只能由系统管理员调用。
- sqladvisor.clean_workload()
描述:清理负载中的内存。
返回值类型:bool
- 清理负载内存功能只能由系统管理员调用。
- 必须手动执行清理函数。