2014-01-07 49 views
0

在我的项目中,我想收集PostgreSQL服务器的性能计数器。为此,我想查询从数据库中收集它。我是PostgreSQL的新手。当我寻找,我有一些像查询PostgreSQL服务器状态变量?

SELECT * FROM pg_stat_database

,但是当我在Java中的下列方式使用,这里Map_PostgreSQL是一个HashMap。

  while(rs.next()) 
      { 
       Counter_Name.add(rs.getString(1).trim()); 
       Map_PostgreSQL.put(rs.getString(1).trim(), rs.getString(2)); 

      } 

我喜欢输出

{12024=template0, 1=template1, 12029=postgres}

什么是收集其状态的变量,比如MySQL中 “SHOW全球地位” 实际查询。

在此先感谢..

回答

0

1,尝试推出中的SQL查询你的PostgreSQL壳牌清楚地看到它们返回的数据以及它是如何在行和列组织。

您将看到hashmap键是您的datid(数据库ID),值是您的数据库名称。

我认为你认为统计是按“行”结构,而他们是按列结构。不要忘记:PostgreSQL是一个数据库服务器,它意味着它可以处理多个数据库(事实上,它有几个数据库,因为它们中的一些已经创建了,比如'postgres'数据库本身 - 哪个Postgres(服务器)在内部使用,或'template0')。

通过推出:

SELECT * FROM pg_stat_database; 

你问服务器返回的每一个数据库统计(前提是你被允许让他们)

如果你想只有你自己统计数据库,这样做:

SELECT * FROM pg_stat_database WHERE datname='your_database_name'; 

希望这有助于

+0

你是正确的。但我想整个服务器statictics不是一个特定的数据库。我想完全监视PostgreSQl,这意味着它的每个计数器值。有没有任何查询来监控这个? –

+0

您是否在PostgreSQL shell中运行第一个查询?该查询是好的,这是你的java代码,不提取你想要的。 –

+0

你能告诉我应该给java连接字符串中的数据库名称吗?或者我可以直接拿到它?现在我只是在Sql Shell(plsql)中尝试了“Select * from pg_stat_bgwriter”。它显示出像buffers_alloc这样的值。但没有给出数据库名称,如果我使用像这样的意思是“con = DriverManager.getConnection(”jdbc:postgresql://“+ Host +”:“+ Port,Username,Password);”我独自一人{6 = 0}?请cler我的怀疑@RaphaëlBraud –