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

Почему это так долго работает?

39 ответов

54 просмотра

Делайте кусками по 1000 записей например, будет быстро

Для начала разговора о скорости запросов предоставьте информацыю из закрепа: https://t.me/pgsql/303899 Для этого можно воспользоваться вот этим скриптом: https://t.me/pgsql/476688 Без всей этой информацыи такой разговор будет беспредметным. PS И да, не надо постить текст картинками.

Mr. N
а почему так?

Причин может быть много, записи заблокированные другими запросами, например

Ilya Anfimov
Для начала разговора о скорости запросов предостав...

Показать explain analyze, всё равно, что дождать окончания запроса

dennis
Показать explain analyze, всё равно, что дождать о...

Ну, можно немного подумать и сделать без analyze так или иначе.

если по другому не можете, отмените, добавьте к запросу explain (analyze) *SQL* limit 10

dennis
Показать explain analyze, всё равно, что дождать о...

По остальной информацыи — ужэ можно будет думать, ковырять блокировки или это 10ТБ табличка на HDD.

dennis
Чем не нравится, минусующие?

ты делить на куски вручную будешь?

dennis
Чем не нравится, минусующие?

Тем, что это почти всегда только увеличит общее время выполнения, может быть? ;)

Nickelodeona K
ты делить на куски вручную будешь?

Я пишу для этого простенький запрос

Yaroslav Schekin
Тем, что это почти всегда только увеличит общее вр...

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

dennis
Чем не нравится, минусующие?

Всем. Во-первых, обновление батчами работает ДОЛЬШЭ. Чуть менее, чем всегда. Один батч — да, можэт и быстрее. Всё вместе — почти всегда дольшэ, зачастую сильно. Во-вторых, нет никакого смысла рыпаться пока не определил, что там стряслось. Если это блокировка — то она точно такжэ будет висеть при батче. В-третьих — это не так просто. Определить нормальные батчи, которые обновят в итоге всё и не будут по 20 раз обновлять одно и тожэ. В-четвёртых — не всегда нетранзакцыонное обновление вообще допустимо.

Yaroslav Schekin
Тем, что это почти всегда только увеличит общее вр...

Ого! То есть заблокировать на бою таблицу на пол суток это нормально? А батчами это моветон. Ну-ну

Если Вам действительно нужна помощь — покажите https://t.me/pgsql/498954 , только EXPLAIN со всеми теми параметрами, кроме ANALYZE.

dennis
Ого! То есть заблокировать на бою таблицу на пол с...

Ну, во-первых только частично заблокировать. Во-вторых — бой бою рознь. Кое-где — да, никаких проблем вообще, каждую неделю есть тех.окно на 56 часов.

Ilya Anfimov
Всем. Во-первых, обновление батчами работает ДОЛЬ...

На больших таблицах в рабочей среде всегда быстрее. И сильно, просто потому, что не надо ждать exclusive lock

dennis
Ого! То есть заблокировать на бою таблицу на пол с...

А что Вы имеете в виду под "заблокировать на бою таблицу на пол суток"? Что, от этого чтения заблокируются, что ли? Или обновления пока не заблокированных записей?

Виктор Егоров
в UPDATE нет exclusive lock

Ну, по сути — есть. На каждую обновлённую строчку.

Yaroslav Schekin
А что Вы имеете в виду под "заблокировать на бою т...

Речь про изменения, конечно, которые будут ждать вашего апдейта

Ilya Anfimov
Ну, по сути — есть. На каждую обновлённую строчку.

угу. но он возникает только в момент, когда появляется другой желающий потрогать эту строчку

Виктор Егоров
общее время будет больше. но не будет долгой транз...

Всё это, безусловно, так. Но мы же ещё не знаем, в чём там причина, вот в чём смысл. Зачем такие советы давать "вслепую", я не понимаю (может стать только хуже, как пишет https://t.me/pgsql/498969 ).

dennis
Речь про изменения, конечно, которые будут ждать в...

Не факт, что такие изменения там вообще есть. Т.е. https://t.me/pgsql/498983

Ilya Anfimov
ЧТО. ВЫ. НЕСЁТЕ?!?

Тон попроще. Я не несу, а делюсь опытом. Который нашел подтверждение совсем недавно, на табличке 2млн. записей, всего-то. Но зато интенсивно изменяемой.

dennis
Тон попроще. Я не несу, а делюсь опытом. Который н...

Слушайте, вы в чятике инжэнеров. Тут любят спорить. Постарайтесь формулировать... Точнее, что ли. И обоснованнее.

Ilya Anfimov
Слушайте, вы в чятике инжэнеров. Тут любят спорить...

Надо добавить «русскоязычных», это сильно меняет тон разговора почему-то.

На самом деле, если завис конкретный запрос — можно сразу глянуть/выложыть SELECT * FROM pg_stat_activity и SELECT * pg_locks — чтобы посмотреть, что он висит на блокировке или не висит.

Mr. N
screenshot

Не надо выкладывать текст фотографиями.

dennis
Делайте кусками по 1000 записей например, будет бы...

И потом — ну, по какой 1000 записей? Сейчас 1991 год что ли? Логичные батчи по-моему начинаются где-то от миллиона (на типичных данных и при типичных требованиях к доступности сервиса).

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта