2011-01-11 17 views
6

私は自分自身でVPSにPostgreSQLをセットアップしました。データベースにアクセスするソフトウェアはPokerTrackerというプログラムです。リモートPostgresql - 極端に遅い

オンラインポーカーをプレイしている間、PokerTrackerはすべての手と統計情報を記録します。

これは私のVPSにインストールすることを決めたいくつかの異なるコンピュータからアクセスしたいと思っていましたが、いくつかの問題があってもエラーなしで接続できました。

しかし、パフォーマンスは恐ろしいです。私は 'リモートpostgresqlの遅い'などの研究のトンを行い、まだ誰かが助けることを望んでいるので、答えを見つけることです。

注記:

実行しようとしているクエリは非常に小さいです。 VPS上でローカルに接続している間、クエリは即座に実行されます。

リモートで実行しているときに、クエリの実行に約1分30秒かかります。

VPSは100MBPSで動作していますが、コンピュータからは8MBのラインに接続しています。

2人の間のネットワーク通信はほぼ即座ですが、遠隔地にも接続することができます。また、MSSQLを実行しているいくつかのWebサイトをホストしていて、リモートまたはローカルに接続されていてもPostgreSQL 。

私は最新バージョンのPostgreSQLと最新の互換性のあるバージョンのソフトウェアをソフトウェアで実行しています。

データベースは新しいデータベースであり、データはほとんどなく、私はvacuum/analysisなどを実行していないので、改善は見られません。

私はMSSQLがほとんど即座にどのようにクエリできるかわかりませんが、PostgreSQLの苦労はそれほどありません。

私は何の問題もなくVPS IPのポート5432にtelnetで接続することができるよ、と私は、クエリを実行しないと言うように、それはちょうど、非常に長い時間がかかります。

クエリが実行されているときに帯域幅がほとんど使用されていない場合、ルータ上で通知されますが、単純なクエリでは期待しませんが、これが問題であるかどうかはわかりません。私は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

+1

ポストグルの問題ではなく、ネットワーキングの問題のようです。 'psql -h server ...'を使ってクライアントマシンからクエリを実行するとどうなりますか?あなたは代わりにsshトンネルでそれを行う場合はどうなりますか? –

+0

私は重要な情報を見逃していることを知っていました。私は両方のオペレーティングシステムがWindowsを実行していると言って忘れました。私はそれが必要な場合は、クエリを投稿しますが、それは単純なクエリです、ただ1つのテーブルを見て問題を引き起こすようです。私は、それがローカルで瞬間的であるにもかかわらず、それがリモートで実行しているにもかかわらず、膨大な遅延があるときに、それがどのようにクエリに起因するのかを見ることができません。 – Ricky

答えて

2

私はログを有効にし、彼らのソフトウェア。彼らの答えは、本来、ローカルまたは近くのローカルデータベース上で動作するように意図されたソフトウェアであったため、VPSでの実行は、ネットワークの待ち時間のために遅くなると予想されます。

ご協力ありがとうございますが、私はアイデアがなく、VPSのPostgreSQLではなく、ソフトウェアによるものです。

おかげで、 リッキー

0

ネットワーク監視ツールを使用する(postgresqlを含む多くのプロトコルをトレースできるため、wiresharkを使用することをおすすめします)、ネットワーク接続が正常かどうかを確認してください。接続が悪い場合は、ドロップ/再送信されたパケットが表示されます。

+0

今夜はWiresharkを試してみます。あなたのご意見ありがとうございます。 – Ricky

0

おそらく、Postgresはidentを使ってあなたを認証しようとしています(ファイアウォールなど)、他の手段で接続を許可する前にタイムアウトを待つ必要があります。

psqlを使用してリモートサーバーにselect version()を照会しようとします。これは、ディスクには触れないので、瞬時にする必要があります。

瞬時に表示されない場合は、pg_hba.conf(コメントを外した行)を投稿してください。

もう一つ考えられる原因:RevDNSを使用して

  • 認証。
  • サーバーまたはクライアント上のウイルス対策。
  • 明らかに終了していないため、他の接続がテーブルまたは行をブロックしています。
+0

こんにちは。私はselect version()を遠隔操作しようとしましたが、それはかなり瞬間的でした(おそらく数ミリ秒)とバージョンを表示しました。私のVPSには、アンチウイルスソフトウェアはありません。 – Ricky

+0

これが問題なのだろうかと思います。 VPSがインストールされているOSによって問題が発生している可能性があります。何かがタイムアウトした場合、私はVPSにしかアクセスできないので、私はそれを制御できないかもしれません。これがタイムアウトした場合、どこにでも記録されますか? PostgreSQLはエラーログなどを作成しますか? – Ricky

1

あなたは(結果をクライアントに送信するネットワークのオーバーヘッドなし)サーバー上であなたにクエリの実行時間を教えてくれますexplain analyze行うことができます。

サーバーの実行時間が非常に(表示されている時間と比較して)速い場合、これはネットワークの問題です。報告された時間が自分の見ているものと非常に似ている場合は、PostgreSQLの問題です(実行計画と場合によってはPostgreSQLの設定を投稿する必要があります)

+0

こんにちは、私はselect version()クエリをリモートでローカルに実行しようとしました。ローカルでは、プログラム 'PokerTracker'が即座にデータをインポートします。遠隔では、はるかに長い時間がかかります。私は自分のconfigsを投稿するつもりです。 – Ricky

+0

'select version()'はサーバとクライアントの間で現実的な量のデータを転送しません。真の犯人を見つけるために、遅いクエリの1つで実際に説明分析を実行する必要があります –

+0

私が持っている問題は、クエリを実行しているサードパーティのプログラムなので、実際にクエリが何かわかりません。私はそれに対して実行することができる他の一般的なクエリは、2つの間で転送されたより多くのデータを必要とするものはありますか? – Ricky

0

これは、PGアクセスがVPN経由遅い理由に対する答えではありませんが、可能な解決策/代替は、ブラウザを介してPGにアクセスするためにTeamPostgreSQLを設定することができます。これはAJAX Webアプリケーションで、データの操作とデータベースの管理に便利な機能がいくつか含まれています。

これはまた、私の経験上、VPN上でpgを使って作業するときに共通するドロップされた接続を避けるでしょう。

Webアクセス用のphpPgAdminもありますが、データベース内のデータをナビゲートして概要を確認するのに非常に役立つため、TeamPostgreSQLについて言及します。

+0

こんにちはJohny、これはVPNを介して接続されていないことに注意してください - それはVPSで開催されています。 – Ricky

0

この問題ではしばらく悩まされていましたが、この質問は私に答えてくれました。

サーバーには、デフォルトルートとして設定されたセカンダリネットワークインターフェイス(eth1)があります。クエリを実行しているクライアントがeth0と同じサブネット内にあるため、このには何も問題はありません。

デフォルトルートを無効にすると、クエリは通常の時間枠内に戻ります。しかし、長期的な修正は、を'*'から正しいIPに変更することでした。

関連する問題