172 похожих чатов

Хочу сделать партицирование по полю которое имеет более 10 тысяч

id, на сколько это правильно иметь более 10к партиций?)

В общем суть, есть таблица с 250 миллионами записей, и два вариант как по мне партицирования
1. это по датам 1 месяц, тогда таблица будет содержать примерно 80-90 тысяч записей и около 115 таблиц
2. Сделать партицирование по relation_id тогда будет более 10 тысяч таблиц, но каждая таблица будет иметь со старта чуть больше 27 тысяч строк, и только через 5 лет в таблице будет около 500 тысяч

22 ответов

17 просмотров

бы сделал по годам

Сергей- Автор вопроса
Alexey Bulgakov
бы сделал по годам

слишком много записей в одной партиции будет, сейчас сделал по 2 месяца и запрос на получение записей за 3 месяца около 4-8 секунд, если его запустить после этого еще раз то менее секунды

Сергей- Автор вопроса
Alexey Bulgakov
какой запрос именно?

select * from (select max(id) as id, avg(price) as price, avg(volume_24h) as volume, max(datetime) as datetime, "relation_id" from (select *, ceil(EXTRACT(epoch from to_timestamp(datetime)) / EXTRACT(epoch from INTERVAL '5 min')) as interval_time from "table" where "table"."relation_id" in (33805, …., …, ..., …)) as "table" where "datetime" >= 1659357000 group by "interval_time", "relation_id") as "table" order by "table"."datetime" asc;

Сергей
select * from (select max(id) as i...

Вы просто запрос не хотите переписать?

Сергей- Автор вопроса
Konstantin Zaitsev
Вы просто запрос не хотите переписать?

варианты, я не знаю как можно еще вытащить данные с группировкой по интервалам

3. Не делать партицыонирования, на паре сотен гигабайт оно крайне редко нужно.

Дажэ не план -- а всё из закрепа. И это пункт 0, так сказать для начала разговора за оптимизацыю запроса.

Сергей- Автор вопроса
Ilya Anfimov
Дажэ не план -- а всё из закрепа. И это пункт 0, ...

я уже давал как-то, не особо помогли, подумал что поможет партицировнание, таблица весит 30гб

Сергей- Автор вопроса
Ilya Anfimov
3. Не делать партицыонирования, на паре сотен гига...

что тогда в моем случаи нужно сделать или хоть в какую сторону копать, на стековерфлов люди пишут что базы по 500 миллионов и выборка меньше 1 секунды, а тут всего 230 мам 240 миллионов и уже 4-5 секунд

Сергей- Автор вопроса
Roman
секции не нужны на таблице в 30ГБ

а когда их делают, я думал тут не в весе дело, а в количестве записей

Сергей
а когда их делают, я думал тут не в весе дело, а в...

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

Такое поведение -- это кэш, к индэксам это не имеет никакого отношэния.

Сергей- Автор вопроса
Ilya Anfimov
Такое поведение -- это кэш, к индэксам это не имее...

он сбрасывается потому что озу ему мало, или потому что записи добавляются в огромном количестве?

Сергей
он сбрасывается потому что озу ему мало, или потом...

Скорее второе. Но вообще -- он обновляется потому, что это его работа. Держать последнее в памяти.

Сергей- Автор вопроса

Index Scan using cra_index_coin_id_and_datetime on coin_rate_avg (cost=0.56..5594.82 rows=4988 width=56) (actual time=6.601..4154.462 rows=5097 loops=1) как раз поиск данных по индексу)

Сергей
Index Scan using cra_index_coin_id_and_datetime on...

Это не поиск, это полный скан индекса. Вам не надо партицирование, сделайте просто индексы под каждый из основных запросов

Сергей- Автор вопроса

Да, стало из разряда… было 4-5 сек стало 1.5-3, но меня смущает количество индексов, выше сколько их я написал

Сергей
Да, стало из разряда… было 4-5 сек стало 1.5-3, но...

1) Ну, вы пока что предъявили один запрос -- давайте всю пачку, если хотите, чтобы мы поковырялись со всей пачкой. 2) Странный результат. Покажыте explain (verbose, analyze, buffers, timing) -- разница в скорости должна быть сильно большэ.

Сергей- Автор вопроса
Ilya Anfimov
1) Ну, вы пока что предъявили один запрос -- давай...

Запрос один, в нем меняется только интервал, он всегда изместен мне ( есть набор интервалов) я могу на них все сделать индексы и запросы сразу начинают использовать index only

Сергей
Запрос один, в нем меняется только интервал, он вс...

А-а. То есть, мой совет по поводу индэкса вы проигнорировали.

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта