I guess so, because when the procedure is running, I was doing "select count(*) from uniquecatalog" from another mclient, the result is always the same :3654 rows, while in shell, the result is increasing every seconds.
------------------ 原始邮件 ------------------
发件人: "Radovan Bičiště";<radovan.biciste@ceosdata.com>;
发送时间: 2014年4月30日(星期三) 下午5:32
收件人: "users-list"<users-list@monetdb.org>;
主题: Re: why the same procedure (in shell or in sql) cost so differenttime?
Hi,
I'm not an expert. But I would suspect transaction processing could
cause it.
The big procedure is running in one transaction everything, the shell
script commits every execution of a procedure.
Radovan
On 04/30/2014 10:59 AM, integrity wrote:
> Hi All,
> I want to execute a batch of small sql stored procedures, for convenience, i put them totally in another big stored procedure: gwac_uniquecatalog, it cost 58 minutes:
> #!/bin/bash
> time mclient -d mydb -s "CALL gwac_uniquecatalog(99);"
> real 58m3.518s
>
> The time is so long that I tried to execute the small stored procedures one by one in SHELL, it only cost 6.5 minutes
> /usr/bin/time ./gwac_uniquecatalog.sh 99
> 2.82user 3.25system 6:30.39elapsed 1%CPU (0avgtext+0avgdata 10880maxresident)k
> 0inputs+0outputs (0major+980011minor)pagefaults 0swaps
>
> my question is why did this dramatic difference happen and how to reduce the time of big stored procedure?
> ===========================================================
> the content of the big stored procedure: gwac_uniquecatalog is
> CREATE PROCEDURE gwac_uniquecatalog(imgid int)
> BEGIN
> DECLARE imgid_t int;
> SET imgid_t =1;
> CALL insert_1_to_1_assoc(imgid_t); --对第一幅图 only insert into assoc is enough
> SET imgid_t = imgid_t +1;
>
> WHILE (imgid_t<=imgid)
> DO
> CALL insert_tempuniquecatalog(imgid_t,10.0); --10 is match radius 对第二幅图及以后的图
> CALL find_n_to_m();
>
> CALL insert_1_to_n_unique();
> CALL insert_new_1_to_n_assoc();
> CALL insert_1_to_n_assoc();
> CALL delete_1_to_n_inactive_assoc();
> CALL flag_1_to_n_inactive_uniq();
> CALL flag_1_to_n_inactive_tempuniq();
>
> CALL insert_1_to_1_assoc(imgid_t);
> CALL update_1_to_1_uniq();
>
> CALL insert_new_uniq(imgid_t);
> CALL insert_new_assoc(imgid_t);
> SET imgid_t = imgid_t +1;
> END WHILE;
> END;
> ===========================================
> the SHELL code is:
> #!/bin/bash
> imgid_t=1
>
> /usr/bin/time -f %e mclient -d mydb -s "CALL insert_1_to_1_assoc(imgid_t -le $1 ]
> do
> /usr/bin/time -f %e mclient -d mydb -s " CALL insert_tempuniquecatalog($imgid_t,10.0);"
> mclient -d mydb -s " CALL find_n_to_m();"
> mclient -d mydb -s " CALL insert_1_to_n_unique(); "
> mclient -d mydb -s " CALL insert_new_1_to_n_assoc();"
> mclient -d mydb -s " CALL insert_1_to_n_assoc();"
> mclient -d mydb -s " CALL delete_1_to_n_inactive_assoc();"
> mclient -d mydb -s " CALL flag_1_to_n_inactive_uniq();"
> mclient -d mydb -s " CALL flag_1_to_n_inactive_tempuniq();"
> mclient -d mydb -s " CALL insert_1_to_1_assoc($imgid_t);"
> mclient -d mydb -s " CALL update_1_to_1_uniq();"
> mclient -d mydb -s " CALL insert_new_uniq($imgid_t);"
> mclient -d mydb -s " CALL insert_new_assoc(imgid_t
>
> ((++imgid_t))
> done
>
> Thanks very much!
> Best regards,
>
> Meng
> _______________________________________________
> users-list mailing list
> users-list@monetdb.org
> https://www.monetdb.org/mailman/listinfo/users-list
>
--
__________________________
Radovan Bičiště
ceos data s.r.o.
Pouchovská 153
500 03 Hradec Králové
Czech Republic
mobil CZ: +420 601 563 014
skype: rbiciste
_______________________________________________
users-list mailing list
users-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/users-list