摘要:
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);
出现的问题:
场景描述:
- 子查询出现在谓词处, 也就是where后
- 子查询谓词使用等号谓词 (=号)
- 开启多线程并行hash join
- set global tianmu_force_hashjoin=ON
- set global tianmu_join_parallel=1
问题描述:
- 多线程并行hash join开启后, 等号谓词将使用多线程并行hash join
- 多线程并行hash join开启新的线程, 脱离了查询线程
一. ParallelHashJoiner 的新开辟的子线程没有保持查询线程的 THD
造成的问题:
- crash
解决策略:
- 将查询线程的THD赋值给子线程
二. ParallelHashJoiner 的新开辟的子线程的堆栈异常
造成的问题:
- https://github.com/stoneatom/stonedb/issues/851
解决策略:
TODO:
三. Tianmu::core::TransactionSequenceGenerator 异常
造成的问题:
- crash
解决策略:
TODO: