powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мозголомная задачка на тюнинг COPY
7 сообщений из 7, страница 1 из 1
Мозголомная задачка на тюнинг COPY
    #39159961
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть небольшая табличка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  CREATE TABLE public.tmp_tbl_test_size (
id_cell BIGINT,
  u DOUBLE PRECISION,
  v DOUBLE PRECISION,
  w DOUBLE PRECISION,
  temperature DOUBLE PRECISION,
  co DOUBLE PRECISION,
  co2 DOUBLE PRECISION,
  hcl DOUBLE PRECISION,
  o2 DOUBLE PRECISION,
  dm DOUBLE PRECISION,
  t INTEGER
) 
WITH (oids = false);
CREATE INDEX "idx_tmp_test_id_cell" ON public.tmp_tbl_test_size   USING btree (id_cell);
CREATE INDEX "idx_tmp_test_t" ON public.tmp_tbl_test_size   USING btree (t);


Количество записей - 52598424
Размер - 5870 MB
По системе: памяти 2 GB, INTEL CORE 2 6300 @1.86GHz L2 Cashe 2MB,
OS ubuntu 14.04 lts
PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit

Кое что из настроек
#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------
# - Memory -

shared_buffers = 512MB # min 128kB
# (change requires restart)
huge_pages = try # on, off, or try
# (change requires restart)
temp_buffers = 8MB # min 800kB

work_mem = 4MB # min 64kB
maintenance_work_mem = 2024MB # min 1MB
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
max_stack_depth = 2MB # min 100kB
dynamic_shared_memory_type = posix # the default is the first option
# supported by the operating system:
# posix
# sysv
# windows
# mmap
# use none to disable dynamic shared memory
# - Disk -
#temp_file_limit = -1 # limits per-session temp file space
# in kB, or -1 for no limit
# - Kernel Resource Usage -

#max_files_per_process = 1000 # min 25
# (change requires restart)
#shared_preload_libraries = '' # (change requires restart)

# - Cost-Based Vacuum Delay -

#vacuum_cost_delay = 0 # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200 # 1-10000 credits

# - Background Writer -

#bgwriter_delay = 200ms # 10-10000ms between rounds
#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round

# - Asynchronous Behavior -

#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
#max_worker_processes = 8

wal_level = archive # minimal, archive, hot_standby, or logical
# (change requires restart)
fsync = on # turns forced synchronization on or off
synchronous_commit = on # synchronization level;
# off, local, remote_write, or on
wal_sync_method = fsync # the default is the first option
# supported by the operating system:
# open_datasync
# fdatasync (default on Linux)
# fsync
# fsync_writethrough
# open_sync
full_page_writes = on # recover from partial page writes
wal_log_hints = off # also do full page writes of non-critical updates
# (change requires restart)
wal_buffers = 512kB #-1 # min 32kB, -1 sets based on shared_buffers
# (change requires restart)
wal_writer_delay = 200ms # 1-10000 milliseconds

commit_delay = 0 # range 0-100000, in microseconds
commit_siblings = 5 # range 1-1000

# - Checkpoints -

checkpoint_segments = 128 # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 5min # range 30s-1h
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
#checkpoint_warning = 30s # 0 disables




WAL пишутся на отдельном физическом диске
Прибил не очень нужные индексы, скорость возросла с безумно медленной до 2 минут на вставку,
но всё равно неприемлемой.
COPY занимает по минуте примерно. Порция 5 тысяч записей весит копейки, тормозить не должны бы.
Вопрос - как можно уменьшить время записи до приемлемых значений?
Менял checkpoint_segments, maintenance_work_mem, work_mem,wal_buffers - особо эффекта не заметил.
...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39159963
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНWAL пишутся на отдельном физическом диске
Прибил не очень нужные индексы, скорость возросла с безумно медленной до 2 минут на вставку,
но всё равно неприемлемой.
Порция 5 тысяч записей весит копейки, тормозить не должны бы.
Вопрос - как можно уменьшить время записи до приемлемых значений?
Менял checkpoint_segments, maintenance_work_mem, work_mem,wal_buffers - особо эффекта не заметил.
fixed
...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39159996
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

а внешних ключей/триггеров никаких нет? покажите вывод \d+ tmp_tbl_test_size
...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39160022
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Таблица public.tmp_tbl_test_size
   Колонка   |       Тип        | Модификаторы | Хранилище | Цель для статистики | Описание
-------------+------------------+--------------+-----------+---------------------+----------
 id_cell     | bigint           |              | plain     |                     |
 u           | double precision |              | plain     |                     |
 v           | double precision |              | plain     |                     |
 w           | double precision |              | plain     |                     |
 temperature | double precision |              | plain     |                     |
 co          | double precision |              | plain     |                     |
 co2         | double precision |              | plain     |                     |
 hcl         | double precision |              | plain     |                     |
 o2          | double precision |              | plain     |                     |
 dm          | double precision |              | plain     |                     |
 t           | integer          |              | plain     |                     |
Индексы:
    idx_tmp_test_id_cell btree (id_cell)
    idx_tmp_test_t btree (t)

...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39160024
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, они заведомо не влазят в оперативку.
Попробую вообще без них.
...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39160129
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

а какой размер у индексов?

maintenance_work_mem = 2024MB # min 1MB - это как-то много для 2ГБ машины.

вставку в таблицу никто не может блокировать? select * from pg_stat_activity where waiting; ничего не показывает во время попытки записи?

покажите еще вывод iostat -d -x 1 во время copy.
...
Рейтинг: 0 / 0
Мозголомная задачка на тюнинг COPY
    #39160421
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius,
maintenance_work_mem вернул на 256 мегов.
Убил все индексы - загрузка данных стала моментальной.
Думаю.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Мозголомная задачка на тюнинг COPY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]