2011-01-11 242 views
6

我有我自己的VPS安裝PostgreSQL的 - 訪問數據庫的軟件是一個叫PokerTracker程序。遠程PostgreSQL - 極其緩慢

PokerTracker記錄所有你的手和統計,同時玩在線撲克。

我希望這可以從幾個不同的計算機訪問,所以決定將它安裝在我的VPS上,並在幾次打嗝後,我設法讓它連接沒有錯誤。

然而,表現是可怕的。我已經做了大量關於'遠程postgresql慢'的研究等,我還沒有找到答案,所以希望有人能夠提供幫助。

注意事項:

我想執行的查詢是非常小的。當在VPS上本地連接時,查詢立即運行。

雖然遠程運行它,花費約1分鐘,30秒到運行查詢。

該VPS運行100MBPS,然後我連接到它的計算機是在一個8MB線。

兩者之間的網絡通信幾乎是即時的,我可以遠程連接正常,沒有任何延遲,並且正在運行多個運行MSSQL的網站,所有查詢立即運行,無論是遠程連接還是本地連接,因此PostgreSQL似乎都是特定的。

我正在運行他們的軟件的最新版本的軟件和PostgreSQL的最新兼容版本。

該數據庫是一個新的數據庫,幾乎不包含任何數據,我運行真空/分析等都無濟於事,我沒有看到任何改進。

我不明白MSSQL如何查詢幾乎立即又PostgreSQL的掙扎這麼多。

我能夠telnet到VPS IP上的端口5432,沒有任何問題,正如我所說的查詢執行它只需要很長時間。

我在做路由器的時候發現查詢正在運行,幾乎沒有任何帶寬正在被使用 - 但是我再也不希望它對於一個簡單的查詢,但我不確定這是否是問題。我試過在3個不同的網絡上遠程連接(包括不同的路由器),但問題仍然存在。

經由LAN經由另一臺機器遠程連接是即時的。

我也編輯了postgre conf文件以允許更多的內存/緩衝區等,但我不認爲這是問題 - 我要求它做的很簡單 - 它不應該是密集的。

感謝, 瑞奇

編輯:請注意,客戶端和服務器都運行Windows。

這是來自配置文件的信息。

 
pg_hba - currently allowing all traffic: 

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

# IPv4 local connections: 
host  all  all  0.0.0.0/0 md5 
# IPv6 local connections: 
# host all  all  ::1/128  md5 

而且postgresqlconf - 我知道我已經定緩衝區的一些龐大的量/內存這個配置,只是爲了測試它是否是問題 - 顯示註釋的行只是:

 
listen_addresses = '*' 
port = 5432 
max_connections = 100 
shared_buffers = 512MB 
work_mem = 64MB 
max_fsm_pages = 204800 
shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll' 
log_destination = 'stderr' 
logging_collector = on 
log_line_prefix = '%t ' 
datestyle = 'iso, mdy' 
lc_messages = 'English_United States.1252' 
lc_monetary = 'English_United States.1252' 
lc_numeric = 'English_United States.1252' 
lc_time = 'English_United States.1252' 
default_text_search_config = 'pg_catalog.english' 

任何其他需要的信息,請讓我知道。感謝你的幫助。

+0

請發佈查詢,涉及的表的大小和輸出的大小。 – Quassnoi 2011-01-11 12:31:28

+1

這聽起來像一個網絡問題,而不是一個Postgres問題。如果您使用`psql -h server ...`從客戶機執行查詢,會發生什麼?如果你通過ssh隧道來做什麼呢? – 2011-01-11 12:37:19

+0

我知道我會錯過重要的信息。我忘了說兩個操作系統都在運行Windows。如果有必要,我會發布查詢,但這是一個簡單的查詢,只是查看一個表似乎會導致問題。我無法看到它是如何在本地進行查詢的,因爲它是即時的,但遠程運行卻有很大的延遲。 – Ricky 2011-01-11 13:44:23

回答

2

我啓用了日誌並將日誌發送給開發人員他們的軟件。他們的答案是,由於網絡延遲,軟件最初打算在本地或本地數據庫上運行,因此在VPS上運行預計會很慢。

感謝您的所有幫助,但看起來我的想法並不是由於軟件,而是由於VPS上的PostgreSQL。

感謝, 瑞奇

0

使用網絡監控工具(我推薦wireshark,因爲它可以跟蹤許多協議,包括postgresql的)來查看網絡連接是否正常。如果連接不好,您將看到丟棄/重新傳輸的數據包。

+0

我會在今晚嘗試Wireshark。感謝您的輸入。 – Ricky 2011-01-11 13:46:20

0

也許Postgres的嘗試使用ident,這是不工作(例如防火牆出)來驗證你的,並具有允許通過其他方式連接前等待超時。

嘗試使用psql查詢select version()的遠程服務器 - 這應該是即時的,因爲它不接觸磁盤。

如果不是即時的請發佈您的pg_hba.conf(未註釋的行)。

另一種可能的原因:

  • 使用認證RevDNS;
  • 服務器或客戶端上的防病毒;
  • 其他一些連接阻塞了一個表或行,因爲它沒有清楚地結束。
+0

嗨。我嘗試遠程選擇版本(),它幾乎是即時的(可能是幾毫秒)並顯示版本。在我的VPS上,沒有反病毒軟件。 – Ricky 2011-01-11 18:55:36

1

你可以做一個explain analyze它會告訴你查詢的執行時間服務器上(不將結果發送到客戶端的網絡開銷)。

如果服務器執行時間非常快(與您看到的時間相比),則這是一個網絡問題。如果報告的時間與您觀察到的非常相似,那麼這是PostgreSQL問題(然後您需要發佈執行計劃,並且可能需要PostgreSQL配置)

0

這不是答案,爲什麼PG訪問是通過VPN緩慢,但可能的解決方案/替代可以設置TeamPostgreSQL通過瀏覽器來訪問PG。它是一個AJAX web應用程序,它包含一些用於導航數據以及管理數據庫的非常方便的功能。

這也可以避免丟棄連接,根據我的經驗,在通過VPN使用pg時很常見。

也有phpPgAdmin用於Web訪問,但我提到了TeamPostgreSQL,因爲它對於導航和獲取數據庫中數據的概覽非常有幫助。

0

一直困擾着這個問題一段時間,這個問題引導我回答,所以認爲我會分享它的幫助。

服務器有一個輔助網絡接口(eth1),它被設置爲默認路由。執行查詢的客戶端與eth0位於同一個子網內,所以這應該不會導致任何問題..但它是。

禁用默認路由使查詢在正常時間範圍內返回。但長期的解決方案是將listen_addresses'*'更改爲正確的IP。