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上で
別のマシンで同じコードを再現し、正常な結果を得ました。したがって、問題はサーバーマシンにあります。あなたは何ができるか考えていますか?私はローカルサーバーを使用します。サーバーはサービスとして実行されます。書き込みもずっと遅いです。 –
テストを実行している間にサーバーの負荷を確認することから始めます。これはCPUですか? IOですか?私はまた、いくつかのカスタマイズがあるかどうかを確認するためにPostgreSQLの設定(postgresql.conf)を見てみましょう... –