Советы по упаковке данных

Alibek B.
Дата: 02.10.2015 15:28:34
Есть у меня в базе данных две большие таблицы, на 300М и на 70М записей.
Первая таблица содержит биллинговые записи (деньги), вторая таблица содержит сессии (длительность).
У одного объекта в течении объекта добавляется множество записей (в ряде случаев даже за один день объекту добавляется множество записей).
Я хочу сократить размер БД, "объединив" записи в месячные интервалы (то есть выполнив группировку+сортировку, записать результат в новую запись, а старые записи удалить). Но с такими объемами это нужно делать осторожно.
Скрипт может работать долго, главное чтобы он не нагружал сервер (процессор и память).
Я так понимаю, что вначале мне нужно составить список заданий (клиенты и периоды, которые подлежат упаковки), после чего в цикле осуществлять агрегацию записей. Не посоветуете, как это правильно делается? В таблицах есть индексы по идентификатору клиента и по дате записи.
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
eev
Дата: 02.10.2015 15:55:18
Alibek B.,
автор
две большие таблицы, на 300М .
- на сидюк влезет. должны быть более весомые предпосылки, чем интуитивное "чет нето".

Тем более
автор
"объединив" записи в месячные интервалы (то есть выполнив группировку+сортировку, записать результат в новую запись, а старые записи удалить)
судя по всему произойдет потеря детализации, в результате которой можно и по шапке.

имхо: не трож - не пахнет
Perl'ун
Дата: 02.10.2015 16:09:35
Таблицы постоянно меняются или это типа архив? Сколько в результате будет создано записей?

Если не много, то проще и быстрее будет сделать insert as select за несколько месяцев по всем клиентам, а затем постепенно удалить агрегированные записи. Индексы лучше не использовать, потому как обработать нужно почти все записи.

Посмотри пакет DBMS_PARALLEL_EXECUTE. Он позволяет разделить большую работу на части и сохранять промежуточный результат, даже в случае сбоя в одном из заданий.
Alibek B.
Дата: 02.10.2015 16:11:10
На сервере СУБД общий объем дискового пространства 800ГБ, из которых занято уже 550ГБ.
Плюс к этом я ожидаю увеличения скорости роста данных, поскольку сменил расчетный период с месячного на суточный.
Данные я должен хранить 3 года, на более старых данных вполне можно и потерять детализацию.
Alibek B.
Дата: 02.10.2015 16:12:36
Perl'ун
Таблицы постоянно меняются или это типа архив?

Это биллинг. Таблицы меняются, т.к. постоянно добавляются новые записи. Но уже добавленные записи практически не меняются (меняться могут только в пределах открытого расчетного периода, не более чем на месяц в глубину).
Q.Tarantino
Дата: 02.10.2015 16:13:03
Alibek B.
Есть у меня в базе данных две большие таблицы, на 300М и на 70М записей.

сколько занимают места они?
eev
на сидюк влезет

мы не знаем размер записи.

и тут не совсем ясно, дба ТС или разработчик.
Alibek B.
Дата: 02.10.2015 16:21:33
select t.table_name
, t.pct_increase
, t.initial_extent
, t.next_extent
, t.num_rows
, t.avg_row_len
, round(t.num_rows*t.avg_row_len/1024/1024,3) tsize
, t.blocks
, round(t.blocks/256,3) upper_size
from user_tables t
order by UPPER_SIZE desc


TABLE_NAMEPCT_INCREASEINITIAL_EXTENTNEXT_EXTENTNUM_ROWSAVG_ROW_LENTSIZEBLOCKSUPPER_SIZE
BM_SERVICE_MONEY65536212490290641296937819645607674063
RADACCT6553635704479227772945111402844454234
BM_ACTION_LOG65536236569718241061163137246629
DAILY_BACKUP65536107985771616477331517123113
BM_LOG_DATA65536499302166790441315751395
BM_PAYMENT6553630365417450388742629008
BM_ACCOUNT_FLAG655364744353314931629224578
BM_COUNTER655367041154530217490619164
BM_SRV_CNT_LINK6553614482841824861478018672
BM_SERVICE_ACTUAL_STATUS65536437810281169120087844
...
Alibek B.
Дата: 02.10.2015 16:23:09
Недоглядел на символ-разделитель.
Просьба модераторам подправить прерыдущее сообщение:
TABLE_NAMEPCT_INCREASEINITIAL_EXTENTNEXT_EXTENTNUM_ROWSAVG_ROW_LENTSIZEBLOCKSUPPER_SIZE
BM_SERVICE_MONEY655362124902906412969,37819645607674,063
RADACCT65536357044792277729,45111402844454,234
BM_ACTION_LOG655362365697182410,61163137246,629
DAILY_BACKUP655361079857716164,77331517123,113
BM_LOG_DATA6553649930216679,0441315751,395
BM_PAYMENT6553630365417450,388742629,008
BM_ACCOUNT_FLAG655364744353314,931629224,578
BM_COUNTER655367041154530,217490619,164
BM_SRV_CNT_LINK6553614482841824,861478018,672
BM_SERVICE_ACTUAL_STATUS655364378102811,69120087,844
eev
Дата: 02.10.2015 16:31:34
Alibek B.
800ГБ, из которых занято уже 550ГБ.
при условии, что нужно что-то сотворить с 2х300М - это как-то "ни о чем".
Нужно произвести анализ пространства которые занимают все объекты, использование\неиспользование индексов и т.д.
eev
Дата: 02.10.2015 16:32:47
Alibek B.
from user_tables t
order by UPPER_SIZE desc


user_segments