GreatSQL社区

搜索

[已解决] 关于使用Turbo未生效问题

50 8 6 天前
本帖最后由 mlovewt 于 2025-11-24 11:20 编辑

使用docker  安装的greatsql,开启Turbo引擎后,sql 查询未生效,单表大约100万数据

一、开始Turbo
  1. INSTALL PLUGIN turbo SONAME 'turbo.so';
  2. SET global turbo_enable=ON;
  3. SET global turbo_cost_threshold=0;
复制代码



二、建表语句
  1. CREATE TABLE `generic_survey_response_log` (
  2.   `record_id` bigint unsigned NOT NULL AUTO_INCREMENT,
  3.   `survey_year` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '关联的调研年份标识',
  4.   `attempt_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '该年度内的参与序号',
  5.   `log_timestamp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '记录生成的具体时间戳',
  6.   `entity_code_level0` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '参与者直接归属实体代码',
  7.   `entity_name_level0` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '参与者直接归属实体名称',
  8.   `parent_entity_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '参与者上级实体代码',
  9.   `entity_code_level1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '层级路径上的实体代码1',
  10.   `entity_name_level1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称1',
  11.   `entity_code_level2` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码2',
  12.   `entity_name_level2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称2',
  13.   `entity_code_level3` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码3',
  14.   `entity_name_level3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称3',
  15.   `entity_code_level4` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码4',
  16.   `entity_name_level4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称4',
  17.   `entity_code_level5` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码5',
  18.   `entity_name_level5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称5',
  19.   `entity_code_level6` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码6',
  20.   `entity_name_level6` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称6',
  21.   `entity_code_level7` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体代码7',
  22.   `entity_name_level7` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '层级路径上的实体名称7',
  23.   `participant_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '系统内唯一参与者标识符',
  24.   `role_id` bigint DEFAULT NULL COMMENT '参与者角色ID(如有)',
  25.   `category_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题所属大类编码',
  26.   `category_description` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '问题所属大类说明',
  27.   `question_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '具体问题的唯一编码',
  28.   `question_text` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '具体问题的内容描述',
  29.   `response_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '选择答案的编码(空值表示未作答)',
  30.   `response_text` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '选择答案的文本描述',
  31.   `points_awarded` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '此题获得的分数',
  32.   `domain_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '业务领域或专业条线代码',
  33.   `center_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '所属中心或部门代码',
  34.   `is_supervisor_flag` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '标记是否为管理层人员',
  35.   `employment_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用工性质(如正式、外包等)',
  36.   `sub_domain_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '业务领域的进一步细分代码',
  37.   PRIMARY KEY (`record_id` DESC) USING BTREE,
  38.   KEY `idx_entity_code_l0` (`entity_code_level0`) USING BTREE,
  39.   KEY `idx_participant` (`participant_id`) USING BTREE,
  40.   KEY `idx_entity_code_l1` (`entity_code_level1`) USING BTREE,
  41.   KEY `idx_entity_code_l2` (`entity_code_level2`) USING BTREE,
  42.   KEY `idx_entity_code_l3` (`entity_code_level3`) USING BTREE,
  43.   KEY `idx_entity_code_l4` (`entity_code_level4`) USING BTREE,
  44.   KEY `idx_entity_code_l5` (`entity_code_level5`) USING BTREE,
  45.   KEY `idx_entity_code_l6` (`entity_code_level6`) USING BTREE,
  46.   KEY `idx_entity_code_l7` (`entity_code_level7`) USING BTREE,
  47.   KEY `idx_domain` (`domain_code`) USING BTREE
  48. ) ENGINE=InnoDB AUTO_INCREMENT=956169 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='通用调研问卷回答明细日志表';
复制代码



三、执行sql

  1. SELECT
  2.     `role_id`,
  3.     `input_entity_code` AS v_org_code,       -- 输入参数:目标实体代码
  4.     `input_entity_name` AS v_org_name,       -- 输入参数:目标实体名称
  5.     `input_parent_entity_code` AS v_parent_org_code, -- 输入参数:目标父级实体代码
  6.     IFNULL(`domain_code`, '1') AS line,      -- 业务领域代码
  7.     '1' AS wt_id,                             -- 固定维度ID(示例)
  8.     IFNULL(`employment_type`, '1') AS job_type, -- 用工性质代码
  9.     ROUND(
  10.         CASE
  11.             WHEN IFNULL(COUNT(`question_code`), 0) = 0 THEN 0
  12.             ELSE SUM(`points_awarded`) / COUNT(`question_code`)
  13.         END, 2
  14.     ) AS total_avg,                           -- 整体平均得分(总体满意度)
  15.    
  16.     ROUND(
  17.         CASE
  18.             WHEN IFNULL(
  19.                     COUNT(
  20.                         CASE
  21.                             WHEN `category_description` = 'Category_A_Specific_Items' THEN `question_code`
  22.                         END
  23.                     ), 0
  24.                  ) = 0
  25.             THEN 0
  26.             ELSE SUM(
  27.                     CASE
  28.                         WHEN `category_description` = 'Category_A_Specific_Items' THEN `points_awarded`
  29.                     END
  30.                  ) /
  31.                  COUNT(
  32.                     CASE
  33.                         WHEN `category_description` = 'Category_A_Specific_Items' THEN `question_code`
  34.                     END
  35.                  )
  36.         END, 2
  37.     ) AS category_a_avg,                      -- 分类A平均得分(示例:对管理层满意度)

  38.     ROUND(
  39.         CASE
  40.             WHEN IFNULL(
  41.                     COUNT(
  42.                         CASE
  43.                             WHEN `category_description` = 'Category_B_Specific_Items' THEN `question_code`
  44.                         END
  45.                     ), 0
  46.                  ) = 0
  47.             THEN 0
  48.             ELSE SUM(
  49.                     CASE
  50.                         WHEN `category_description` = 'Category_B_Specific_Items' THEN `points_awarded`
  51.                     END
  52.                  ) /
  53.                  COUNT(
  54.                     CASE
  55.                         WHEN `category_description` = 'Category_B_Specific_Items' THEN `question_code`
  56.                     END
  57.                  )
  58.         END, 2
  59.     ) AS category_b_avg,                      -- 分类B平均得分(示例:对企业认同度)

  60.     ROUND(
  61.         CASE
  62.             WHEN IFNULL(
  63.                     COUNT(
  64.                         CASE
  65.                             WHEN `category_description` = 'Category_C_Specific_Items' THEN `question_code`
  66.                         END
  67.                     ), 0
  68.                  ) = 0
  69.             THEN 0
  70.             ELSE SUM(
  71.                     CASE
  72.                         WHEN `category_description` = 'Category_C_Specific_Items' THEN `points_awarded`
  73.                     END
  74.                  ) /
  75.                  COUNT(
  76.                     CASE
  77.                         WHEN `category_description` = 'Category_C_Specific_Items' THEN `question_code`
  78.                     END
  79.                  )
  80.         END, 2
  81.     ) AS category_c_avg,                      -- 分类C平均得分(示例:对工作本身满意度)

  82.     ROUND(
  83.         CASE
  84.             WHEN IFNULL(
  85.                     COUNT(
  86.                         CASE
  87.                             WHEN `category_description` = 'Category_D_Specific_Items' THEN `question_code`
  88.                         END
  89.                     ), 0
  90.                  ) = 0
  91.             THEN 0
  92.             ELSE SUM(
  93.                     CASE
  94.                         WHEN `category_description` = 'Category_D_Specific_Items' THEN `points_awarded`
  95.                     END
  96.                  ) /
  97.                  COUNT(
  98.                     CASE
  99.                         WHEN `category_description` = 'Category_D_Specific_Items' THEN `question_code`
  100.                     END
  101.                  )
  102.         END, 2
  103.     ) AS category_d_avg,                      -- 分类D平均得分(示例:对工作回报满意度)

  104.     ROUND(
  105.         CASE
  106.             WHEN IFNULL(
  107.                     COUNT(
  108.                         CASE
  109.                             WHEN `category_description` = 'Category_E_Specific_Items' THEN `question_code`
  110.                         END
  111.                     ), 0
  112.                  ) = 0
  113.             THEN 0
  114.             ELSE SUM(
  115.                     CASE
  116.                         WHEN `category_description` = 'Category_E_Specific_Items' THEN `points_awarded`
  117.                     END
  118.                  ) /
  119.                  COUNT(
  120.                     CASE
  121.                         WHEN `category_description` = 'Category_E_Specific_Items' THEN `question_code`
  122.                     END
  123.                  )
  124.         END, 2
  125.     ) AS category_e_avg,                      -- 分类E平均得分(示例:对员工关怀度)

  126.     COUNT(DISTINCT `participant_id`) AS curr_person,     -- 当前范围总人数
  127.     COUNT(DISTINCT CASE WHEN `question_code` IS NOT NULL THEN `participant_id` END) AS curr_answer, -- 实际参与答题人数
  128.     ROUND(
  129.         CASE
  130.             WHEN IFNULL(COUNT(DISTINCT `participant_id`), 0) = 0 THEN 0
  131.             ELSE (COUNT(DISTINCT CASE WHEN `question_code` IS NOT NULL THEN `participant_id` END) * 100.0)
  132.                  / COUNT(DISTINCT `participant_id`)
  133.         END, 2
  134.     ) AS curr_rate                            -- 答题参与率 (%)

  135. FROM `generic_survey_response_log`
  136. WHERE (
  137.        `entity_code_level0` = `input_entity_code` -- 匹配最直接归属
  138.     OR `entity_code_level1` = `input_entity_code` -- 匹配层级路径上第1级
  139.     OR `entity_code_level2` = `input_entity_code` -- 匹配层级路径上第2级
  140.     OR `entity_code_level3` = `input_entity_code` -- 匹配层级路径上第3级
  141.     OR `entity_code_level4` = `input_entity_code` -- 匹配层级路径上第4级
  142.     OR `entity_code_level5` = `input_entity_code` -- 匹配层级路径上第5级
  143.     OR `entity_code_level6` = `input_entity_code` -- 匹配层级路径上第6级
  144.     OR `entity_code_level7` = `input_entity_code` -- 匹配层级路径上第7级
  145. )
  146. GROUP BY
  147.     `domain_code`,      -- 按业务领域分组
  148.     `employment_type`   -- 按用工性质分组
  149.     WITH ROLLUP;        -- 生成小计和总计行
  150. -- 注意:脱敏后,如果 employment_type 字段没有 '1' 这个特殊值,
  151. -- 则原SQL中 "没有 '1',job_type" 的注释所指的缓存逻辑可能不再适用或需要调整。
  152. -- 此处保留了 WITH ROLLUP 以维持原始聚合意图。
复制代码



四、db状态

  1. turbo_compat_options        COMPAT_FUNC,TIMESTAMP_TO_DOUBLE,TIME_ZONE,TIMESTAMP_REWRITE
  2. turbo_condition_pushdown        OFF
  3. turbo_cost_threshold        0.000000
  4. turbo_enable        ON
  5. turbo_enable_ps_and_sp        ON
  6. turbo_enable_rollback        OFF
  7. turbo_enable_warning        OFF
  8. turbo_exec        
  9. turbo_index_range        OFF
  10. turbo_max_temp_directory_size        1073741824
  11. turbo_memory_limit        5368709120
  12. turbo_parallel_read_buffer_size        2097152
  13. turbo_release_retries        600
  14. turbo_retry_pause        1000
  15. turbo_skip_charset_check        OFF
  16. turbo_temp_directory        duckdb_dp.data.tmp
  17. turbo_worker_threads        4
复制代码


五、执行计划

全部回复(8)
yejr 6 天前
想要使用Turbo引擎,要在执行SELECT时每次都加上相应的HINT才行,执行 set global修改还不够。例如:

EXPLAIN FORMAT=TREE SELECT /*+ SET_VAR(turbo_enable=ON) SET_VAR(turbo_cost_threshold=0) */ * FROM t1;

详情参考手册:https://greatsql.cn/docs/8.4.4-4 ... f-turbo-engine.html
mlovewt 5 天前
yejr 发表于 2025-11-20 20:50
想要使用Turbo引擎,要在执行SELECT时每次都加上相应的HINT才行,执行 set global修改还不够。例如:

EXPL ...

好的我今天再试试
wangcw 5 天前
Turbo引擎是GreatSQL特有的么
yejr 5 天前
wangcw 发表于 2025-11-21 13:50
Turbo引擎是GreatSQL特有的么

mlovewt 5 天前

8.4.4-4 的并行查询 /*+ PQ(8) */ 这个取消了?
reddey 4 天前
mlovewt 发表于 2025-11-21 17:56
8.4.4-4 的并行查询 /*+ PQ(8) */ 这个取消了?

之前好像在社区文档中看到这样一句话,要取消并行查询的功能。
wangcw 3 天前
reddey 发表于 2025-11-22 17:19
之前好像在社区文档中看到这样一句话,要取消并行查询的功能。

并行查询会有引起很多事务一致性问题,需要强一致性的最好不用。
yejr 3 天前
mlovewt 发表于 2025-11-21 17:56
8.4.4-4 的并行查询 /*+ PQ(8) */ 这个取消了?

是的,这个功能现在取消了,可以改用Rapid或Turbo引擎
mlovewt

6

主题

0

博客

31

贡献

注册会员

Rank: 2

积分
51

助人为乐(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2025-11-26 01:21 , Processed in 0.020965 second(s), 17 queries , Redis On.
快速回复 返回顶部 返回列表