VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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)