暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片
Oracle&Python并发Insert测试脚本.pdf
67
7页
3次
2025-04-08
10墨值下载
最近开发反馈订单表交易量上来后,Insert 效率比较低。发现订单表已经做了分区表,但索引全
部为普通的全局索引。优化方案将唯一索引改为Hash全局索引(唯一索引无法做本地索引),其它索
引改为本地索引,减少索引维护的数据量及分散IO,从而缓解enq: TX - index contention等待事件。
通过如下脚本进行压力测试,从而观察效果。
需求分析
存储过程
CREATE OR REPLACE PROCEDURE insert_loop_data (1
p_tab in varchar2,2
p_total_rows IN NUMBER -- 定义插入次数参数3
) AS4
v_start_time NUMBER; -- 记录开始时间5
v_end_time NUMBER; -- 记录结束时间6
v_elapsed_sec NUMBER(10,3); -- 耗时(秒)7
v_uuid_20 VARCHAR2(20); -- 存储 RAW 格式的 UUID8
v_uuid_32 VARCHAR2(32); -- 存储带连字符的 UUID 字符串9
BEGIN10
v_start_time := DBMS_UTILITY.GET_TIME; -- 记录开始时间11
12
-- 循环插入数据13
FOR i IN 1..p_total_rows LOOP14
-- 生成 UUID15
v_uuid_20 := SUBSTR(RAWTOHEX(SYS_GUID()),1,20);16
v_uuid_32 := RAWTOHEX(SYS_GUID());17
if p_tab = 'BANK_ORDER_OLD' then18
-- 插入操作19
insert into BANK_ORDER_OLD (ID,ORDER_ID , AMT, ORDER_STATUS, CREATED_TS)20
values (v_uuid_32, v_uuid_20, 100,1, sysdate);21
elsif p_tab = 'BANK_ORDER_NEW' then22
insert into BANK_ORDER_NEW (ID,ORDER_ID , AMT, ORDER_STATUS, CREATED_TS)23
values (v_uuid_32, v_uuid_20, 100,1, sysdate);24
else25
DBMS_OUTPUT.PUT_LINE('参数异常:[' ||p_tab||','|| p_total_rows || '] 条数
');
26
END IF ;27
COMMIT; -- 提交事务(可根据需求调整提交频率)28
END LOOP; 29
v_end_time := DBMS_UTILITY.GET_TIME;30
31
-- 计算耗时(单位:秒)32
v_elapsed_sec := (v_end_time - v_start_time) / 100;33
34
-- 输出耗时和统计信息35
DBMS_OUTPUT.PUT_LINE('===========================');36
DBMS_OUTPUT.PUT_LINE(p_tab||':总插入行数 : ' || p_total_rows);37
DBMS_OUTPUT.PUT_LINE(p_tab||':总耗时 : ' || v_elapsed_sec || ' ');38
DBMS_OUTPUT.PUT_LINE(p_tab||':平均速度 : ' || ROUND(p_total_rows / v_elapsed_sec)
|| ' /');
39
EXCEPTION40
WHEN OTHERS THEN41
ROLLBACK; -- 异常回滚42
DBMS_OUTPUT.PUT_LINE('插入失败: ' || SQLERRM);43
END;44
存储过程输出
SQL> set serveroutput on 1
SQL> truncate table BANK_ORDER_OLD;2
Table truncated3
SQL> exec insert_loop_data('BANK_ORDER_OLD','100000');4
===========================5
BANK_ORDER_OLD:总插入行数 : 1000006
BANK_ORDER_OLD:总耗时 : 21.68 7
BANK_ORDER_OLD:平均速度 : 4613 /8
PL/SQL procedure successfully completed9
Python 并发脚本
of 7
10墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。