0
点赞
收藏
分享

微信扫一扫

2022-11-01 mysql列存储引擎-自定义函数-并行hashJoin问题


摘要:

mysql列存储引擎-自定义函数-并行hashJoin问题

关联: ​​2022-09-09 mysql列存储引擎-POC-需求分析-第二版-有问题的SQL_帝尊悟世的博客

相关问题: ​​https://stoneatom.yuque.com/staff-ft8n1u/luxxoy/dc73f9​​

function:

CREATE FUNCTION get_desc(id INT) RETURNS VARCHAR(300) 
RETURN (SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE employee_id=id);

CREATE FUNCTION get_int(id INT) RETURNS VARCHAR(300)
RETURN (SELECT employee_salary FROM employees WHERE employee_id=id);

DDL:

表结构:

CREATE TABLE `employees` (
`employee_id` int(11) NOT NULL ,
`employee_name` varchar(50) NOT NULL,
`employee_sex` varchar(10) DEFAULT 'men',
`hire_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`employee_mgr` int(11) DEFAULT NULL,
`employee_salary` float DEFAULT '3000',
`department_id` int(11) DEFAULT NULL
) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4;

插入数据:

INSERT INTO employees(employee_id,employee_name,employee_sex,employee_mgr,employee_salary,department_id) VALUES (1,'David Tian','man',10,7500,1);
INSERT INTO employees(employee_id,employee_name,employee_sex,employee_mgr,employee_salary,department_id) VALUES (2,'Black Xie','man',10,6600,1);
INSERT INTO employees(employee_id,employee_name,employee_sex,employee_mgr,employee_salary,department_id) VALUES (3,'Moses Wang','man',10,4300,1);
INSERT INTO employees(employee_id,employee_name,employee_sex,employee_mgr,employee_salary,department_id) VALUES (4,'Rena Ruan','woman',10,5300,1);
INSERT INTO employees(employee_id,employee_name,employee_sex,employee_mgr,employee_salary,department_id) VALUES (5,'Sunshine Ma','woman',10,6500,2);

查询语句:

SELECT
a.employee_id,
get_desc(b.employee_id)
FROM
employees a
LEFT JOIN employees b ON
b.employee_name = 'David Tian'
WHERE
a.employee_salary = get_int(b.employee_id);

出现的问题:

场景描述:

  1. 子查询出现在谓词处, 也就是where后
  2. 子查询谓词使用等号谓词  (=号)
  3. 开启多线程并行hash join
  1. set global tianmu_force_hashjoin=ON
  2. set global tianmu_join_parallel=1

问题描述:

  1. 多线程并行hash join开启后, 等号谓词将使用多线程并行hash join
  2. 多线程并行hash join开启新的线程, 脱离了查询线程

一. ParallelHashJoiner 的新开辟的子线程没有保持查询线程的 THD

造成的问题:

  1.  crash

解决策略:

  1. 将查询线程的THD赋值给子线程

二. ParallelHashJoiner  的新开辟的子线程的堆栈异常

造成的问题:

  1. ​​https://github.com/stoneatom/stonedb/issues/851​​

解决策略:

TODO:

三. Tianmu::core::TransactionSequenceGenerator 异常

造成的问题:

  1. crash

解决策略:

TODO:

举报

相关推荐

0 条评论