1

Windows 上の PostgreSQL 9.5 データベースの bytea 列にデータを格納します。

データ転送速度は思ったより遅く、毎秒約 1.5 mb です。

次のコード

        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

奇妙なことに、最後の 246kb の読み取りには 1 ミリ秒もかからず、途中の 720kb の読み取りにはわずか 22ms しかかかりませんでした。

3秒あたり5MBの読み込み速度は普通ですか?どうすれば読書速度を上げることができますか?

詳細。

私のアプリケーションは、起動時に 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;

Windows 10でnpgsql 3.0.4.0とPostgreSQL 9.5を使用しています

4

1 に答える 1

0

ここで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

まず、実行しているサーバーは localhost ですか、それともリモート マシンですか?

2 番目に思い浮かぶのは、テストの一環としてサーバーを停止および起動することです。表示されているパフォーマンスの低下は、PostgreSQL 側のウォームアップの一部である可能性があります。それを削除して、テストを数回実行した後に結果が再現されるかどうかを確認してください。

それ以外の場合は、環境の問題 (クライアント マシン、サーバー マシン、またはネットワーク) のように見えます。別のマシンまたは別の設定で問題を再現して、そこから先に進みます。

于 2016-05-25T07:45:42.670 に答える