PostgreSQL pg_profile 函数

1 背景知识

本文介绍 pg_profile 相关函数和使用方式。

2 服务器函数

2.1 create_server

  1. 创建远程服务器连接。
create_server(server name, server_connstr text, server_enabled boolean = TRUE, max_sample_age integer = NULL, description text = NULL) 
  1. 参数说明
参数 说明
server 指定远程服务器的名字,必须唯一。
server_connstr 指定远程服务器连接串。
enabled 指定此服务是否启用,能否被 take_sample 调用。
max_sample_age 指定最大的采样数量,如果未设置由 [[PostgreSQL pg_profile 参数#2.2 pg_profile.max_sample_age = 7]] 指定
description 远程服务的描述。

2.2 drop_server

  1. 函数语法。
drop_server(server name) 
  1. 函数说明。
    删除服务器及其所有示例。

2.3 enable_server

  1. 函数语法。
enable_server(server name) 
  1. 函数说明。
    take_sample() 启用收集统计信息。

2.4 disable_server

  1. 函数语法。
disable_server(server name) 
  1. 函数说明。
    take_sample() 禁用用收集统计信息。

2.5 rename_server

  1. 函数语法。
rename_server(server name, new_name name)
  1. 函数说明。
    重命名服务器。

2.6 set_server_max_sample_age

  1. 函数语法。
set_server_max_sample_age(server name, max_sample_age integer) 
  1. 函数说明。
    指定服务器统计信息的保留期(以天为单位)。max_sample_age 是整数值。若要重置服务器 max_sample_age 设置,请将其设置为 NULL。

2.7 set_server_db_exclude

  1. 函数语法。
set_server_db_exclude(server name, exclude_db name[])
  1. 函数说明。
    设置无需收集的数据库列表。适用于无法连接到集群中的某些数据库(例如在 mazon RDS 实例中)时使用。

2.8 set_server_connstr

  1. 函数语法。
set_server_connstr(server name, new_connstr text)
  1. 函数说明。
    为服务器设置新的连接字符串。

2.9 set_server_description

  1. 函数语法。
set_server_description(server name, description text) Set new server description.
  1. 函数说明。
    设置新的服务器描述。

2.10 show_servers()

显示现有服务器。

3 统计信息采样函数

3.1 take_sample

  1. 函数语法。
take_sample()
take_sample(server name [, skip_sizes boolean]) 
  1. 函数说明。
    此函数将会按照顺序一个一个的收集所有启用的 服务器连接 的统计信息。返回信息格式如下:
server      name,
result      text,
elapsed     interval
返回值 说明
server 返回服务器连接名称。
result 返回服务器连接是否成功,如果连接成功返回OK,如果返回失败则显示报错信息。
elapsed 返回统计信息采样所花费的时间。

3.2 show_samples

  1. 函数语法。
show_samples([server name,] [days integer]) 
  1. 函数说明。
    返回所有的采集快照。如果指定 days 参数,则返回最近几天的采集快照。
sample            integer,
sample_time       timestamp (0) with time zone,
sizes_collected   boolean,
dbstats_reset     timestamp (0) with time zone,
clustats_reset    timestamp (0) with time zone,
archstats_reset   timestamp (0) with time zone
返回值 说明
sample 快照标识符
sample_time 生成快照的时间。
sizes_collected 如果数据库中的对象的大小已被收集,则为true。
dbstat_reset
clustats_reset
archstats_reset

3.3 delete_samples

  1. 函数语法。
delete_samples([server_name name] [, start_id integer, end_id integer]) 
delete_samples(server_name name, time_range tstzrange)
  1. 函数说明。
    此函数用于删除指定时间范围的快照。
参数 说明
start_id 指定快照的删除起始id。
end_id 指定快照的删除终止id。
server_name 服务器名称
time_range 时间范围

4 子快照函数

4.1 take_subsample ()

  1. 函数语法。
take_subsample()
  1. 函数说明。
    采集一个子快照。

4.2 set_server_subsampling

  1. 函数语法。
set_server_subsampling(server name, subsample_enabled boolean, min_query_duration interval, min_xact_duration interval, min_xact_age integer, min_idle_xact_dur interval hour to second) 
  1. 函数说明。

设置服务器的子快照收集相关设置。

参数 说明
subsample_enabled 是否启用子采样任务。
min_query_duration 查询时长的阈值。
min_xact_duration 事务持续时间阈值。
min_xact_age 事务年龄的阈值。
min_idle_xact_dur 空闲事务阈值。

4.3 take_sample_subset

  1. 函数语法。
take_sample_subset([sets_cnt integer], [current_set integer])
  1. 函数说明。
    由于 服务器连接 收集子任务采样信息。

set_cnt 是服务器子任务收集的数量。
current_set 是当前服务器要处理的子任务的数量。

server      name,
result      text,
elapsed     interval
返回值 说明
server 返回服务器连接名称。
result 返回服务器连接是否成功,如果连接成功返回OK,如果返回失败则显示报错信息。
elapsed 返回统计信息采样所花费的时间。

5 基线函数

5.1 create_baseline

  1. 函数语法。
create_baseline([server name,] baseline_name varchar(25), start_id integer, end_id integer [, days integer])
create_baseline([server name,] baseline_name varchar(25), time_range tstzrange [, days integer])
  1. 函数说明。
    创建一个基线。
参数 说明
server 服务器名称。如果省略,则假定为本地服务器
name 基线名称。每个基线在服务器中必须具有唯一的名称。
start_id,end_id 将第一个快照和最后一个快照,包含在此基线中。
days 基线保留时间。自 now() 起以整数天为单位定义。此参数可以省略(或设置为 null),这意味着无限保留。
time_range 基线时间间隔。基线将包括所有可用样本,与此间隔重叠。

5.2 drop_baseline

  1. 函数语法。
drop_baseline([server name,] name varchar(25))
  1. 函数说明。
    删除一个基线。
参数 说明
server 服务器名称。如果省略,则假定为本地服务器。
name 要删除的基线名称。删除基线并不意味着立即删除其所有样本,它们只是被排除在基线之外,因此基线保留不会涵盖更多内容。

5.3 keep_baseline

  1. 函数语法。
keep_baseline([server name,] name varchar(25) [, days integer])
  1. 函数说明。
    设置基线的保留策略。
参数 说明
server 服务器名称。如果省略,则假定为本地服务器。
name 基线名称。可以省略此参数(或设置为 null)以更改所有现有基线的保留期。
days 基线的保留时间(以天为单位,从现在开始())。此外,可以省略(或设置为 null)以设置无限保留。

5.4 show_baselines

  1. 函数语法。
show_baselines([server name])
  1. 函数说明。
    显示基线列表。
参数 说明
server 服务器名称。如果省略,则假定为本地服务器

6 报告函数

6.1 get_report

  1. 按照快照标识符生成报告。
get_report([server name,] start_id integer, end_id integer [, description text [, with_growth boolean]]) - generate report by sample identifiers
  1. 按照时间范围生成报告。
get_report([server name,] time_range tstzrange [, description text [, with_growth boolean]]) 
  1. 按照基线生成报告。
get_report([server name], baseline varchar(25) [, description text [, with_growth boolean]]) 

6.2 get_report_latest

  1. 生成两个最新生成的快照的报告。
get_report_latest([server name])
参数 说明
server name 服务器名称。如果省略,则为local
start_id 快照开始的id序列号。
end_id 快照结束的id序列号。
time_range 时间范围(tstzrange 类型)。
baseline 一个基准名称。
with_growth 一个标记参数,指定end_id 序列号为最新的快照。
description 备忘录,这将被包含文本报告中。

7 get_diffreport

可以使用快照标识符,基线和时间范围作为间隔参数生成差异报告。

7.1 单一参数传参

  1. 按照快照标识符作为间隔参数,生成两个区间的差异报告。
get_diffreport([server name,] start1_id integer, end1_id integer, start2_id integer, end2_id integer [, description text [, with_growth boolean]])
  1. 按照基线作为间隔参数,生成两个区间的差异报告。
get_diffreport([server name,] baseline1 varchar(25), baseline2 varchar(25) [, description text [, with_growth boolean]]) 
  1. 按照 tstzrange 类型作为时间范围间隔参数,生成两个区间的差异报告。
get_diffreport([server name,] time_range1 tstzrange, time_range2 tstzrange [, description text [, with_growth boolean]]) 

7.2 照混合传参

  1. 按照基线和时间范围,生成两个区间的差异报告。
get_diffreport([server name,] baseline varchar(25), time_range tstzrange [, description text [, with_growth boolean]])
  1. 按照时间范围和基线,生成两个区间的差异报告。
get_diffreport([server name,] time_range tstzrange, baseline varchar(25) [, description text [, with_growth boolean]])
  1. 按照快照区间ID和基线,生成两个区间的差异报告。
get_diffreport([server name,] start1_id integer, end1_id integer, baseline varchar(25) [, description text [, with_growth boolean]])
  1. 按照基线和快照ID,生成两个区间的差异报告。
get_diffreport([server name,] baseline varchar(25), start2_id integer, end2_id integer [, description text [, with_growth boolean]])

8 统计信息导入导出函数

8.1 export()

  1. 函数语法。
export_data([server name, [min_sample_id integer,] [max_sample_id integer]] [, obfuscate_queries boolean]) 
  1. 函数说明。
    导出统计信息数据。
参数 说明
server name 服务器名称。如果省略,则为local
min_sample_id 快照开始的id序列号。
max_sample_id 快照结束的id序列号。
obfuscate_queries 加密查询,将输出的数据进行MD5值加密。

8.2 import()

  1. 函数语法。
import_data(data regclass, server_name_prefix text)
  1. 函数说明。
参数 说明
data 包含需要导入统计信息的表。
server_name_prefix 用于在服务器连接前添加前缀。

所有服务器连接都会被添加禁止标签。

如果想要新追加数据请,不要设置此函数的服务器连接的前缀(server_name_prefix)参数。
如果想要重命名服务器连接请,设置前缀(server_name_prefix)参数,以区别不同的统计信息数据。

导入统计信息数据之后可以删除 import 表。