@pgsql

Страница 721 из 1062
Artyem
21.03.2018
10:18:46
у нас партиции в мускуле ещё и на вставку влияли, а то можно было словить неприятный баг, что данные метрик оказывались в кеше самого заббикса, по ним отрабатывали триггеры и всё такое, а в базе этих данных нет, так как он не успевал их вставить, после перехода на подневные партиции в истории, на тех-же аппаратных ресурсах проблема ушла

Yaroslav
21.03.2018
10:21:48
Партицирование может дать выигрыш если а) большинство запросов локальные, т.е. затрагивают тоько один партишин. б) используются вторичные индексы Первое вроде очевидно, второе - надо пояснить. Да, поиск в индексе с 10 млн записей быстрее чем поиск в индексе с 100млн. записей. Но не в 10 раз а в log(10). Тка что, если запросы делаются воссновном по какому-то относительно недавнему диапазаону времени, то эффекта от партицирования почти не будет. Но вот если задействованы вторичные индекы, по которым данные не упорядочены, и глобальный индекс целиком не влезает в память, а индекс на партишин -влезает, то тогда партицирвание может разогнать на порядок.
Во-первых, не в log(10), а (максимум!) в разницу логарифмов (по основанию в кол-во записей во внутреннем узле) от кол-ва записей в непартиционированнй и партиционированной таблицах. В данном примере с 10-100 это скорее всего... 0 (т.е. кол-во чтений одинаково). Во-вторых, что такое "вторичные индексы"? В-третьих, если запросы идут по многим партциям, фактически сканируя какие-то —- да, выигрыш будет, но за счёт seqscan-ов.

Google
Mikhail
21.03.2018
10:42:42
Рискну спросить, а откуда такие глубокие познания?

Yaroslav
21.03.2018
10:56:08
Рискну спросить, а откуда такие глубокие познания?
Образование и работа, как обычно... а причём тут вообще я? ;)

Mikhail
21.03.2018
10:57:28
праздный интерес...

Nikita
21.03.2018
11:04:23
можно как-то выбрать таблицы, которые удовлетворяют определенному check? У нас есть секционированные таблицы,нужно выбрать и дропнуть те таблицы, в которых значение удовлетворяет определенному значению (оно входит в check)

т.е. грубо говоря, нужно дропнуть те таблицы, в которых записи старше 1.5 лет

Аггей
21.03.2018
11:08:09
У pg_pathman есть механизм поиска таких партиций )

Аггей
21.03.2018
11:09:43
У pg_pathman есть механизм поиска таких партиций )
pathman_partition_list где можно фильтрануть по диапазонам партиций

Anton [Mgn, az09@osm]
21.03.2018
11:19:43
простите сейчас глупость наверно скажу. но скажите а какие имена присваиваются партициям? и не участвует ли чек в формировании имени каждой таблицы?..

Аггей
21.03.2018
11:21:12
Пример trends_226

Просто номер по порядку

Google
Anton [Mgn, az09@osm]
21.03.2018
11:23:57
т.е. только косвенно можно вычислить сколько партиций насоздавалось за полтора года

Nikita
21.03.2018
11:24:04
это ко мне вопрос? :) если ко мне, то отвечу: имена патриций типа events_y2017m6, ну и т.д. Все таблицы наследуют events и создаются по необходимости по триггеру

Nikita
21.03.2018
11:29:14
о, ну кмк тут вообще не проблема - удаляйте от таблицы events_y2016m9 и ранее %)
просто нужно написать скрипт/процедуру, чтобы формировать имена партиций, а я чот в pl/pgsql не силен. Думал, что можно выбрать как-то хитро выбрать имена патриций сразу, указав constraint/check в качестве условия

Anton [Mgn, az09@osm]
21.03.2018
11:30:59
ох, там что, тыщи старых кандидатов на удаление?.. да в экселе накидать эти "магические" числа да соединить в строчку )



Nikita
21.03.2018
11:34:21
эта магия выше моего понимания, тем более у нас табу на ехель, только либре, тольк о хардкор

Anton [Mgn, az09@osm]
21.03.2018
11:35:46
да хоть гуглшитс ?

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

Pavel
21.03.2018
11:38:17
да хоть гуглшитс ?
а через generate_series кто сделает?

Anton [Mgn, az09@osm]
21.03.2018
11:39:58
а через generate_series кто сделает?
тоже вариант. по мне так зависит от глубины боли. если там не больше полсотни накопилось то быстре всё же моей "магией", не? ??

@tofghd по простому покажите SELECT count(*) FROM pg_tables WHERE tablename < 'events_y2017m' AND tablename LIKE 'events_y%'

жаль правда что месяц закодирован одной цифрой

Nikita
21.03.2018
11:57:07
ладно, спасибо, что-нибудь придумаю :)

Anton [Mgn, az09@osm]
21.03.2018
11:58:29
а если двумя?
ну было бы чуть проще ) хотя если как в первом предложенном варианте то пофиг

Nikita
21.03.2018
11:59:48
17 таблиц всего, изи

Google
Nikita
21.03.2018
12:00:15
спасибо, примерно понял как делать

Anton [Mgn, az09@osm]
21.03.2018
12:00:32
17 таблиц всего, изи
причем 3 из них пока еще нельзя удалять. осторожнее

Mike Chuguniy
21.03.2018
13:08:35
народ, а вот такой вопрос: есть табличка логов: create table action_logs ( al_id bigserial primary key, action_ts timestamp, ... ) CREATE INDEX action_logs_action_ts_idx ON action_logs (action_ts); Дык вот, запрос select count(*) from action_logs where action_ts >= current_date - 7 вызывает bitmap index scan есть ли возможность заставить ПГ делать index scan?

записей: ~50 млн

