DBMS_PROFILER
提供了一个接口,用于概要分析现有的PL/pgSQL应用程序并确定性能瓶颈。然后,可以收集并永久存储收集的PL /pgSQL执行的性能数据。
收集器相关表名 | 描述 |
plsql_profiler_runs | 记录运行中的收集器信息 |
plsql_profiler_units | 有关运行中每个库单元的信息 |
plsql_profiler_data | 收集器收集的详细数据 |
plsql_profiler_runnumber序列 | 生成唯一 运行编号 |
函数名 | 参数类型 | 结果类型 | 描述 |
start_profiler | null | integer | 在用户会话中启动事件探查器数据收集。启动一次数据收集就要start_profiler,中间可以暂停,继续,或者刷新数据,如果一直不stop_profiler,则收集器就一直在收集plpgsql执行的性能数据。若不执行start_profiler,执行stop_profiler,或者暂停,继续,刷新数据都不出错,只是没有实际的数据收集而已。 |
stop_profiler | null | integer | 停止用户会话中的探查器数据收集 |
pause_profiler | null | integer | 暂停探查器数据收集 |
flush_data | null | integer | 刷新在用户会话中收集的探查器数据 |
rollup_unit | run_nember integer,unit integer | null | 计算对应runid和unit所花费的时间 |
rollup_run | integer | null | 统计指定runid收集器下所有unit所花费的时间 |
1、创建并进入oracle兼容库testoracle。
CREATE DATABASE testoracle DBCOMPATIBILITY='A';
\c testoracle
2、加载sql文件创建收集器环境,如执行报错可打开sql文件手动执行其中sql语句。
\i ./local/vastbase/share/postgresql/proload.sql;
3、创建测试表。
CREATE TABLE tab_test(col int);
4、创建要统计PL/pgSQL性能的存储过程sp_test。
create or replace procedure sp_test
as
begin
for i in 1..100
loop
insert into tab_test values(1);
end loop;
end;
/
5、创建要统计PL/pgSQL性能的存储过程sp_test2。
create or replace procedure sp_test2
as
begin
for i in 1..10000
loop
insert into tab_test values(i);
end loop;
end;
/
6、统计sp_test的执行性能。
select dbms_profiler.start_profiler('sp');
7、调用存储过程sp_test,sp_test2。
call sp_test();
select dbms_profiler.flush_data();
select dbms_profiler.pause_profiler();
call sp_test2();
select dbms_profiler.resume_profiler();
select dbms_profiler.stop_profiler();
select dbms_profiler.rollup_unit(1,1);
select dbms_profiler.rollup_run(1);
8、查询结果。
select * from plsql_profiler_runs;
结果显示如下:
runid | related_run | run_owner | run_date | run_comment | run_total_time | run_system_info | run_comment1 | spare1
-------+-------------+-----------+----------------------------+-------------+----------------+-----------------+--------------+--------
1 | 0 | vastbase | 2022-06-28 01:58:56.578502 | sp | 6668 | | |
(1 row)
testoracle=# select * from plsql_profiler_units;
runid | unit_number | unit_type | unit_owner | unit_name | unit_timestamp | total_time | spare1 | spare2
-------+-------------+-----------+------------+-----------+----------------------------+------------+--------+--------
1 | 1 | PROCEDURE | vastbase | sp_test | 2022-06-28 01:59:02.830512 | 3334 | |
(1 row)
testoracle=# select * from plsql_profiler_data;
runid | unit_number | line# | total_occur | total_time | min_time | max_time | spare1 | spare2 | spare3 | spare4
-------+-------------+-------+-------------+------------+----------+----------+--------+--------+--------+--------
1 | 1 | 4 | 1 | 1730 | 1730 | 1730 | | | |
1 | 1 | 6 | 100 | 1604 | 9 | 26 | | | |
(2 rows)