
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-ов.


Аггей
21.03.2018
10:38:08

Mikhail
21.03.2018
10:41:57

Google

Yaroslav
21.03.2018
10:42:11

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

Yaroslav
21.03.2018
10:56:08

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

Artyem
21.03.2018
11:00:41

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

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

Pavel
21.03.2018
11:08:52

Аггей
21.03.2018
11:09:43

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 и создаются по необходимости по триггеру

Anton [Mgn, az09@osm]
21.03.2018
11:26:01

Nikita
21.03.2018
11:29:14

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

Anton [Mgn, az09@osm]
21.03.2018
11:39:58
@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

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

Evgeniy
21.03.2018
13:31:41

Аггей
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 если ? )
ну мало ли

Darafei
21.03.2018
13:44:26

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

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кк, не дурно

Yaroslav
21.03.2018
14:03:32

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

Yaroslav
21.03.2018
14:06:33

Mike Chuguniy
21.03.2018
14:06:56

Аггей
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

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

Andrew
21.03.2018
15:48:53

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

Tolya
21.03.2018
16:09:25

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

Yaroslav
21.03.2018
18:01:43

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

Vladislav
21.03.2018
18:09:23

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

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