Size: a a a

pgsql – PostgreSQL

2020 August 10

K

Kirill in pgsql – PostgreSQL
Ilia Zviagin
Нет разницы, если any вводится через =.

А так ANY по функционалу гораздо шире IN.

Но = ANY профессионалы не применяют, а ANY с любыми другими вводными операциями очень редко имеют смысл, и могут быть заменены на что-то другое, как правило, коррелированный подзапрос, и в итоге в практике программирования ANY не используется, его обсуждают только в учебниках по SQL
Спасибо!
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
maxp.dev
ну а все-таки, какой порядок падения перформанса?
я когда-то мерил что-то подобное, но тогда сервер у меня назывался Пентиум 133 :)
так что данные не актуальны
Не значительный.
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
maxp.dev
ну а все-таки, какой порядок падения перформанса?
я когда-то мерил что-то подобное, но тогда сервер у меня назывался Пентиум 133 :)
так что данные не актуальны
О() будет одинаковое.
источник

m

maxp.dev in pgsql – PostgreSQL
Ilia Zviagin
О() будет одинаковое.
O - тут как бы не при чем, если скажем оно станет на 40-50% медленне работать на тех же данных
источник

m

maxp.dev in pgsql – PostgreSQL
хотя я надеюсь, что в 10-20% уложимся, по крайней мере раньше где-то так получалось
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ilia Zviagin
Нет разницы, если any вводится через =.

А так ANY по функционалу гораздо шире IN.

Но = ANY профессионалы не применяют, а ANY с любыми другими вводными операциями очень редко имеют смысл, и могут быть заменены на что-то другое, как правило, коррелированный подзапрос, и в итоге в практике программирования ANY не используется, его обсуждают только в учебниках по SQL
Зря Вы так. ;)
Наоборот, "= ANY ($N)" — это распространённый способ параметризации "IN со списком значений" в PostgreSQL.
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
maxp.dev
O - тут как бы не при чем, если скажем оно станет на 40-50% медленне работать на тех же данных
O всегда при чём
источник

AN

Alexander Nikitin in pgsql – PostgreSQL
Коллеги, проясните пож-ста маханизм работы вакуума (теорию  я вроде бы знаю, но что-то видимо упустил). Смотрите - есть довольно большая таблица - 240 Гб данных и 800 Гб индексов. Таблица не партиционирована. По ней запустили Vacuum analyze. Сейчас фаза vacuuming indexes, при этом он пошёл уже по второму кругу, но на этот раз время обработки намного больше: если во время первой итерации обработка конкретного индекса занимала 224 секунды, то во время второй итерации время составило уже 3315 сек. Maintenance_work_mem=4Gb. В документации нашёл следующее - Очистка индексов — VACUUM в настоящее время очищает индексы. Если у таблицы есть какие-либо индексы, эта фаза будет наблюдаться минимум единожды в процессе очистки, после того, как куча будет просканирована полностью. Она может повторяться несколько раз в процессе очистки, если объёма maintenance_work_mem оказывается недостаточно для сохранения всех найденных «мёртвых» кортежей.  Вопросов два - если увеличить этот размер, скажем до 6Gb, будет ли ускорение? И почему настолько разная скорость обработки индекса?
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
Yaroslav Schekin
Зря Вы так. ;)
Наоборот, "= ANY ($N)" — это распространённый способ параметризации "IN со списком значений" в PostgreSQL.
Вообще, есть даже движение за выкидывание ANY из SQL
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
maxp.dev
O - тут как бы не при чем, если скажем оно станет на 40-50% медленне работать на тех же данных
Я уже, вроде, спрашивал... почему Вы думаете, что оно станет медленнее (какие там текстовые ключи, никто здесь не видел, или я пропустил)?
Можно же просто протестировать, если у Вас запросы есть (меньше чем за полчаса, мне кажется)...
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
IN <> ANY не взаимозаменяемы.

Например, с IN нельзя проверить равенство оператором LIKE (~).
источник

m

