对于workload级别的索引推荐,用户可通过运行数据库外的脚本使用此功能,本功能将包含有多条DML语句的workload作为输入,最终生成一批可对整体workload的执行表现进行优化的索引。
准备好包含有多条DML语句的文件作为输入的workload,文件中每条语句占据一行。用户可从数据库的离线日志中获得历史的业务语句。
运行python脚本index_advisor_workload.py,命令如下:
"" python index_advisor_workload.py [p PORT] [d DATABASE] [f FILE] [--h HOST] [-U USERNAME] [-W PASSWORD][--schema SCHEMA] [--max_index_num MAX_INDEX_NUM][--max_index_storage MAX_INDEX_STORAGE] [--multi_iter_mode] [--multi_node] [--json] [--driver] [--show_detail] 其中的输入参数依次为:
PORT:连接数据库的端口号。 DATABASE:连接数据库的名字。 FILE:包含workload语句的文件路径。 HOST:(可选)连接数据库的主机号。 USERNAME:(可选)连接数据库的用户名。 PASSWORD:(可选)连接数据库用户的密码。 SCHEMA:模式名称。 MAX_INDEX_NUM:(可选)最大的索引推荐数目。 MAX_INDEX_STORAGE:(可选)最大的索引集合空间大小。 multi_node:(可选)指定当前是否为分布式数据库实例。 multi_iter_mode:(可选)算法模式,可通过是否设置该参数来切换算法。 json:(可选)指定workload语句的文件路径格式为SQL归一化后的json,默认格式每条SQL占一行。 driver:(可选)指定是否使用python驱动器连接数据库,默认gsql连接。 show_detail:(可选)是否显示当前推荐索引集合的详细优化信息。 例如:
"" python index_advisor_workload.py 6001 postgres tpcc_log.txt --schema public --max_index_num 10 --multi_iter_mode 推荐结果为一批索引,以多个创建索引语句的格式显示在屏幕上,结果示例。 "" create index ind0 on public.bmsql_stock(s_i_id,s_w_id); create index ind1 on public.bmsql_customer(c_w_id,c_id,c_d_id); create index ind2 on public.bmsql_order_line(ol_w_id,ol_o_id,ol_d_id); create index ind3 on public.bmsql_item(i_id); create index ind4 on public.bmsql_oorder(o_w_id,o_id,o_d_id); create index ind5 on public.bmsql_new_order(no_w_id,no_d_id,no_o_id); create index ind6 on public.bmsql_customer(c_w_id,c_d_id,c_last,c_first); create index ind7 on public.bmsql_new_order(no_w_id); create index ind8 on public.bmsql_oorder(o_w_id,o_c_id,o_d_id); create index ind9 on public.bmsql_district(d_w_id);