LOADING

缓存加载中...

indexEABrecord

2025/4/24

 
跑很大的交叉实验。
基于上上一篇的实验平台index-EAB

使用流程

配置

1.benchmark

作者说使用已提供的词汇表生成查询扰动(Query Perturbation)工作负载。

我这里用自备的workload.

2.索引顾问

两种配置,heu启发式/rl学习型
/configuration_loader中。

参数 描述
constraint 预算约束类型(默认为存储空间 storage
budget_MB 存储空间约束(MB,默认为500,仅在 constraint=storage 时有效)
max_indexes 允许的最大索引数量(默认为5,仅在 constraint=number 时有效)
max_index_width 候选索引的最大宽度(列数,默认为2)

3.数据库

/configuration_loader/database/db_con.conf设置连接信息。

还有一些数据库统计信息文件。例如,/configuration_loader/database/schema_tpch.json存储了 TPC-H 基准测试的数据库模式。

数据

/workload_generator 中已预先生成三种工作负载类型:

  1. ​基于模板的工作负载​​

  2. 基于扰动的工作负载​​(通过修改查询模板模拟负载漂移)
    ​​

  3. 随机生成的工作负载​​

  • 目前支持三种扰动方式(模拟论文中提出的负载漂移):

    ​​1. 仅值扰动​​:修改查询模板中的谓词值(使用占位符);

    ​​2. 列一致性扰动​​:修改值和列集合(例如更改 GROUP BY 子句的列顺序);

    1. ​​共享表扰动​​:修改同一表的SQL标记(例如添加新谓词)。

评估

我们这里评估学习型索引。

参数

参数​ ​描述​ ​可选值/示例​
exp_id 实验唯一标识符,用于存储结果到指定路径 swirl_tpch_v1(存储在 /.../swirl_selection/exp_res/swirl_tpch_v1/
algo 指定学习型索引顾问算法 swirl(动态推荐) drlinda(深度强化学习) dqn(深度Q网络)
workload_embedder 工作负载表示类,将查询编码为特征向量 模板嵌入类、查询序列编码类
observation_manager 状态表示类,描述当前环境状态(如数据库统计信息、索引配置) 包含性能指标、表大小等信息的类
action_manager 动作空间类,定义可执行操作(如创建/删除索引) 离散动作(候选索引选择)
连续动作(索引列排序)
reward_calculator 奖励函数类,量化索引收益(如延迟降低与存储成本的权衡) 基于查询性能提升和存储开销的奖励计算类
rl_exp_load 加载训练配置的路径(超参数、环境设置) /path/swirl_tpch_v1/experiment_object.pickle
rl_model_load 加载预训练代理模型的路径(神经网络权重) /path/swirl_tpch_v1/best_mean_reward_model.zip
rl_env_load 加载环境配置的路径(如状态归一化参数) /path/swirl_tpch_v1/vec_normalize.pkl

训练

python swirl_main.py \
--algo swirl --exp_id swirl_tpch_v1 \
--timesteps 100000 --seed 666 \
--constraint storage --max_budgets 500 \
--exp_conf_file /configuration_loader/index_advisor/rl_run_conf/swirl_config.json \
--work_size 18 --work_gen load \
--work_type not_template --temp_num 22 \
--training_instances 80 --validation_testing_instances 5 \
--work_file /workload_generator/template_based/tpch_work_temp_multi.json \
--eval_file /workload_generator/template_based/tpch_work_temp_multi.json \
--db_conf_file /configuration_loader/database/db_con.conf \
--schema_file /configuration_loader/database/schema_tpch.json \
--colinfo_load /configuration_loader/database/colinfo_tpch.json

测试

python swirl_run.py \
--algo swirl --seed 666 \
--constraint storage --max_budgets 500 \
--rl_exp_load /index_advisor_selector/index_selection/swirl_selection/exp_res/swirl_tpch_v1/experiment_object.pickle \
--rl_model_load /index_advisor_selector/index_selection/swirl_selection/exp_res/swirl_tpch_v1/best_mean_reward_model.zip \
--rl_env_load /index_advisor_selector/index_selection/swirl_selection/exp_res/swirl_tpch_v1/vec_normalize.pkl \
--work_file /workload_generator/template_based/tpch_work_temp_multi.json \
--db_conf_file /configuration_loader/database/db_con.conf

我自备的wordload满足job的schema。