maxp.dev in pgsql – PostgreSQL
Yaroslav Schekin
Я уже, вроде, спрашивал... почему Вы думаете, что оно станет медленнее (какие там текстовые ключи, никто здесь не видел, или я пропустил)?
Можно же просто протестировать, если у Вас запросы есть (меньше чем за полчаса, мне кажется)...
потому что строковый индекс на бигинтах явно должен быть компактнее, чем строковый, ну и по мелочи там, что инты вообще на регистрах сравниваются, а строки нет
источник

m

maxp.dev in pgsql – PostgreSQL
Yaroslav Schekin
Я уже, вроде, спрашивал... почему Вы думаете, что оно станет медленнее (какие там текстовые ключи, никто здесь не видел, или я пропустил)?
Можно же просто протестировать, если у Вас запросы есть (меньше чем за полчаса, мне кажется)...
и там бигниты из snowflake,  то есть они не короткие
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
Denis Girko ☕️
IN <> ANY не взаимозаменяемы.

Например, с IN нельзя проверить равенство оператором LIKE (~).
Да можно ещё сотню таких же случаев найти, а можно просто не использовать any и тоже жить полноценной жизнью.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Alexander Nikitin
Коллеги, проясните пож-ста маханизм работы вакуума (теорию  я вроде бы знаю, но что-то видимо упустил). Смотрите - есть довольно большая таблица - 240 Гб данных и 800 Гб индексов. Таблица не партиционирована. По ней запустили Vacuum analyze. Сейчас фаза vacuuming indexes, при этом он пошёл уже по второму кругу, но на этот раз время обработки намного больше: если во время первой итерации обработка конкретного индекса занимала 224 секунды, то во время второй итерации время составило уже 3315 сек. Maintenance_work_mem=4Gb. В документации нашёл следующее - Очистка индексов — VACUUM в настоящее время очищает индексы. Если у таблицы есть какие-либо индексы, эта фаза будет наблюдаться минимум единожды в процессе очистки, после того, как куча будет просканирована полностью. Она может повторяться несколько раз в процессе очистки, если объёма maintenance_work_mem оказывается недостаточно для сохранения всех найденных «мёртвых» кортежей.  Вопросов два - если увеличить этот размер, скажем до 6Gb, будет ли ускорение? И почему настолько разная скорость обработки индекса?
у вакуума есть рабочая память ( autovacuum_work_mem или же maintenance_work_mem, если первая -1 ). он сканирует таблицу, помещая “мертвые” записи в память. как только память заканчивается, он переходит в вакуумированию индексов, затем он вакуумирует таблицу (в том диапазоне, что прочитал на первом шаге). затем продолжает сканировать таблицу. соответственно, ему надо:
- дать больше памяти (на таблицах схожих с вашими это 1GB)
- понизить autovacuum_vacuum_cost_delay, чтобы быстрее работал за счёт более интенсивного IO (если диски не тянут, то будет больно)

можно смотреть прогресс в pg_stat_progress_vacuum
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
Denis Girko ☕️
IN <> ANY не взаимозаменяемы.

Например, с IN нельзя проверить равенство оператором LIKE (~).
Но это же НЕ РАВЕНСТВО!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
maxp.dev
проверку триггерами, как именно предалгаешь?
напомню, что у нас read commited
Вообще, это всё выглядит как-то так, IMHO:

> тут хотелось бюы по минимуму менять схему.

Привязали одну руку за спиной...

> напомню, что у нас read commited

А теперь другую.

> как именно предалгаешь?

И почему-то что-то не так... ;)

Я бы предложил прекратить маяться дурью и либо продолжать использовать MongoDB, либо сделать нормальную реляционную модель и использовать PostgreSQL полноценно.
Я к тому, что если строить на песке, потом тоже всё будет... нехорошо.
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Ilia Zviagin
Но это же НЕ РАВЕНСТВО!
IN <-> ANY :)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Ilia Zviagin
Да можно ещё сотню таких же случаев найти, а можно просто не использовать any и тоже жить полноценной жизнью.
А можно просто не использовать IN и жить полноценной жизнью. ;)
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Ilia Zviagin
Да можно ещё сотню таких же случаев найти, а можно просто не использовать any и тоже жить полноценной жизнью.
Не понимаю тезиса. Без ANY не обойтись, но можно жить полной жизнью без него.
источник