如何监控PostgreSQL中每个进程使用的CPU和内存百分比

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

(0)
上一篇 2023-03-20 17:52
下一篇 2023-03-20 22:11

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注