Я храню данные в столбце bytea в базе данных PostgreSQL 9.5 в Windows.Чтение данных bytea происходит медленно в PostgreSQL
Скорость передачи данных ниже, чем я ожидаю: около 1,5 мб в секунду.
Следующий код
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 заняла меньше миллисекунды, и чтение 720KB в середине взял только 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), чтобы узнать, есть ли какая-то настройка ... –