Как стать автором
Обновить

Комментарии 7

1. Это автокоммит?
2. Зачем оно вообще, когда есть COPY?
1. Да, автокоммит. set autocommit to off больше не поддерживается.
2. Суть не в COPY, а в количестве вставок в секунду.

Сожалею, что не подчеркнул момент: сначала все же нужно посмотреть статью из ссылки habrahabr.ru/post/196828/
1. Да, автокоммит. set autocommit to off больше не поддерживается.

Ну так обернули бы в транзакцию, все было бы быстрее.

2. Суть не в COPY, а в количестве вставок в секунду.

Не совсем понял, вам шашечки или количество инсертов в секунду важно или количество строк/объем данных?
1. Обернул в транзакцию. Дает примерно +5%. Полагаю, что произошел упор в ограничения системы по IOPS.
2. Понятно, что COPY будет быстрее и эффективнее. Если только есть подготовленные данные в файле, размер которого COPY cможет переварить. А тут получена грубая оценка производительности для неподготовленных небольших данных, которые сыплются постоянно и в большом количестве (при этих конкретных условиях).
Если только есть подготовленные данные в файле, размер которого COPY cможет переварить.

Файл тут совершенно необязателен, на уровне драйвера есть функции для отсыла данных любыми порциями: www.postgresql.org/docs/9.3/static/libpq-copy.html#LIBPQ-COPY-SEND
Не знаю, есть ли для них обертки в голанг.
Да, данные сначала нужно будет немного подготовить.

А тут получена грубая оценка производительности для неподготовленных небольших данных, которые сыплются постоянно и в большом количестве (при этих конкретных условиях).

Ну ок. Хотя просто ради интереса, если мне память не изменяет, лет эдак 5 назад на стареньком 4-м пеньке с COPY у меня получалась цифра около 40000 строк/сек. Если вы исследуете возможности постгреса по вставке данных, рекомендую сравнить в ваших условиях.
Увы, оберток для COPY в lib/pq нет и в ближайшее время не предвидится.
Но вы очень заинтересовали вопросом по поводу максимизации.
Убрав поле с timestamp и primary_key, включив потоки и гороутины, смог легко дожать до вставки 52000-55000 строк/сек
И цифра в 16-17к это не IOPS-limit. Но у голанга пока что 4 треда — предел.
У Вас вставляется очень мало данных, попробуйте раз в 100-1000 больше вставить, либо увеличить размер данных — сейчас они, похоже, в память помещаются, а запись на диск откладывается. Ну и транзакции надо включить.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации