Очень большое изменение времени, прошедшее, когда небольшая запись в Postgresql - PullRequest
0 голосов
/ 25 ноября 2018

Я новичок в 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'

Извините за мой английский, я китаец.Я ценю любое терпение читать мой плохой английский.Спасибо!

...