我们在Kubernetes中运行Postgres。我们的Prometheus pod监控总是显示Postgres以共享或缓存状态填充整个pod内存。
free -h
total used free shared buff/cache available
Mem: 62G 1.7G 13G 11G 47G 48G
ps -u postgres o pid= | sed 's#.*#/proc/&/smaps
我有一个从Matlab到postgres服务器的开放连接,最后一个查询是insert into table_name ...,当我使用以下命令查看数据库服务器上的进程时,它的状态为idle:
SELECT datname,pid,state,query FROM pg_stat_activity;
我试图在table_name上创建一个唯一的索引,但这花费了很长时间,pgadmin进程没有明显的CPU使用率。当我关闭来自Matlab的连接时,查询从pg_stat_activity中删除,并且立即构建了唯一索引。
空闲的查询是否是花了这么长时间来构建索引的原因?
我正在尝试删除一个数据库。我重新启动了Postgresql服务:
sudo systemctl stop postgresql
sudo systemctl start postgresql
然而:
# drop database my_db1;
ERROR: database "my_db1" is being accessed by other users
为什么会这样,怎么删除呢?
这也不起作用:
select pg_terminate_backend(pg_stat_activity.pid)
from pg_stat_activity
where pg_stat
我得到频繁的高CPU使用率警报从生产数据库服务器。由于我希望通过我自己对此进行更多的调查,因此我收集了运行中的DB查询,这些查询的CPU使用率很高。
SELECT * FROM pg_stat_activity;
从收集到的数据中,观察到有一个经常访问的表具有更新操作。从进一步的研究中,我了解到该表是DB中访问频率最高的表,而且可能没有任何资源密集型。
以下是我从解释查询中得到的细节,
QUERY PLAN
-------------------------
我正在使用Sigar获取应用程序服务器中当前运行的JVM的CPU使用率,并将其存储为该数据的历史视图,但我总是得到0%的CPU百分比。
同时,我让我的visualVM保持打开状态以监控CPU的使用情况,并且我可以在visualVM中看到CPU %的周期性变化,而使用Sigar时它总是报告0%。
下面是我定期运行的代码:
Sigar sigar = new Sigar();
ProcCpu cpu = null;
long pId = sigar.getPid(); // This one gives me the same process ID that I see in visualVM
t