Чегой-то у меня никак индексскана не получается, а хочется. :(

Yaroslav
21.03.2018
13:21:21
Чегой-то у меня никак индексскана не получается, а хочется. :(
А покажите EXPLAIN ANALYZE. И ещё: какая версия PostgreSQL, VACUUM ANALYZE делали?

Аггей
21.03.2018
13:36:30
А * тут не влияет?

Eugeny
21.03.2018
13:44:00
select count(*) from action_logs where action_ts >= (current_date - 7)::timestamp если ? ) ну мало ли

Mike Chuguniy
21.03.2018
13:44:37
@korhog ошибку выдаст.

Eugeny
21.03.2018
13:45:41
какую именно?

Darafei
21.03.2018
13:45:58
256Мб
а сколько размер индекса?

Mike Chuguniy
21.03.2018
13:46:08
какую именно?
Синтаксическую. Это было первое, что я проверял.

Eugeny
21.03.2018
13:46:23
-7 это -7 дней?

current_date timestamp?

date

на 9.3 сейчас сделал select * from ssr_smeta_act where object_create_date > (now()::date - 7)::timestamp все ок

Mike Chuguniy
21.03.2018
13:53:37
на 9.3 сейчас сделал select * from ssr_smeta_act where object_create_date > (now()::date - 7)::timestamp все ок
Фиг его знает, чего я не так делал, сейчас не помню уже. Но битмап индекс скан остаётся.

Google
Eugeny
21.03.2018
13:54:31
тогда приложи explain analyze

Mike Chuguniy
21.03.2018
13:54:36
понизь рандом пейдж кост
На другой табличке в подобной ситуации был индекс скан без кручения костов.

Evgeniy
21.03.2018
13:55:41
ну на другой табличке небось и данные были чутка другие, и кол-во записей и их кластерность

постгрес же считает что будет дешевле

и есть пара ручек повлиять на него

Mike Chuguniy
21.03.2018
13:56:16
Aggregate (cost=496940.19..496940.20 rows=1 width=4) (actual time=223.200..223.200 rows=1 loops=1) -> Bitmap Heap Scan on action_log (cost=20362.43..494220.89 rows=1087723 width=4) (actual time=69.911..155.283 rows=1086466 loops=1) Recheck Cond: (start >= (('now'::cstring)::date - 14)) -> Bitmap Index Scan on action_log_start_idx (cost=0.00..20090.49 rows=1087723 width=0) (actual time=68.147..68.147 rows=1086466 loops=1) Index Cond: (start >= (('now'::cstring)::date - 14)) Total runtime: 223.259 ms

Darafei
21.03.2018
13:56:47
а почему там не битмап?

Evgeniy
21.03.2018
13:57:02
155 мс на вычитку 1кк, не дурно

Mike Chuguniy
21.03.2018
14:04:08
постгрес же считает что будет дешевле
Спасибо, понял, затупил, виноват, насчёт исправиться - вопрос непраздынй, с совершенно неоднозанчным ответом.

Yaroslav 9.3 я народ ввёл в заблуждение, было select count(pk) from table, а не select count(*) from table, по второму запросу вообще индекс оунли скан.

Аггей
21.03.2018
14:12:00
Yaroslav
21.03.2018
14:17:58
.
10-ка делает IOS и при COUNT(поле), так что проблема, скорее всего, в версии.

Tolya
21.03.2018
14:20:17
Всем привет! подскажите, пожалуйста, как можно удобно перетащить большое число файлов из xml в таблицы ? кейс - смигрировать репозиторий с liquibase в постгрю, чтобы можно было по id из databasechangelog явно понять какой запрос там на самом деле выполнялся

файлы версионные, везде лежат ликви-ченджсеты

или может быть есть альтернативы. нужно для всех ЧСов понять их время выполнения, в том числе и для тех, которые были год назад, скажем

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

Pavel
21.03.2018
15:10:14
Дайте ченидь за индексы почитать

Google
Konstantin
21.03.2018
15:10:59
Дайте ченидь за индексы почитать
https://habrahabr.ru/company/postgrespro/blog/326096/ Там по ссылочкам погуляй

Pavel
21.03.2018
15:11:15
Спасибо

Konstantin
21.03.2018
15:50:49
К слову, если кто не видел, оставлю тут еще вот это http://rachbelaid.com/introduction-to-postgres-physical-storage/

Tolya
21.03.2018
16:09:25
Pgloader?
Спасибо, посмотрю

Vladislav
21.03.2018
17:54:24
Всем привет. Такой вопрос как лучше хранить список комментариев к товару ? В ячейке "comments" с типом jsonb или создать отделью таблицу под комментарии с внешним ключем ?

Tolya
21.03.2018
18:01:45
Pgloader?
не умеет грузить xml эта фича находится в todo

Vladislav
21.03.2018
18:03:02
А вообще плохо делать ячейку с типом jsonb, в которой лежит массив объектов в которых есть id и по ним обьеденять с другой таблицей ? Какие проблемы такая реализация может за собой нести ?

Yaroslav
21.03.2018
18:07:54
А вообще плохо делать ячейку с типом jsonb, в которой лежит массив объектов в которых есть id и по ним обьеденять с другой таблицей ? Какие проблемы такая реализация может за собой нести ?
Вы просто таким образом нарушаете первую нормальную форму, т.е. это несёт за собой все связанные с этим проблемы. (Можете попробовать "поиграться" с этим на каком-нибудь более-менее нетривиальном примере.)

Yaroslav
21.03.2018
18:13:29
Спасибо большое за разъяснение
Да, из неочевидного / специфичного: . По полям jsonb не собирается никаких полезных статистик, т.е. если они участвуют в более-менее сложных запросах, оптимизатор строит планы фактически "наугад". . Записи в таблицах всегда обновляются целиком, т.е. если обновить только одно значение в Jsonb, будет сделана копия _всей_ записи. . Индексировать их тоже не так-то просто.

Vladislav
21.03.2018
18:18:51
Ага, ну допустим использовать jsonb для набора параметров фильтрации товара можно? т.к. товары содержат разный набор параметров и держать их в jsonb удобно

Просто хочу понять когда можно, когда низя примерно.

Страница 721 из 1062