跑很大的交叉实验。
基于上上一篇的实验平台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. 列一致性扰动:修改值和列集合(例如更改 GROUP BY 子句的列顺序);
- 共享表扰动:修改同一表的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。