Как прогнозировать размеры таблиц Oracle? - PullRequest
4 голосов
/ 15 апреля 2011

Я пытаюсь сделать прогноз роста для некоторых таблиц, которые у меня есть, и для этого мне нужно сделать некоторые расчеты по размерам моих строк, сколько строк я сгенерирую за день и хорошо .. математика.

Я вычисляю средний размер каждой строки в моей таблице как сумму среднего размера каждого поля.Итак, по сути:

SELECT 'COL1' , avg(vsize(COL1)) FROM TABLE union
SELECT 'COL2' , avg(vsize(COL2)) FROM TABLE

Подведите итог, умножьте на количество записей дня и отработайте прогнозы оттуда.

Оказывается, что для одной из таблиц, которые я посмотрелрезультирующий размер намного меньше, чем я думал, и это заставило меня задуматься о правильности моего метода.

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

Мои вопросы:

  1. Надежен ли этот метод, который я использую?

  2. Советы о том, как можно составить прогнозы дляИндексы?

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

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

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

1) Ваш метод является правильным для расчета среднего размера строки.(Хотя имейте в виду, что если ваш столбец содержит ноль, вы должны использовать avg(nvl(vsize(col1), 0)) вместо avg(vsize(COL1))).Тем не менее, он не учитывает физическое расположение строк.

Прежде всего, он не учитывает информацию заголовка (как из блоков, так и из строк): вы не можете поместить данные 8 КБ в блоки 8 КБ.См. Документацию по формату блока данных для получения дополнительной информации.

Тогда строки не всегда хранятся аккуратно упакованными.Oracle выделяет некоторое пространство в каждом блоке, чтобы при обновлении строки могли расти (определяется параметром pctfree).Также, когда строки удаляются, пустое пространство не освобождается сразу (если вы не используете ASSM с локально управляемыми табличными пространствами, объем свободного пространства, необходимый для возврата блока в список доступных блоков, зависит от pctused).

Если у вас уже есть некоторые репрезентативные данные в вашей таблице, вы можете оценить объем дополнительного пространства, которое вам потребуется, сравнив физически используемое пространство (all_tables.blocks*block_size после сбора статистики) со средней длиной строки.

Кстати, Oracle может легко дать вам хорошую оценку средней длины строки: собрать статистику по таблице и запросить all_tables.avg_row_len.

2) Большую часть времени (читай: если толькоошибка, или вы попадаете в нетипичное использование индекса), индекс будет расти пропорционально количеству строк.

Если у вас есть репрезентативные данные, вы можете получить хорошую оценку их будущего размера поумножение его фактического размера на относительный рост числа строк.

4 голосов
/ 15 апреля 2011

В последний раз Oracle публиковал свои формулы для оценки размера объектов схемы в Oracle 8.0, что означает, что связанный документ устарел на десять лет. Однако я не ожидаю, что многое изменилось в том, как Oracle резервирует заголовок сегмента, заголовок блока или информацию заголовка строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...