
Олег
01.05.2018
23:01:26
Получается, прошлый подход был верным, но неправильно реализованным?

Yaroslav
01.05.2018
23:01:39
Тем не менее, нужно было смотреть на самые частые запросы, и создавать индексы под них.

Олег
01.05.2018
23:03:06
Так и делали, в принципе. Но мне это в наследство досталось, тот, кто делал уже не работает с нами.

Yaroslav
01.05.2018
23:04:12

Google

Олег
01.05.2018
23:05:50
Там обычно графики строили примерно по 50-70 свечей, на день, неделю и тд. Выбирали соответственно исходя из периода только.

Yaroslav
01.05.2018
23:06:36
Но, если у вас сейчас партиции небольшого размера, и большинство запросов обходятся одной (и достаточно быстры _именно_ по execution time (из EXPLAIN ANALYZE)), то c объёмами у вас проблемы нет.

Олег
01.05.2018
23:07:39
Сейчас посмотрю на проде количество записей
Там запрос count по таблице только полминуты был
(41178.0ms) SELECT COUNT(*) FROM "pair_histories"
=> 266321665

Yaroslav
01.05.2018
23:10:21

Олег
01.05.2018
23:10:41
Это по старой таблице, она ещё на проде жива.
Из партиций, которые удалось сделать, микросекунды были

Yaroslav
01.05.2018
23:11:34

Олег
01.05.2018
23:13:38
вот это хорошая новость, тогда буду в этом направлении двигаться
Спасибо Вам

Yaroslav
01.05.2018
23:15:04

Google

Yaroslav
01.05.2018
23:15:35

Олег
01.05.2018
23:17:17
Нашел, просто VACUUM по нескольким таблицам и потом по ним же REINDEX TABLE
да, в следующий раз больше информации подберу к вопросу )
сейчас просто момент паники, когда все выходные все работало, а сейчас падать начало

Yaroslav
01.05.2018
23:19:09

Олег
01.05.2018
23:19:52
я в принципе подозревал, что так не надо, но пока работало - не трогал
а где можно почитать про настройки памяти и прочего под конкретные объемы данных?
потому как сначала я поймал ошибку
PG::OutOfMemory: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
по ней сложно было понять, в чем дело

Yaroslav
01.05.2018
23:26:54

Олег
01.05.2018
23:29:35
я 1024 поставил наугад, не помогло
а как определить порядок нужного числа для этой настройки?

Yaroslav
01.05.2018
23:35:21
а как определить порядок нужного числа для этой настройки?
Тут я точно не скажу, но, если я правильно помню, это происходит во время планирования запроса, когда планировщик накладывает locks на все объекты (т.е. ему нужно примерно: кол-во partitions * какую-то константу (вот её-то я не помню) locks). А есть у него: max_locks_per_transaction * (max_connections + max_prepared_transactions)
Да, и учтите, что вот это "ему нужно" —- это для _одного_ соединения/запроса, а "есть" —- это для _всех_.

Олег
01.05.2018
23:40:00
а если бы это были не партиции, а нормальные таблицы того же размера, это бы как-то иначе было? (делать так не буду, конечно)
да, там как раз и начало падать, когда я 4 потока запустил
теперь понятно, почему )

Yaroslav
01.05.2018
23:43:05
теперь понятно, почему )
Т.е. вы бы делали запросы к конкретным таблицам, типа okex_spot_rcn_btc? Если так, то да, было бы совсем иначе, т.к. locks бы накладывались только на неё (ну, и на служебные таблицы). Т.е. вы бы с этой проблемой не столкнулись бы, скорее всего, вообще никогда. ;)

Олег
01.05.2018
23:44:09
но динамически создавать/удалять таблицы не особенно хороший путь, насколько понимаю?

Yaroslav
01.05.2018
23:48:40
но динамически создавать/удалять таблицы не особенно хороший путь, насколько понимаю?
Да, десятки тысяч таблиц —- не лучшая идея, в общем случае (это уже вызывает всевозможные проблемы, связанные с ростом системных таблиц (каталога)).
Да и, плюс к тому, такое кол-во таблиц мало кто использует... и, если что, все bug-и будут ваши (и на проблемы с производительностью, даже если вы ими поделитесь в mailing lists, можно легко получить ответ в стиле "а вы так не делайте"). ;)

Google

Олег
01.05.2018
23:50:24
да, логично в принципе. предназначенное предпочтительнее приспособленного.

Evgeniy
02.05.2018
16:55:43
а Stas Kelvich у нас в чяте еще есть?

Konstantin
02.05.2018
19:05:32
Нет, Стас отсюда ушёл из-за флуда. Если к Стасу есть вопрос -могу передать...

Evgeniy
02.05.2018
19:06:07
да я хотел бенчмарков попросить в его тред добавить разных
мб напишу ему письмо, или у вас там планы уже какие есть

Pavel
02.05.2018
20:04:20
@knizhnik кстати, сегодня осилил тред в хакерах про внутренний пулер. Мое почтение. Не знаю, что выйдет, но вопросы глобальных масштабов. Красавец

Stas
02.05.2018
20:08:00

Pavel
02.05.2018
20:10:43

Evgeniy
02.05.2018
20:10:49
ну это ты негативные тесты сделаешь, а надо еще позитивных
пошардить пгбенч таблички по хешу, потом растаскивать их по серверочкам другим через фдв, и бенчить производительность в зависимости от расперделенных транзакций
плюс патчи для асинк фдв, если их еще не вмержили
плюс интересно как проседает перфоманс в зависимости от рассинхрона времени
как ведет себя на контеншоне
короче там уйму тестов можно сделать
ато не понятно ничего
и если будешь делать, было бы очень классно на амазоне или гугле, чтобы железо повторяемо было
заодно кол-во машин можно менять
второй вопрос, джепсеном тестили?

Google

Stas
02.05.2018
20:15:24

Evgeniy
02.05.2018
20:15:46

Stas
02.05.2018
20:15:46

Evgeniy
02.05.2018
20:15:54

Stas
02.05.2018
20:17:28
что и в его тестах для галеры и кокроуча

Evgeniy
02.05.2018
20:18:19
а как было бы понятно?
на трех размерах базы (в буферах, в памяти, на диске)
сделать тесты
1. бейзлайн, без шардинга
2. с шардингом, меняя кол-во серверов
плюс у тебя так завязочка на ин прогресс транзакции
значит надо сделать те же самые тесты меняя кол-во коннектов
плюс тесты с плохо синкнутыми временами, насколько сосет, в разных пропорциях на чтение и запись
для tpc-h я не знаю будет ли смысл делать тесты, пушо там обычно ридонли всё
какие транзакции


Stas
02.05.2018
20:23:24
а чем корректнес тестов проверяешь
основное — банковский тест с переводами денег и конкуррентным подсчетом баланса, на втроенном в пг перловом фреймворке запускаются пгбенчи с кастомными скриптами
https://github.com/jepsen-io/jepsen/tree/master/cockroachdb/src/jepsen/cockroach
получается примерно bank.clо джепсеновый

Evgeniy
02.05.2018
20:24:38
то есть тест детерминированный? знает что на выходе должно быть?

Stas
02.05.2018
20:25:23
не, скорее знает чего не должно быть — не должен быть ненулевым баланс

Evgeniy
02.05.2018
20:25:38
ок

Stas
02.05.2018
20:25:52
а дальше статистика, надо долго гонять чтоб что-то вылезло или не вылезло

Evgeniy
02.05.2018
20:28:19
> All readers who ran into tuples of an InDoubt transaction should wait until
it ends and recheck visibility
то есть ты такой читаешь, видишь xid, проверяешь что он расперделенный и сидишь ждешь его коммита?

Google

Evgeniy
02.05.2018
20:30:33
такое чувство что это для сериалайзбл
а для снапшота зачем ждать я не понимаю
мб надо пейпер почитать, но вдруг ты так объяснишь

Stas
02.05.2018
20:32:19

Evgeniy
02.05.2018
20:33:05
о, это важный нюанс

Stas
02.05.2018
20:34:35
а для снапшота зачем ждать я не понимаю
если его начали коммитить распределенно, то где-то он может быть закоммичен локально, а где-то еще запущен. Для этого коммит идет в две фазы: сначала расстави всем InDoubt, потом закоммитим с каким-то снапшотом.
Ну и если кто-то наткнулся на InDoubt должен подождать, так как не знает какой там снапшот в конче будет

Evgeniy
02.05.2018
20:35:22
я понял да, что надо проверить если между препаре и коммит

Stas
02.05.2018
20:35:35
угу, типо того

Evgeniy
02.05.2018
20:35:37
и подождать
релакс версию с коузал консистентностью не думал пилить?
для кей валью штук всяких
там поидее ждать меньше надо будет

Stas
02.05.2018
20:37:31
хотя согласен, что это нагляднее