使用数据库事务将多个更新分组时,我是否应该在事务中包含SELECT?例如,让我说:
我应该在"获取记录"阶段之前开始交易,还是围绕更新?
我正在使用Postgres/Django,transaction.atomic()但我认为这不重要.
我有两个嵌套游标的功能.外部光标从源获取客户的付款详细信息,并根据某些业务逻辑插入到目标中.内部光标接受每笔付款的付款细节,它一个接一个地发生.
付款表有大约125000行,大约335000行用于付款详细信息.所有这些行都将迁移到目标表.执行该功能需要两个多小时,数据库CPU使用率高达99%.
我正在使用PostgreSQL 9.2.
如何提高功能的性能?
我正在使用的代码:
CREATE OR REPLACE FUNCTION ccdb_dummy.o_payments1(a integer)
RETURNS void AS
$BODY$
DECLARE
cursor_1 refcursor;
cursor_2 refcursor;
rowcount integer;
rowcount1 integer;
payment_no bigint;
query_1 character varying(250);
lc_cin_num bigint;
test character varying(50);
t_payments ccdb_stg.o_payments_stg%ROWTYPE;
t_payments_details ccdb_stg.o_payment_head_dtls_stg%ROWTYPE;
BEGIN
rowcount := 0;
open cursor_1 for select * from ccdb_stg.o_payments_stg WHERE section_code = a;
select count(1) into rowcount from ccdb_stg.o_payments_stg WHERE section_code = a;
for i IN 1..rowcount loop
fetch cursor_1 into t_payments;
payment_no= nextval('ccdb_stg.payments_seq');
select cin into lc_cin_num from …Run Code Online (Sandbox Code Playgroud)