Я новичок в Postgresql, поэтому любые советы и подсказки приветствуются.
Моя программа очень маленькая.Он получает данные из сокета, а затем вставляет их в таблицу, в которой нет индекса / внешнего ключа / ограничений / текстового поля.На самом деле, он имеет только несколько числовых полей.
Мои данные из сети поступают непрерывно со скоростью от 100 до 1000 записей в секунду.Мой Postgresql вообще не оптимизирован, и каждая его часть работает со значениями по умолчанию.
Проблема в том, что Потребление времени каждой вставкой базы данных изменяется в очень широком диапазоне. Максимальное время одной вставки может составлять 10 с, а минимальное - 100 мкс, а среднее - около 900 мкс.
Даже если я могу увеличить длину буфера, чтобы избежать его исчерпания примы ожидаем слишком длинной вставки, чтобы завершиться, я думаю, что это НЕ правильное решение, потому что независимо от того, какова длина буфера, мы можем столкнуться с более медленной вставкой.Я догадываюсь это ненормально в мире Postgresql (10 секунд для написания крошечной простой таблицы) , но я понятия не имею, как ее решить, поэтому я прошу его здесь, чтобы надеяться, что кто-то укажет на мою ошибку или оптимизациюметоды.
env: Centos 7.5 64bit, Postgresql 10, gcc 8.2.0 и последние версии pqxx lib.
Это мой pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv4 incoming connections:
host all all all password
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
и postgresql.conf
listen_addresses = '*' # what IP address(es) to listen on;
max_connections = 100 # (change requires restart)
shared_buffers = 128MB # min 128kB
dynamic_shared_memory_type = posix # the default is the first option
log_destination = 'stderr' # Valid values are combinations of
logging_collector = on # Enable capturing of stderr and csvlog
log_directory = 'log' # directory where log files are written,
log_filename = 'postgresql-%a.log' # log file name pattern,
log_truncate_on_rotation = on # If on, an existing log file with the
log_rotation_age = 1d # Automatic rotation of logfiles will
log_rotation_size = 0 # Automatic rotation of logfiles will
log_line_prefix = '%m [%p] ' # special values:
log_timezone = 'PRC'
datestyle = 'iso, ymd'
timezone = 'PRC'
lc_messages = 'zh_CN.UTF-8' # locale for system error message
lc_monetary = 'zh_CN.UTF-8' # locale for monetary formatting
lc_numeric = 'zh_CN.UTF-8' # locale for number formatting
lc_time = 'zh_CN.UTF-8' # locale for time formatting
default_text_search_config = 'pg_catalog.simple'
Извините за мой английский, я китаец.Я ценю любое терпение читать мой плохой английский.Спасибо!