PostgreSQL 中的 pg_stat_activity 视图,可用于获取会话详细信息。此视图提供以下信息:
1. datid: database OID
2. datname: database name
3. procpid: process ID
4. usesysid: user OID
5. usename: user name
6. application_name: application name
7. client_addr: client's address
8. client_hostname: host name (if available)
9. client_port: Clients port number
10. backend_start: time at which the server process started
11. xact_start: time at which current transaction started
12: query_start: time at which current query began execution started
13: waiting: process's waiting status
14. current_query: text of the current query.
以上内容对于监控 postgresql
中的会话很有用。但是,假设用户想知道特定会话/用户使用的 CPU 和内存的百分比,那么可以结合 plperlu
函数获取此信息。
创建 pleperlu
函数前,需要在数据库中安装 plperlu
语言。要创建 plperlu
,请以超级用户身份连接到数据库并执行以下命令:
edb=# CREATE EXTENSION plperlu;
CREATE EXTENSION
创建以下函数:
CREATE OR REPLACE FUNCTION get_pid_cpu_mem(int) returns table(PID INT,CPU_perc float,MEM_perc float)
as
$$
my $ps = "ps aux";
my $awk = "awk '{if (\$2==".$_[0]."){print \$2\":\"\$3\":\"\$4}}'";
my $cmd = $ps."|".$awk;
$output = `$cmd 2>&1`;
@output = split(/[\n\r]+/,$output);
foreach $out (@output)
{
my @line = split(/:/,$out);
return_next{'pid' => $line[0],'cpu_perc' => $line[1], 'mem_perc' => $line[2]};
return undef;
}
return;
$$ language plperlu;
注意:以上功能是为在 Linux/Unix
系统上运行的 PostgreSQL
创建的。
现在用户可以将上述函数与 pg_stat_activity 一起使用来监视特定用户/进程使用的 cpu 和内存的百分比。
示例如下:
edb=# select procpid,usename,application_name, get_pid_cpu_mem(procpid).cpu_perc,get_pid_cpu_mem(procpid).mem_perc,current_query from pg_stat_activity;
-[ RECORD 1 ]----+--------------------------------------------------------------------------------------------------------------------------------------------------
procpid | 12991
usename | enterprisedb
application_name | psql
cpu_perc | 0
mem_perc | 0.6
current_query | select procpid,usename,application_name, get_pid_cpu_mem(procpid).cpu_perc,get_pid_cpu_mem(procpid).mem_perc,current_query from pg_stat_activity;
本文根据EDB翻译而来,不代表烟海拾贝立场,如若转载,请注明出处:https://somirror.com/5461.html