
Dmitry
13.09.2018
07:10:35

Andrei
13.09.2018
07:10:35
select * from (select account, min(period_code) as period_code from model_oku group by account) tmp order by 2 limit 1
для вашего запроса - идеальный вариант - индекс по этим двум полям
потому что можно заставить планировщик отсекать по аккаунту, но что вы будете делать с оверхедом по мере роста таблицы?

Google

Andrei
13.09.2018
07:13:06
а так - обойдетесь индекс ОНЛИ сканом

Dmitry
13.09.2018
07:13:13

Andrei
13.09.2018
07:14:12
ну вот, 4-кратная разница выполнения
создайте индекс по аакаунту и период_коду

Dmitry
13.09.2018
07:17:15
оставил пока так select period_code from (select distinct period_code from model_oku where account='1000001') _ order by 1 desc limit 1;
Execution time: 0.172 ms

Andrei
13.09.2018
07:28:11
все равно чет не понятно
почему поиск по индексу такой медленный?
я сгенерил тестовую таблицу
индекс
30млн записей
примерно с таким же соотношением - 1000 периодов на один аккаунт
'Planning time: 0.184 ms'
'Execution time: 0.062 ms'

Google

Dmitry
13.09.2018
07:37:43
у меня другое соотношение. 11 периодов и 12 тысяч account
диск 677.24 MB/sec
на чтение
размер индекса на period_code 458 MB, на account 605 MB, на period + account 196 MB


Yaroslav
13.09.2018
07:40:47
у меня другое соотношение. 11 периодов и 12 тысяч account
Я посмотрел немного (извините, работаю ;) ).
Мне пока непонятна только вот эта оценка:
Index Scan Backward using model_oku_period_code_idx on model_oku
(cost=0.43..903481.92 rows=2180 width=4)
В остальном тут всё, с виду, логично.
https://pastebin.com/N7RYkSyy
(Пролистывая backlog) Вы не тот индекс создали. ;)
Ну да ладно, к Вашему вопросу это не относится.
Смотрите, дело тут вот в чём:
Планировщик предполагает, что всего в таблице 2180 rows, для которых: (period_code IS NOT NULL) AND account = '1040349-Г1'
(Предполагает, видимо, исходя из показанного Вами ранее кол-ва разных account; и null_frac для period_code, которую Вы не показывали, т.к. мы и не спрашивали ;) ).
А далее проявляется "оптимизм" планировщика (на самом деле, предположение о равномерном, независимом распределении):
Раз "Index Scan Backward" стоит 903481.92 и вернёт 2180 rows, то возврат 1 row в 2180 раз дешевле (см. стоимость LIMIT).
Но работает это только тогда, когда при "движении вдоль по индексу model_oku_period_code_idx" account = '1040349-Г1' действительно скорее всего встретится после сканирования 1/2180, что верно только в том случае, если account независимо распределены в порядке следования (записей индекса) period_code... что в реальности явно не так, и получается Ups!.
Можете почитать вот тут, например, если интересно: https://www.postgresql.org/message-id/541A2335.3060100@agliodbs.com


Dmitry
13.09.2018
08:01:58
Спасибо большое

Kazakbala
13.09.2018
08:29:03
ктонить пользовался https://pgtune.leopard.in.ua/
как расчитать оптимальные настройки для сервера?
озу 132гб
cpu 56
версия 9.5

Mike Chuguniy
13.09.2018
08:33:56
Я предпочитаю вот такой вот конфигуратор: http://pgconfigurator.cybertec.at/

Виктор
13.09.2018
08:36:49

Kazakbala
13.09.2018
08:37:28
стоит перейти на 9.6?

Yaroslav
13.09.2018
08:37:31

Kazakbala
13.09.2018
08:38:25

Mike Chuguniy
13.09.2018
08:39:04

Yaroslav
13.09.2018
08:39:11

Mike Chuguniy
13.09.2018
08:40:07

Dmitry
13.09.2018
08:40:36

Google

Yaroslav
13.09.2018
08:40:47

Kazakbala
13.09.2018
08:41:25

Mike Chuguniy
13.09.2018
08:57:00
Ярослав, вот честно, новичку имеет смысл random_page_cost, впрочем, как и все остальные косты крутить? ;) Я вот чегой-то думаю, что не стоит.
Может всё-таки привеСти?

Kazakbala
13.09.2018
08:58:32

Mike Chuguniy
13.09.2018
08:59:21

Kazakbala
13.09.2018
08:59:48

vitaly
13.09.2018
09:00:05
Ф

Yaroslav
13.09.2018
09:06:24

Mike Chuguniy
13.09.2018
09:09:10
При том, что все сразу понять и осознать, только поставив ПГ, невозможно в принципе. Когда ты знаешь о костах, тебе не нужен конфигуратор. Когда тебе нужен конфигуратор, лезть в косты не имеет смысла, потому что ты тупо не понимаешь, что это такое, и к чему приведёт кручение обсуждаемой группой параметров.
Блин, и эти checkpoint_completion_target крутЮт, ироды!
Я бы ещё из конфигуратора блок Background writer выкинул.

Yaroslav
13.09.2018
09:12:25

Kazakbala
13.09.2018
09:13:03
"Теперь вы можете из коробки делать репликацию отдельных таблиц на другие базы."
а как это работает если таблица связана с foreign key? надо их тоже реплицировать?

Yaroslav
13.09.2018
09:17:23
При том, что все сразу понять и осознать, только поставив ПГ, невозможно в принципе. Когда ты знаешь о костах, тебе не нужен конфигуратор. Когда тебе нужен конфигуратор, лезть в косты не имеет смысла, потому что ты тупо не понимаешь, что это такое, и к чему приведёт кручение обсуждаемой группой параметров.
Так а зачем новичку этим заниматься, если это хоть какой-то "серъёзный" сервер?
Для примера, можно купить сервер за 10000$, и "новичок" настроит его так, как бы работал нормально настроенный сервер за 2000$.
Не стоит ли как-то иначе подойти к вопросу конфигурирования (обратиться там куда-нибудь, например)? ;)

Kazakbala
13.09.2018
09:19:03
(надеюсь это не запрещено правилами чата)

Mike Chuguniy
13.09.2018
09:19:31

Google

Kazakbala
13.09.2018
09:19:50
но пока что на обучение.

Mike Chuguniy
13.09.2018
09:20:29
Ну вот, ждите ответа. Попутно читайте документацию и пытайтесь что-нибудь сделать сами.

Yaroslav
13.09.2018
09:20:49

Kazakbala
13.09.2018
09:20:50

Mike Chuguniy
13.09.2018
09:21:47

Kazakbala
13.09.2018
09:24:29

Mike Chuguniy
13.09.2018
09:25:10

Kazakbala
13.09.2018
09:26:45

Yaroslav
13.09.2018
09:33:12

Kazakbala
13.09.2018
09:41:35
"я не трус, но я боюсь"

Yaroslav
13.09.2018
09:44:25
"я не трус, но я боюсь"
Ну так у Вас же есть стенд, пробуйте. :)
Не забудьте, что в каждой major version есть (ну или могут быть) backward-incompatible changes, т.е. Ваши приложения могут (частично) перестать работать. См. release notes, опять-таки.

Kazakbala
13.09.2018
09:45:40

Eugeny
13.09.2018
10:47:24

Andrei
13.09.2018
10:48:50
джойнов нету