2014-01-07 113 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 –