源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 1
来源:互联网 发布:java布局方式 编辑:程序博客网 时间:2024/05/21 06:41
数据库性能调优,在所参与的项目中,这个词向来都是很底层(高大上)的概念,如今,咱也接触到了。嘿嘿。
--第18章 PL/SQL性能优化建议--代码18.1 使用Nocopy提升性能DECLARE TYPE test_tbl_type IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER; --定义索引表类型 test_tbl test_tbl_type; --定义索引表类型的变量 --定义内嵌子程序,在IN OUT参数中使用NOCOPY提示来按引用传递 PROCEDURE TEST (arg_cnt IN PLS_INTEGER, arg_tbl IN OUT nocopy test_tbl_type) IS BEGIN FOR cnt_test IN test_tbl.FIRST .. arg_tbl.LAST --依序循环索引表 LOOP arg_tbl (cnt_test) := arg_tbl (cnt_test) + arg_cnt; --为形式参数表赋值 END LOOP; END;BEGIN FOR cnt IN 0 .. 10000 LOOP test_tbl (cnt) := cnt; --初始一个较大的索引表 END LOOP; FOR cnt IN 0 .. 10000 LOOP TEST (cnt, test_tbl); --分10000次调用函数,用来测试性能 END LOOP;END;/--代码18.2 使用批处理一次性获取所有数据DECLARE TYPE emp_tbl_type IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER; --定义索引表类型 emp_tbl emp_tbl_type; --定义索引表变量 CURSOR emp_cur IS SELECT * FROM emp; --定义打开员工资料的游标BEGIN OPEN emp_cur; --打开游标 FETCH emp_cur BULK COLLECT INTO emp_tbl; --批量提取游标数据 CLOSE emp_cur; --关闭游标END;/--配置PROFILER方案以sysdba权限执行以下语句create user profiler identified by 12345;grant connect, resource to profiler;create public synonym plsql_profiler_runs for profiler.plsql_profiler_runs;create public synonym plsql_profiler_units for profiler.plsql_profiler_units;create public synonym plsql_profiler_data for profiler.plsql_profiler_data;create public synonym plsql_profiler_runnumber for profiler.plsql_profiler_runnumber;--配置PROFILER表conn profiler/12345@?/rdbms/admin/proftab.sqldrop table plsql_profiler_data cascade constraints;--分配public角色grant select on plsql_profiler_runnumber to public;grant select,insert,update,delete on plsql_profiler_data to public;grant select,insert,update,delete on plsql_profiler_units to public;grant select,insert,update,delete on plsql_profiler_runs to public;--代码18.3 创建要被测试的过程CREATE TABLE pro_tst_table (a INT); --创建测试表CREATE OR REPLACE PROCEDURE sp_test --创建测试过程ASBEGIN FOR i IN 1 .. 10000 LOOP INSERT INTO pro_tst_table --向表中插入10000行记录 VALUES (i); END LOOP; COMMIT;END;/TRUNCATE TABLE pro_tst_table;--代码18.4 使用DBMS_profiler来测试包DECLARE v_run_number integer; --保存PROFILER的运行号码BEGIN --启动PROFILER DBMS_PROFILER.start_profiler (run_number => v_run_number); --显示当前跟踪的运行序号(后面查询要用) DBMS_OUTPUT.put_line ('run_number:' || v_run_number); --运行要跟踪的PLSQL sp_test; --停止profiler DBMS_PROFILER.stop_profiler;END;/--查询profiler获取结果SELECT runid, run_owner, run_date, run_total_time FROM plsql_profiler_runs;--查询单元信息SELECT unit_number, unit_type, unit_owner, unit_name, unit_timestamp, total_time FROM plsql_profiler_units WHERE runid = 3 AND unit_name = 'SP_TEST'; --查询存储过程的统计信息SELECT runid, unit_number, line#, total_occur, total_time, min_time, max_time FROM plsql_profiler_data WHERE runid = 3 AND unit_number = 2;
0 0
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 1
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 2
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 1
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 2
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 1
- 源码-PL/SQL从入门到精通-第十六章-动态SQL语句-Part 1
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 1
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 1
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 1
- 源码-PL/SQL从入门到精通-第十章-使用游标-Part 1
- 源码-PL/SQL从入门到精通-第十二章-异常处理机制-Part 1
- 源码-PL/SQL从入门到精通-第十三章-子程序-Part 1
- 源码-PL/SQL从入门到精通-第十四章-包-Part 1
- 源码-PL/SQL从入门到精通-第十五章-触发器-Part 1
- 源码-PL/SQL从入门到精通-第十七章-面向对象编程-Part 1
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 2
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 3
- stagefright中的编解码缓存区进行分析
- poj1201 intervals
- Git+GitHub,构建自己的开源仓库之Git分支
- web.xml文件详解
- HDU 5754 Life Winner Bo(博弈)
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 1
- 关于系统设计
- Google Protocol Buffer 的使用和原理
- git忽略跟踪已在远程仓库里的文件
- android之ConnectivityManager简介,网络连接状态
- 计划任务
- sdut oj3327 顺序表应用4:元素位置互换之逆置算法
- java JNI 实现原理 (一)
- 环境搭建基础知识3(sublime text3常用快捷方式 列操作)