powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация INSERT-ов
18 сообщений из 43, страница 2 из 2
Оптимизация INSERT-ов
    #39933767
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и на простеньком SSD, core i5-8400 2.8, 4Gb:
insert 2млн записей, текущий вариант (массив строк фикс формата) в несколько потоков.

Без индексов
пакетами по 20 записей - 12сек
пакетами по 200 записей - 5сек

С индексами
пакетами по 20 записей - 24сек
пакетами по 250 записей - 16сек

То есть все в 2 раза быстрее, хоть и ожидал большего, но 125тыс.записей/сек с индексами в целом нормально.
Ище бы сюда IOT, index skip scan (тогда хватило бы одного индекса), патишены с возможностью их разнесения по разным дискам и логи на отдельный диск, плюс передача массива объектов или массива бинарных данных.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39933983
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS
Ище бы сюда IOT

Чем бы оно помогло?

JDS
index skip scan (тогда хватило бы одного индекса)

Всё в ваших руках, объясните вручную , посоучаствуйте в реализации

JDS
патишены с возможностью их разнесения по разным дискам и логи на отдельный диск

Давным-давно существует.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39934388
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij , да, как оказалось IOT + индекс вместо двух индексов ничего не дает.
Насчет "объясните вручную" там что-то интересное, но если количество уникальных значений будет большим, эти рекурсивные запросы будут висеть очень долго. До соучастия очень далеко )

Нашел еще PgBulkInsert .
на SSD вставка 2млн записей одним пакетом без индексов - 3сек,
с индексами пакетами по 200 записей - 11сек
Вполне себе неплохо, попробую пока остановиться на этом варианте.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935317
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
ТОлько что взял 150к строк в секунду при помощи

Код: plaintext
COPY BINARY FROM STDIN


в базе один btree-индекс по четырем полям. Все настройки по-умолчанию.

5 млн всасывается за 3.4 секунды.

база установлена в виртуалку с 8-мью виртуальными ЦПУ 32 ГБ рамы.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935319
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
cvv
ТОлько что взял 150к строк в секунду при помощи

Код: plaintext
COPY BINARY FROM STDIN


в базе один btree-индекс по четырем полям. Все настройки по-умолчанию.

5 млн всасывается за 3.4 секунды.

база установлена в виртуалку с 8-мью виртуальными ЦПУ 32 ГБ рамы.


Это все в один поток.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935405
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cvv, а есть возможность выложить тесткейс, прогнать у себя?
У меня правда на машине где ssd core i5 и 4гб.
Но копи так понимаю из файла инсертит.
Если бы можно было хотя бы из потока копи.

У меня просто копи с инднксами работает все равно небыстро.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935406
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cvv , и еще не понятно если 150к в секунду, то откуда 5млн, за 3.5сек?
Или скорость выше, или не 5млн, а 0.5млн?
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935408
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS
cvv, а есть возможность выложить тесткейс, прогнать у себя?
У меня правда на машине где ssd core i5 и 4гб.
Но копи так понимаю из файла инсертит.
Если бы можно было хотя бы из потока копи.

У меня просто копи с инднксами работает все равно небыстро.


copy может из stdout прекрасно вставлять штатным методом.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935421
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
JDS
cvv , и еще не понятно если 150к в секунду, то откуда 5млн, за 3.5сек?
Или скорость выше, или не 5млн, а 0.5млн?


Да, ты прав. Вот числа с моего ноута (i7-7820HQ CPU @ 2.90GHz, 32 GB, Samsung pro SSD):

Код: plaintext
STAT: iter_qty = 2000000, time = 26289.979000 ms, iter_time = 13.144989 usec
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935424
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
JDS
cvv , и еще не понятно если 150к в секунду, то откуда 5млн, за 3.5сек?
Или скорость выше, или не 5млн, а 0.5млн?


А вот вчерашний сервер на виртуалке (Xeon(R) Gold 6254 CPU @ 3.10GHz, 32 ГБ, SSD, VMWARE):

Код: plaintext
STAT: iter_qty = 2000000, time = 13490.124000 ms, iter_time = 6.745062 usec
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935425
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
JDS
cvv, а есть возможность выложить тесткейс, прогнать у себя?
У меня правда на машине где ssd core i5 и 4гб.


Ну теоретически возможно, если у тебя Ubuntu 16.04.

JDS
cvv,
Но копи так понимаю из файла инсертит.
Если бы можно было хотя бы из потока копи.

Нет, я инсерчу не с диска а с сети.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935427
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
JDS,

Таблица и индекс создается запросом из комментов в конце этого файла:

https://github.com/fandrej/glonassd/blob/master/pg.c

А COPY выгдядит вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
- SQL-script for insert record to table
 
COPY gps.tgpsdata (
        ddata ,          --$1
        ntime ,
        cimei ,          --$3
        nstatus ,
        nlongitude ,     --$5
        cew ,
        nlatitude ,      --$7
        cns ,
        naltitude ,      --$9
        nspeed ,
        nheading ,       --$11
        nsat ,
        nvalid ,         --$13
        nnum ,
        nvbort ,         --$15
        nvbat ,
        ntmp ,           --$17
        nhdop ,
        nout ,           --$19
        ninp ,
        nin0 ,           --$21
        nin1 ,
        nin2 ,           --$23
        nin3 ,
        nin4 ,           --$25
        nin5 ,
        nin6 ,           --$27
        nin7 ,
        nfuel1 ,         --$29
        nfuel2 ,
        nprobeg ,        --$31
        nzaj ,
        nalarm           --$33
) FROM STDIN WITH (
        FORMAT 'binary'
);
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935505
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cvv , да, интересный вариант по скорости и в целом круто.
А так у меня через один коннект к БД - 2млн - 20сек, но таблица 5 полей.
Если в пуле 15 коннектов, то 11сек, 30 коннектов - 9сек.
Не уверен, что у меня получится переложить С на Java, но в PgBulkInsert-е есть CopyManager , который работает через copy stdin, но примеры тоже из файла и то не проверял, как сделать обертку, чтобы читать из памяти как из файла... возможно сразу писать в OutputStream нужную информацию типа как в файл, а в CopyManager.copyIn передавать ридер для этого потока. Да и что писать на вход навроде String.GetBytes()..
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935507
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там же есть еще PgBinaryWriter , это уже ближе к искомому похоже, но как с ним работать пока не понял.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39935577
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS
переложить С

Упомянули бы что речь вовсе о C
COPY t FROM STDIN (FORMAT binary); и PQputCopyData
Формат структуры упомянут здесь: Binary format
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39937321
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как пишут, дескать бинари формат может съезжать от версии постгрес, пока без него.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39937339
cvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cvv
Гость
JDS
Так как пишут, дескать бинари формат может съезжать от версии постгрес, пока без него.
Все бэкапы построены на этом бинари формате, поэтому совместимость будет соблюдаться.
...
Рейтинг: 0 / 0
Оптимизация INSERT-ов
    #39937342
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cvv
Все бэкапы построены на этом бинари формате.

Нет. pg_dump при общении с базой использует текстовый формат copy. https://github.com/postgres/postgres/blob/REL_11_STABLE/src/bin/pg_dump/pg_dump.c#L1766
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация INSERT-ов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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