分布列推荐函数
分布列推荐针对的是在分布式数据库下分布列以及分布方式的推荐,目的是在进行业务迁移或业务上线时,减少选择表分布列的人力成本。
- sqladvisor.init(char, boolean, boolean, boolean, int, int)
描述:初始化参数。
返回值类型:Boolean
表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的时候会设置一个默认参数,分析时可以不调用该函数。
返回值类型:Boolean
表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代价模式可以设置的参数。
返回值类型:Boolean
表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)
描述:指定表为复制表。
参数:表名
返回值类型:Boolean
指定复制表需要在调用analyze_query和analyze_workload前使用。
- sqladvisor.analyze_query(text, int)
描述:导入需要推荐的SQL语句,并对语句的成分进行分析。
返回值类型:Boolean
表4 analyze_query参数说明
参数
类型
说明
是否必选
query
text
SQL语句。
是
frequency
int
该语句在负载中的频率,默认值为1,范围:1 ~ 2147483647。
否
-
如果参数query中存在如单引号(')等特殊字符,可以使用单引号(')进行转义。
-
半在线模式不支持该函数。
-
sqladvisor.analyze_workload()
描述:分析在线收集的负载信息。
返回值类型:Boolean
- sqladvisor.get_analyzed_result(text)
描述:获取当前表提取出来的有益成分。
参数:text
返回值类型:record
函数返回字段说明如下:
名称
类型
描述
schema_name
text
模式名
table_name
text
表名
col_name
text
列名
operator
text
算子类型
count
int
统计该操作符的次数
- sqladvisor.run()
描述:根据指定的模式和输入的SQL进行计算分析。
返回值类型:Boolean
- 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中推荐过程中的全部内存。
返回值类型:Boolean
- sqladvisor.start_collect_workload(int, int)
描述:开启在线收集负载。
返回值类型:Boolean
表5 start_collect_workload参数说明
参数
类型
说明
是否必选
sqlCount
int
在线收集负载最大sql数量,默认值为10000,范围:1 ~ 100000。
是
maxMemory
int
在线收集负载最大占用内存,默认值为1024,范围:1 ~ 10240,单位MB。
是
NOTICE:
-
在线收集功能只能由系统管理员调用。
-
同一时间只能收集一个数据库的负载。
-
收集负载目前只支持普通SQL和存储过程中的DML、DQL语句。
-
sqladvisor.end_collect_workload()
描述:关闭在线收集负载。
返回值类型:Boolean
NOTICE:
-
关闭在线收集功能只能由系统管理员调用。
-
sqladvisor.clean_workload()
描述:清理负载中的内存。
返回值类型:Boolean
NOTICE:
- 清理负载内存功能只能由系统管理员调用。
- 必须手动执行清理函数。
使用建议
-
启发式、WhatIf代价推荐模式调用状态机。
-
半在线推荐模式调用状态机。
更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…