SingleStore过程RowLock问题

问题描述 投票:0回答:1

我有此处显示的 SINGLESTORE 存储过程,它在插入 800 万行时进入行锁。插入60k-80k,运行正常。

我收到的错误如下。我不确定,如何更改此查询并分块运行以避免锁定。有人可以建议我更好的解决方案吗?我希望它逐行运行但没有锁。

call name('ABC');

发现行锁冲突(属于节点x中的连接62269。35秒后重试语句,插入GG......)

create or replace procedure name (prcs) returns void as
declare 

R query(id text, cd txt, date timetamp(6), date_2 timestamp(6));
r_arr array(record(id text, cd txt, date timetamp(6), date_2 timestamp(6)));
tbnm=varchar(25);
exception_message text='';
begin
if prcs ='A' then
tbnm='X';
R=select X.id , X.cd , X.date, Z.date_2 from X inner join z on X.id=z.id;
else 
tbnm='Y';
R=select Y.id , Y.cd , Y.date, Z.date_2 from Y inner join z on Y.id=z.id;
endif;

r_arr=collect(r);

for record in r_arr loop
if record.cd='I' and record.date_2>=record.date1
then
execute immediate concat('insert into log_tbl values (current_timestamp, prcs, record.id, record.cd, 'Reject')');
end if;
if
(record.cd='I' and record.date_2<record.date)
then 
begin
execute immediate concate('insert into GG select *  /*all columns*/
from 'tbnm' x where x.id=record.id');
exception
when others then 
begin 
exception_message=exception_message();
exception_message=replace(replace(exception_message,'`',''),'\'','');
excecute immedate concat('insert into log_tbl values(current_timestamp, prcs, record.id, record.cd, 'Fail')');
end;
end if;
end loop;
end;

我尝试过将表名称作为输入参数传递,但效果不佳。我觉得插入语句有问题。

stored-procedures cursor singlestore
1个回答
0
投票

您需要看看这是什么

62269
正在运行。

从 information_schema.mv_processlist 中选择*; 看看这个62269在做什么。

并且可以增加超时时间。

© www.soinside.com 2019 - 2024. All rights reserved.