172 похожих чатов

Всем привет. вопрос теоритический, задачу никакую не решаю. Я хочу

понять порядки пропускной способности PostgreSQL на запись: сколько максимально операций в секунду возможно при одинарных INSERT. Предвижу ответы про "много факторов". меня интересуют цифры которые вы видели. Т.е. именно понять порядки. Ясно что это не миллионы и не сотни тысяч. Насколько я понимаю из своего опыта, то типичная таблица с 10 колонками и индексами по 2-3 полям может заполнятся не быстрее чем 1000-1200 запросов в секунду. Какой у вас опыт? будем считать, что с железом все ок, оно какое надо и индексы влазят в память

21 ответов

295 просмотров

Вобще-то, сотни тысяч — как раз лимит, достижымый без выхода в "большой спорт". А 1200 в секунду — это или очень большые INSERT, или сломано что-то.

Ilya Anfimov
Вобще-то, сотни тысяч — как раз лимит, достижымый ...

Слушайте, а в порядке спортивного интереса, расскажете как таких цифр достичь теоретически? Знаю, что можно сделать таблицу, в которую я вставляю, unlogged и убедиться в отсутствии триггеров, ограничений на таблицу, индексов и т.д. Может быть, ещё можно писать в несколько сессий на стороне postgres/потоков на стороне оси. Да и если вы покидаете в меня ссылками, тоже буду благодарен)

Александр Едигарев
Слушайте, а в порядке спортивного интереса, расска...

>Может быть, ещё можно писать в несколько сессий на стороне postgres/потоков на стороне оси. Ну, разумеется, как ещё-то? Зачем вам постгрес, если параллельных воркеров нету... Не, ну тожэ можэт быть полезен — но тогда вообще странно ставить вопросы о скорости.

Александр Едигарев
Слушайте, а в порядке спортивного интереса, расска...

И да, unlogged и без индэксов — это ужэ "большой спорт". Опять не очень понятно, какая можэт быть практическая перспектива у таких достижэний.

Простейшая таблица без индексов, два поля, общая длина записи 32 kB на моем домашнем ноутбуке выдает 400 тысяч в секунду без всякого тюнинга и ухищрений в один поток (как то раз потребовалось оценить возможный потолок). Диск NVMe.

Валерий Фёдоров
Простейшая таблица без индексов, два поля, общая д...

А, без индэксов. Ой, ладно, да. Тожэ, правда, вероятно, не INSERT по одному — но да, такое можно добиться.

Ilya Anfimov
И да, unlogged и без индэксов — это ужэ "большой с...

Да не то чтобы я собирался заниматься бенчмарками, скорее задался вопросом "вдруг я чего-то не знаю"

Ilya Anfimov
И да, unlogged и без индэксов — это ужэ "большой с...

А на продакшене по сути логи-то и не нужны? Если база протестирована и ты полностью уверен что она не навернётся, отключение логирование даст прирост производительности.

Ilya Anfimov
>Может быть, ещё можно писать в несколько сессий н...

Окей, как вы достигаете такой скорости?) У меня приходится 3 * 26 + 3000 * 26 записей на таблицу в секунду (2 индекса, 3 колонки, int, datetime(3), numeric(10,4)), да есть триггер BEFORE INSERT, но он простейший и скорее как переходной этап (меняю структуру таблиц, раньше второй столбец был numeric, а первый enum, что не совместимо с pg_partman) Но даже тут появляется очередь на запись) Это при том, что сервер с 56 ядрами, 4 x NVMe RAID 0

Я вообще ничего не понял. Кто такие 3*2, что за очередь на запись, и вообще.

Ilya Anfimov
Я вообще ничего не понял. Кто такие 3*2, что за о...

78078 записей в секунду потолок, иногда немного меньше Написал в том виде в котором оно пишется 3 * 26 -> 26 коннекншенов, которые пишут по 3 записи в секунду (отдельными инсертами) 3000 * 26 -> 26 коннекшенов которые пишут по 3000 записей в секунду (одним инсертом)

Cvt
78078 записей в секунду потолок, иногда немного ме...

Стало понятнее, что это за числа — но не то, чтобы это как-то прояснило ситуацыю. (Вопросов и непонятностей скорее добавилось).

Cvt
Окей, как вы достигаете такой скорости?) У меня п...

А вообще — вы таки в диск должны упираться. Смотрите, сколько там вашы эти nvme пишут. И да, если автовакуум не настраивали — настраивайте, чтобы побыстрее вакуумил. Меньшэ до диска бегать будет.

Ilya Anfimov
А вообще — вы таки в диск должны упираться. Смотр...

Вообще вакуум пока-что не трогал Мой уровень управления постгресом еще не дорос до таких высот) Я обычно упирался в сложность SELECT-ов, а не в количество инсертов)

Cvt
78078 записей в секунду потолок, иногда немного ме...

А вообще, поскольку из вашых объяснений всё равно непонятно ничего — идите в закреп https://t.me/pgsql/303899 После ВСЕЙ этой информацыи можно будет что-то обсуждать. Собрать её можно вот этим скриптом https://t.me/pgsql/476688

Валерий Фёдоров
Простейшая таблица без индексов, два поля, общая д...

если вы исключительно пишите данные и никогда не будете их менять то зачем вам вообще постгрес?

Konstantin Zaitsev
Уверен что не навернется это просто прекрасно 🤦‍♀️...

Знаю. Вчера вынес по вашей рекомендации контакты во вторичную таблицу. Результат - не везде на бэке внимательно поменял обращения и навернул демона. Пока чинил - запустил шеснадцатую (на которую уже неделю пытаюсь мигрировать), и снёс половину данных (поскольку битая она у меня, из-за криворукости). В результате поплакал, и просто стёр все данные и занёс обратно. Не совсем такая же ситуация, но смысл понятен.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта