metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-03-25 07:18 pm

Распределенный Postgresql срач

В итоге, в разборки насчет использования [livejournal.com profile] dmzlj postgresql под приличной нагрузкой в системе GPS-мониторинга подключили всех до кого смогли дотянутся, вплоть до разработчиков postgresql.

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

В качестве решения проблемы в итоге предложили какое-то хитрое двухуровневное партиционирование, которое должно устранить проблему фрагментации - сначала партиционировать сильно актуальные данные (текущий день(неделя, месяц)) по hash id объекта, затем переносить данные в партиции по времени кусками с одинаковыми id чтобы избежать фрагментации.

[identity profile] plumqqz.livejournal.com 2010-03-25 07:39 pm (UTC)(link)
Забавно, что в случае оракла при минимальном применении головы это получилось бы автоматически.

[identity profile] theiced.livejournal.com 2010-03-25 07:41 pm (UTC)(link)
В итоге - 350 лямов записей на моём девтопе.

[identity profile] theiced.livejournal.com 2010-03-25 07:42 pm (UTC)(link)
забавно, что в случае постгре, при минимальном применении головы, это бы тоже получилось автоматически.

ну и будет учитывать то что когда я в 9 утра начал заниматься этой проблемой - то я уже не спал более суток ;]

[identity profile] theiced.livejournal.com 2010-03-25 07:43 pm (UTC)(link)
для статистики - у них уже с десятком лямов всё умирало к хуям.

[identity profile] metaclass.livejournal.com 2010-03-25 07:45 pm (UTC)(link)
Насколько я помню из обсуждений, Оракл там в бюджет не вписывается, проще немного пошаманить над postgresql или использовать вуду-эрланговую мнезию.

[identity profile] plumqqz.livejournal.com 2010-03-25 07:45 pm (UTC)(link)
Не получилось бы. Постгрес не умеет партиции, IOT и компрессию индексов (да и данных тоже).

[identity profile] plumqqz.livejournal.com 2010-03-25 07:47 pm (UTC)(link)
Ну что ж делать, раз не вписывается. Тады, конечно, ой.

[identity profile] theiced.livejournal.com 2010-03-25 07:49 pm (UTC)(link)
(посмотрел на партиции) точно не умеет?

эксперты такие эксперты...

[identity profile] metaclass.livejournal.com 2010-03-25 07:51 pm (UTC)(link)
partitioning как-то умеет: http://www.postgresql.org/docs/8.4/interactive/ddl-partitioning.html

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

А компрессия индексов (префиксная что ли?) это видимо тут бы помогло прилично, да.

[identity profile] plumqqz.livejournal.com 2010-03-25 07:52 pm (UTC)(link)
То, что в постгресе называют партициями, не партиции, но всего лишь неумелая подделка под оные. (Нет нормального секционирования индексов, не работают параметры). Внимательней овладевайте документацией.

Настоятельно рекомендую прочитать про партиции в Оракле и партиции и MDC в DB2.

[identity profile] plumqqz.livejournal.com 2010-03-25 07:55 pm (UTC)(link)
Именно что как-то.

У постгреса довольно ракообразная версионность и он всегда вынужден лазить в таблицу, дабы убедится, жива ли запись или как. Т.е. покрытие индексом в нем не работает. В данном случае это было как серпом по гонадам.


Угу, префиксная. Ну можно и собственно данные пожать.

[identity profile] plumqqz.livejournal.com 2010-03-25 08:00 pm (UTC)(link)
А, еще маленькое "но". У постгреса оверхед в 26 байт на запись, кроме заголовка страницы, который тоже немаленький. У оракла - два байта, что ли.

[identity profile] theiced.livejournal.com 2010-03-25 08:01 pm (UTC)(link)
ок. в итоге проблема была успешно решена перманентно сонным мной за рабочий день. великие оракель эксперты всё ещё ставили бы оракель.

[identity profile] madeveloper.livejournal.com 2010-03-25 08:03 pm (UTC)(link)
1. event_id_idx - долой
2. Если селективность по дате (судя по запросам это сутки) сопоставима с селективностью по id (если id в пределах тысячи, то за три года селективность будет аналогичная), то "event_id_dt" btree (id, dt) -> "event_dt_id" btree (dt, id) - записи в индексе меньше фрагментироваться будут и тогда event_id_idx можно оставить
3. непонимаю, как помогло партицирование данных, если в запросе выбирается id и dt которые в индексе есть - т.е. к данным нормальный сервер вообще не полезет


[identity profile] theiced.livejournal.com 2010-03-25 08:05 pm (UTC)(link)
индекс он тоже... того... не совсем маленький, да. где то в 1/4 данных.

[identity profile] madeveloper.livejournal.com 2010-03-25 08:07 pm (UTC)(link)
А, вижу. Судя по появившиеся наверху постам апослягря к нормальным серверам не относится...

[identity profile] madeveloper.livejournal.com 2010-03-25 08:08 pm (UTC)(link)
т.е. индексы тоже спартицировали?

[identity profile] metaclass.livejournal.com 2010-03-25 08:09 pm (UTC)(link)
Лезет к данным. Если я правильно понял комментарий выше - то это следствие версионной архитектуры - лезет проверять версию записи, похоже.

[identity profile] dmzlj.livejournal.com 2010-03-25 08:54 pm (UTC)(link)
И что-то это такой все гиморой в итоге, что я уже не рад, что ввязался.

[identity profile] dmzlj.livejournal.com 2010-03-25 08:59 pm (UTC)(link)
Но я почти решил проблему. Мы кого-нить поймаем, вырежем почку, продадим и поставим оракл. На один сервак должно хватить.

[identity profile] vp.livejournal.com 2010-03-25 09:01 pm (UTC)(link)
было бы в 1000 раз меньше геморроя если бы заказчика били по рукам на этапе постановки. Ваши 40.000 точек в день нахер никому не упали. У нас самый требовательный к качеству трека транспорт генерит не более 3.000 точек в сутки. И это при круглосуточной работе.

Сразу отметается постановка геморозадачи.

[identity profile] dmzlj.livejournal.com 2010-03-25 09:05 pm (UTC)(link)
28800. Я что-то не догоняю, откуда 40 взялось. Но на этапе постановки задачи тем более были неясны все вот эти вот нюансы, которые сейчас повылазили.

И ваще, с глубоким партиционированием даже мнезия работает ok. У нас так и есть, собственно.

А вот сумасшедшие железнодорожники хотят ваще скважность полсекунды. К вопросу о. У них, правда паровозов не так много.

[identity profile] metaclass.livejournal.com 2010-03-25 09:10 pm (UTC)(link)
Я подозреваю, там что-нибудь из соображений "следить за сверхскоростным поездами". Особо это радует в контексте точности GPS-приемников и скорости выдачи ими результатов :)

[identity profile] dmzlj.livejournal.com 2010-03-25 09:13 pm (UTC)(link)
Главным образом потому, что они сами не понимают чего хотят, но исходят из того, что если попросят раз в полсекунды, то им будет в случае чего не так худо, как если попросят раз в полминуты. Ну типа они считают, что если что, то из полсекунды полминуты они сделают как-нибудь, а вот наоборот --- никак.

И убедить их врядли в чем-то можно, потому что что такое РЖД и что такое мы.

[identity profile] max-posedon.livejournal.com 2010-03-26 12:23 am (UTC)(link)
5k$ за процессор, и это за базовый oracle, не RAC. На простой 4х процессорный сервер(по 2 ядра на каждом). это уже 20k$ + специально-обученный-мальчик-oracle-вод минимум на месяц, ещё 5k$ = 25k$, в России такие дорогие почки, или я таки уже на 3-4 почки насчитал?)

Page 1 of 3