openGauss源码解析(170)

openGauss源码解析:AI技术(17)

4. DNN算法源码解析

训练阶段先初始化SQL向量,之后创建深度学习模型,将模型保存到本地。

预测阶段,导入模型,向量化待预测的SQL;基于向量相似度对SQL的执行时间进行预测。主要源码如下:

class KerasRegression:

# 初始化模型参数

def __init__(self, encoding_dim=1):

self.model = None

self.encoding_dim = encoding_dim

# 模型定义

@staticmethod

def build_model(shape, encoding_dim):

from tensorflow.keras import Input, Model

from tensorflow.keras.layers import Dense

inputs = Input(shape=(shape,))

layer_dense1 = Dense(128, activation='relu', kernel_initializer='he_normal')(inputs)

model = Model(inputs=inputs, outputs=y_pred)

# 优化器,损失函数

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

return model

# 模型训练

def fit(self, features, labels, batch_size=128, epochs=300):

self.model.fit(features, labels, epochs=epochs, batch_size=batch_size, shuffle=True, verbose=2)

# 模型预测

def predict(self, features):

predict_result = self.model.predict(features)

return predict_result

# 模型保存

def save(self, filepath):

self.model.save(filepath)

# 模型读取

def load(self, filepath):

from tensorflow.keras.models import load_model

self.model = load_model(filepath)

class DnnModel(AbstractModel, ABC):

# 初始化算法参数

def __init__(self, params):

self.regression = KerasRegression(encoding_dim=1)

self.data = None

# 把sql语句转化为vector,如果模型不存在,则直接训练w2v模型,如果模型存在则进行增量训练

def build_word2vector(self, data):

self.data = list(data)

if self.w2v.model:

self.w2v.update(self.data)

else:

self.w2v.fit(self.data)

def fit(self, data):

self.build_word2vector(data)

# 数据归一化

self.scaler = MinMaxScaler(feature_range=(0, 1))

self.scaler.fit(labels)

labels = self.scaler.transform(labels)

self.regression.fit(features, labels, epochs=self.epoch)

# 利用回归模型预测执行时间

def transform(self, data):

8.3.5 使用示例

SQL流水的采集方法:SQL流水可以通过openGauss自带的采集工具进行采集,采集过程的性能损耗很低,一般不会超过5%,该过程可以通过GUC参数设置。

(1) log_statement = all。
(2) log_statement_stats=on。

开启参数后,会向数据库日志文件中记录具体的执行语句以及其开销。

使用方法示例:使用前,可通过如下指令获取帮助。

python main.py –help

参数说明如表8-7所示。

表8-7 命令行参数说明

参数

参数说明

取值范围

-f, --csv-file

训练、预测数据文件路径

-

--predicted-file

预测结果存储文件路径

-

--model

模型选择

template、dnn

--model-path

模型存储文件路径

-

--config-file

配置文件路径

-

使用方法示例,使用提供的训练数据进行训练,代码如下:

python main.py train -f train.csv --model-path test/

使用提供的数据进行预测,代码如下:

python main.py predict –f predict.csv –model-path test/ --predicted-file test/result.csv

使用已有的模型进行增量训练,代码如下:

python main.py finetune –f train_new.csv –model-path test/

输出样例为SQL语句与预测的执行时间。

8.3.6 总结

当前的慢SQL发现功能只是根据历史的workload信息,定性、定量地估计未来的SQL语句的执行时间。由于SQL语句的真实执行结果会受到多种因素影响,这为SQL语句的执行结果带来很大噪声,因此理论上通过本功能实现SQL语句的执行时间预估是存在一些偏差的,这也是本功能侧重定性判断的原因。对于更精确的SQL执行时间预估,可以使用8.6节提到的AI查询时间预测功能。

posted @ 2024-05-06 10:24  openGauss-bot  阅读(1)  评论(0编辑  收藏  举报