2016-05-25 27 views
1

WindowsのPostgreSQL 9.5データベースにデータをbyteaカラムで保存します。PostgreSQLでバイトアデータの読み込みが遅い

データ伝送速度が予想よりも遅い:約1.5mb /秒。

次のコード

 using (var conn = ConnectionProvider.GetOpened()) 
     using (var comm = new NpgsqlCommand("SELECT mycolumn FROM mytable", conn)) 
     using (var dr = comm.ExecuteReader()) 
     { 
      var clock = Stopwatch.StartNew(); 
      while (dr.Read()) 
      { 
       var bytes = (byte[])dr[0]; 
       Debug.WriteLine($"bytes={bytes.Length}, time={clock.Elapsed}"); 
       clock.Restart(); 
      } 
     } 

は、次のような出力

bytes=3895534, time=00:00:02.4397086 
bytes=4085257, time=00:00:02.7220734 
bytes=4333460, time=00:00:02.4462513 
bytes=4656500, time=00:00:02.7401579 
bytes=5191876, time=00:00:02.7959250 
bytes=5159785, time=00:00:02.7693224 
bytes=5184718, time=00:00:03.0613514 
bytes=720401, time=00:00:00.0227767 
bytes=5182772, time=00:00:02.7704914 
bytes=538456, time=00:00:00.2996142 
bytes=246085, time=00:00:00.0003131 
Total: 00:00:22.5199268 

を生成奇妙なことは、最後の246キロバイトの読み取りがミリ秒未満を取って、途中で720キロバイトの読み取りがちょうど22msでを取ったということです。

読み取り速度は通常5秒/ 3秒ですか?私はどのように読み上げ速度を上げることができますか?

詳細。

私のアプリケーションは起動時にPostgreSQLサーバを起動し、終了時にそれをシャットダウンします。

私は次のコード

public static void StartServer(string dataDirectory, int port) 
{  
    Invoke("pg_ctl", $"start -w -D \"{dataDirectory}\" -m fast -o \"-B 512MB -p {port} -c temp_buffers=32MB -c work_mem=32MB\""); 
} 

でサーバを起動するには、また、私は私の列にストレージタイプを変更します。

ALTER TABLE mytable ALTER COLUMN mycolumn SET STORAGE EXTERNAL; 

私はNpgsqlの3.0.4.0とPostgreSQL 9.5を使用するWindows 10上で

答えて

1

ここではNpgsql 3.0.8(同じにする必要があります)、PostgreSQL 9.5、Windows 10、およびNpgsqlを実行しています。結果はまったく見つかりません。

bytes=3895534, time=00:00:00.0022591 
bytes=4085257, time=00:00:00.0208912 
bytes=4333460, time=00:00:00.0228702 
bytes=4656500, time=00:00:00.0237144 
bytes=5191876, time=00:00:00.0317834 
bytes=5159785, time=00:00:00.0268229 
bytes=5184718, time=00:00:00.0159028 
bytes=720401, time=00:00:00.0130150 
bytes=5182772, time=00:00:00.0153306 
bytes=538456, time=00:00:00.0021693 
bytes=246085, time=00:00:00.0005174 

まず、実行しているサーバーは、ローカルホストかリモートマシンですか。

2つ目は、テストの一環としてサーバーを停止して起動することです。あなたが見ている遅いパフォーマンスは、PostgreSQLのウォームアップの一部であるかもしれません。それを削除して、テストを数回実行した後に結果を再現できるかどうかを確認してください。

そうでなければ、これは環境問題(クライアントマシン、サーバーマシン、またはネットワーク)のように見えます。私は別のマシンや別の設定で問題を再現しようとし、そこから行くつもりです。

+0

別のマシンで同じコードを再現し、正常な結果を得ました。したがって、問題はサーバーマシンにあります。あなたは何ができるか考えていますか?私はローカルサーバーを使用します。サーバーはサービスとして実行されます。書き込みもずっと遅いです。 –

+1

テストを実行している間にサーバーの負荷を確認することから始めます。これはCPUですか? IOですか?私はまた、いくつかのカスタマイズがあるかどうかを確認するためにPostgreSQLの設定(postgresql.conf)を見てみましょう... –

関連する問題