|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Здавствуйте, уважаемые форумчане! Подскажите, как рассчитать EXTENT SIZE и NEXT SIZE. Работаю с Informix 9.xx на платформе UNIX. Дело в загрузке данных. Имеется сруктура таблица, количесво загружаемых записей. Также в таблице могут быть индексы. Формула, ссылка, объяснение, буду очень признателен ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 13:13 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Это хорошо делать Sentinal Server Studio там есть такая функция . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 13:15 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushЗдавствуйте, уважаемые форумчане! Подскажите, как рассчитать EXTENT SIZE и NEXT SIZE. Работаю с Informix 9.xx на платформе UNIX. Дело в загрузке данных. Имеется сруктура таблица, количесво загружаемых записей. Также в таблице могут быть индексы. Формула, ссылка, объяснение, буду очень признателен А что вам осталось не ясно из предыдущего ответа ? Опять таки, сильно зависит от интенсивности (частоты) загрузки данных. Если вам нужно один раз загрузить массив данных и далее он практически не будет меняться - это один вариант. Тут , вроде, все понятно - приблизительно посчитать начальный размер таблицы (есть вопросы ?), увеличить на 10% (или просто накинуть свободное место - т.к. даже 10% для начального размера в 1Гб довольно много и може вообще не понадобится). Второй вариант - когда таблицу нужно загрузить и затем регулярно добавлять туда большое кол-во данных. Нужно знать частоту, объем данных, и , соответственно, прикинуть размер начального экстента и вторичного. Третий - когда таблица сильно модифицируема, т.е. данные добавляются и удаляются большими порциями. Тут могут быть разные стратегии - от использования "временных" таблиц, которые чистятся и создаются каждый день (буферные таблицы), до создания нормальных таблиц с продуманной структурой (минимум триггеров, индексов и констрейнтов). Если начальные данные будете загружать в БД утилитой dbimport, то она может сама создать вам таблицы нужного размера. Исходя из того, что вы второй раз задаете тот же вопрос, вам что конкретно не понятно ? Может дадите структуру таблицы и данные, которые я назвал, и мы "на пальцах" поясним приблизительный механизм расчета ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 13:45 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Вот такая задача. 1 раз в месяц происходит перенос данных с одного сервера на другой. Стуктура таблиц не меняется, количество таблиц для переноса каждый раз разное. С EXTEND SIZE для таблиц без индексов я разобрался. Правда не совсем понятно ROWSIZE. Откуда его брать, знаю, но как он получается - не понятно. Вот структура одной таблицы CREATE TABLE .c1( cust_code INTEGER NOT NULL, ab_code INTEGER NOT NULL, phone INTEGER, serv_code INTEGER NOT NULL, zona_code INTEGER NOT NULL, tel_b DECIMAL(20,0) NOT NULL, rs_code SMALLINT NOT NULL, date_usl DATE, time_usl INTEGER NOT NULL, prod INTEGER, koly SMALLINT NOT NULL, sr INTEGER NOT NULL, nom_pac SMALLINT, nom_doc CHAR(2), nom_oper SMALLINT, summa INTEGER NOT NULL, credit INTEGER) EXTENT SIZE 4462 NEXT SIZE 1118 LOCK MODE ROW; CREATE INDEX ic1_cust_code ON c1(cust_code, ab_code, date_usl, time_usl); Rowsize 65 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 15:19 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
KyRo, Это вещь хорошая, но есть желание автоматизировать весь процесс, путем написания небольшого скрипта. Мне нужен сам механизм рассчета ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 15:26 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Matiush, а вы уверены, что вам надо считать? чем вас значения по умолчанию не устраивают? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 15:55 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
ТанMatiush, а вы уверены, что вам надо считать? чем вас значения по умолчанию не устраивают? +1 Цель непонятна, задача ещё больше... Рассказать где хранится нужная инфо? Или как получить цифирку, необходимую неизвестно для чего? Вот это: MatiushС EXTEND SIZE для таблиц без индексов я разобрался С чем Вы разобрались? Как его получить у существующей? Или как его задать, чтобы таблица одним extentom поместилась? Ещё раз: как звучит цель и задача? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 16:00 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushВот такая задача. 1 раз в месяц происходит перенос данных с одного сервера на другой. Стуктура таблиц не меняется, количество таблиц для переноса каждый раз разное. С EXTEND SIZE для таблиц без индексов я разобрался. Вам будет полезно почитать Performance Guide -> Table Performance Considerations -> Choosing Table Extent Sizes Estimating Table Size Estimating Data Pages Changing Tables to Improve Performance Reclaiming Unused Space Within an Extent MatiushПравда не совсем понятно ROWSIZE. Откуда его брать, знаю, но как он получается - не понятно. Встречный вопрос - а вы знаете сколько байт использует тот или иной тип данных ? Тот же INTEGER или DECIMAL(20,0) ? Если нет, то вам прямая дорога к букварям Информикса (можно и другие СУБД). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 16:00 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushЭто вещь хорошая, но есть желание автоматизировать весь процесс, путем написания небольшого скрипта. Мне нужен сам механизм рассчета Какой процесс нужно автоматизировать ? Расчета Extent size ? Зачем ? У вас таблицы заново создаются каждый раз ? Или все таки дополняются переносимыми данными ? Может и не нужно всего этого ? "Зачем лезть в окно, если дверь открыта ?" P.S. Почему информацию нужно вытаскивать по крохам ? Кому нужно решение проблемы (если она вообще существует?) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 16:17 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
АнатоЛойТанMatiush, а вы уверены, что вам надо считать? чем вас значения по умолчанию не устраивают? +1 Цель непонятна, задача ещё больше... Рассказать где хранится нужная инфо? Или как получить цифирку, необходимую неизвестно для чего? Вот это: MatiushС EXTEND SIZE для таблиц без индексов я разобрался С чем Вы разобрались? Как его получить у существующей? Или как его задать, чтобы таблица одним extentom поместилась? Ещё раз: как звучит цель и задача? Как получить EXTEND SIZE для таблицы при известном значении rowsize и количестве записей уже пояснил Zaiets, здесь понятно. Задача. Есть выгруженные данные из таблиц в один файл в формате 1|5|77|7|4 8|8|87|5|87 .... 1,5 млн. Структура таблицы у меня есть, исвестен rowsize и кол. записей. Нужно создать одну таблицу на другом сервере и загрузить в нее эти данные для просчета задачи. Соответсвенно, необходимо получить Extend Size для этой таблицы. Я получаю Extend size и Next size след. образом rowsize * кол. записей * 1024 и Next size делаю на 10% меньше Extend size. Цель - правильно рассчитывать Extend size для любых таблиц, как с индексами, так и без них. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 16:52 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
ТанMatiush, а вы уверены, что вам надо считать? чем вас значения по умолчанию не устраивают? Это я приводил структуру уже готовой таблицы, с одним количетством записей. А количество может измениться. Тогда я получаю структуру данной таблицу, удаляю старую с данными, создаю новую и загружаю в нее новые данные. Вот почему мне необходимо посчитать EXTEND SIZE ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 16:57 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
vasilisMatiushЭто вещь хорошая, но есть желание автоматизировать весь процесс, путем написания небольшого скрипта. Мне нужен сам механизм рассчета Какой процесс нужно автоматизировать ? Расчета Extent size ? Зачем ? У вас таблицы заново создаются каждый раз ? Или все таки дополняются переносимыми данными ? Может и не нужно всего этого ? "Зачем лезть в окно, если дверь открыта ?" P.S. Почему информацию нужно вытаскивать по крохам ? Кому нужно решение проблемы (если она вообще существует?) ? Данные каждый раз новые. Простым delete from table на 5 млн записей очень долго. Количество данных каждый раз разное, данными таблицы не дополняются а записываются по новой. Поэтому легче drop table и создать по новой. Вариант с простым копированием схемы таблицы, из которой был произведен экспорт не подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 17:04 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Скрипт (последовательность действий) Получаем структуру таблицы, rowsize, количество загружаемых строк 1|54|4|.... Удаляем таблицу рассчитываем extend size и создаем таблицу загружаем в нее данные ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 17:09 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushСкрипт (последовательность действий) Получаем структуру таблицы, rowsize, количество загружаемых строк 1|54|4|.... Удаляем таблицу рассчитываем extend size и создаем таблицу загружаем в нее данные Так каких данных вам не хватает ? размер страницы в КБ знаете ? Кличество строк, которое может поместиться на страницу можете определить ? Размер таблицы в КБ (Мб, Гб) можете посчитать ? Осмелюсь снова повторить Тан, которая очень емко и кратко сформулировала вопрос, но мне кажется, вы его не поняли: Код: plaintext 1. 2.
- превышено число экстентов, которые добавлялись автоматом, - или у вас большая нехватка дискового пространства и вам крайне нужно очень точно рассчитывать размер таблиц, т.к. даже 2 лишних гига негде взять - время загрузки очень критично и вы поисследовали, что время выделения новых экстентов критично по времени (утрирую :) Вы вообще в курсе. что в Информикс прекрасно работает механизм добавления экстентов ? Причем он многоуровневый, с одной стороны каждый 16-й экстент удваивается, с другой - подряд расположенные экстенты объединяются (а в вашем случае с отдельным сервером, на котором только загрузка данных это так и будет), с третьей - если нужного размера не будет, то выделится максимально доступный по размеру и т.д. В крайнем случае можно при создании таблицы выделять сразу здоровые куски с запасом (но только для больших таблиц) и не морочить себе голову - если и не хватит начального экстента, то сервер добавит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 17:40 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushНужно создать одну таблицу на другом сервере и загрузить в нее эти данные для просчета задачи. Соответсвенно , необходимо получить Extend Size для этой таблицы... Цель - правильно рассчитывать Extend size для любых таблиц, как с индексами, так и без них. Matiush, не сочтите за сарказм... Расскажите (себе, если не убедите себя - можете нам :), почему "Extend Size" необходимо получить. Либо Вы не догадываетесь, что extent size можно не указывать, либо Вы уже так пробовали и, как сказал уже vasilis, упёрлись в какую-то проблему (тогда давайте её нам - нам это интересно :). С третьим вариантом, а-ля "мне это всё просто интересно " тут помогут только RTFM'ом - документация пестрит ключевыми словами и ссылки на неё vasilis уже давал. П.С.: И прекратите exten t обзывать exten d 'ом - очень мешает в документации поиск устраивать, а кроме нас и гугла - поправить Вас некому. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2009, 18:09 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Ко всему выше сказанному. Значения по умолчанию это хорошо. Спасибо за объяснения всем. Может быть эта информация окажется полезной для новичков. Взято здесь http://www.ibm.com/developerworks/data/library/techarticle/dm-0501fan/index.html Let's now assume this table has a single index on order_num and a composite index on stock_num and manu_code. This table will initially have 20,000 rows and will increase to 35,000 rows in a few months. Column Data type Length in bytes* Item_num smallint 2 Order_num integer 4 Stock_num smallint 2 Manu_code char(3) 3 Quantity smallint 2 Total_price money(8) 5 step description calculation (in bytes) 1 Determine each index length index on order_num = 4+9 = 13 index on stock_num and manu_code = 2+3+9 = 14 2 Determine total index length 13 + 14 = 27 3 Account for index overhead 27 * 1.25 = 33.75 4 Determine initial table size 20,000 rows 5 Total index space needed 20,000 * 33.75 = 675,000 6 Convert index space to kilobytes 67,5000/1,024 = 660 (Kbytes) 7 Determine page length in bytes subtract 28 for page overheads 2,048 minus 28 = 2,020 8 Determine row length 2 + 4 + 2 + 3 + 2 + 5 + 4 = 22 9 Determine how many whole rows per page 2020/22 = 91 10 Determine the number of data pages for the initial table 20,000/91 = 220 11 Total space needed for data 220 * 2,048 = 450,560 12 Convert data size to kilobytes 450,560/1,024 = 440 13 Determine size of the initial extent 440 + 660 = 1,100 14 Determine table growth 35,000 more rows 15 Estimate next extent size Index space needed = 35,000 * 33.75 = 1,181,250 Convert to Kbytes = 1,181,250/1024 = 1,154 Additional data pages needed = 35,000/91 = 385 Convert to bytes = 385 * 2,048 = 788,480 Convert to Kbytes = 788,480/1,024 = 770 Total space needed = 770 + 1,154 = 1,924 Здесь хочу спросить. Вот что мне показал Гугл по поводу размера данных, в зависимости от их типа: РАЗМЕРЫ ВЕЛИЧИН Числовые значения TINYINT 1 байт SMALLINT 2 байта MEDIUMINT 3 байта INT 4 байта INTEGER 4 байта BIGINT 8 байтов FLOAT(X) 4 если X <= 24 или 8 если 25 <= X <= 53 FLOAT 4 байта DOUBLE 8 байтов DOUBLE PRECISION 8 байтов REAL 8 байтов DECIMAL(M,D) M байтов (D+2, если M < D) NUMERIC(M,D) M байтов (D+2, если M < D) Типы ДАТА и ВРЕМЯ DATE 3 байта DATETIME 8 байт TIMESTAMP 4 байта TIME 3 байта YEAR 1 байт Строковые типы CHAR(M) M байт, 1 <= M <= 255 VARCHAR(M) L+1 байт, когда L <= M или 1 <= M <= 255 TINYBLOB, TINYTEXT L+1 байт, когда L < 2^8 BLOB, TEXT L+2 байт, когда L < 2^16 MEDIUMBLOB, MEDIUMTEXT L+3 байт, когда L < 2^24 LONGBLOB, LONGTEXT L+4 байт, когдя L < 2^32 ENUM('зн1','зн2',...) 1 или 2 байта, зависит от количества значений (65535 значений максимум) SET('зн1','зн2',...) 1, 2, 3, 4 или 8 байт, зависит от количества значений (64 значения максимум) Верить можно? Да, extenT size :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2009, 15:10 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
MatiushМожет быть эта информация окажется полезной для новичков. Может быть... только новички, обычно, не умеют пользоваться поиском на форуме и не читают FAQ-и и документацию, поэтому снова спросят то же самое :) MatiushВзято здесь http://www.ibm.com/developerworks/data/library/techarticle/dm-0501fan/index.html Для того, чтобы ссылка стала активной просто добавьте впереди // Matiush Здесь хочу спросить. Вот что мне показал Гугл по поводу размера данных Однажды мой сын высказался на тему знаний примерно следующим образом - "Зачем учиться и запоминать - все что мне нужно я найду в Гугле" (современная молодежь, выросшая в Инете :) Вот только он никак не соглашается, что: - в инете еще не всЁ есть и доступ к нему не всегда существует - нужно хорошо знать, что именно ты ищешь (и как это искать) - гугль не учит думать и не может думать за кого-то :) - вовсе не обязательно гуглить, если есть прямые и точные источники информации P.S. Я не против Гугля, только радуюсь, когда люди там ищут (некоторые и этого не умеют). Плохо, когда Гугль замещает все остальные способы получения информации. MatiushВерить можно? Смотря чему. Нельзя верить, если рассматривать в контексте Информикса и данного топика. Вы уверены, что все перечисленные типы данных относятся к Информикс (поддерживаются им) ? А ведь в документации, которую и искать то не надо, вся необходимая информация есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2009, 16:23 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Matiush, Про типы данных и их размеры вас Google информировал, похоже, на примере MySQL. В Informix кое-что явно отличается. DATE, например. Кое-что отсутствует в вашем списке, а чего-то из списка в Informix отродясь не бывало и не будет, вероятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2009, 19:19 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
vasilis, Насчет типов данных верить не стоит. Прочел из документации, сколько байт занимает определенный тип данных. По этому понял как получается rowsize (сумма байт всех полей). И еще вопрос для подстраховки. По умолчанию размер extenta начального задается в 16кб, следующего также 16кб. По выше приведенной формуле я попробовал считать extent size и сравнивать полученные значения с результатами рассчетов в server studio и результатами самодельной программы (как она считает, не ясно, спросить негде). Если я буду делать таблицы с размерами, полученными в результате моих вычислений, не случится ничего страшного? Если прочесть ответы выше, то informix сам исправит extent size и next size в случае необходимости? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2009, 16:17 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Matiushvasilis, Насчет типов данных верить не стоит. Прочел из документации, сколько байт занимает определенный тип данных. По этому понял как получается rowsize (сумма байт всех полей). Уже хорошо. Значит еще есть надежда :) MatiushЕсли прочесть ответы выше, то informix сам исправит extent size и next size в случае необходимости? А вы еще раз перечитайте внимательно все ответы выше и, особенно, мои ссылки на разделы документации, где вы и должны найти ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2009, 17:06 |
|
Как рассчитать extend size?
|
|||
---|---|---|---|
#18+
Matiush Если я буду делать таблицы с размерами, полученными в результате моих вычислений, не случится ничего страшного? Если прочесть ответы выше, то informix сам исправит extent size и next size в случае необходимости? Информикс эти числа, "закреплённые" за таблицей, не исправляет. Он просто руководствуется при выделении экстентов не всегда только этими цифрами. Если вы их ВААЩЕ не будете указывать - почти гарантировано, что у вас не возникнут проблемы. Если очень хочется указать - можно взять достаточно приблизительные цифры - даже если вы ошибётесь на порядок - ничего суперстрашного не случится (имхо: я же не знаю, за что у вас к стенке ставят :). Если вы их всё же укажете, возможны (но не обязательны!) три проблемы: 1. Вы можете их указать не в соответствии с требованиями информикса - слишком маленькими или недостаточно круглыми - получите ошибку, таблица не создатся. 2. Вы можете их указать слишком большими - и сервер не найдёт достаточно места для выделения такого экстента - о чём опять-таки вам сообщит. 3. Вы можете их указать слишком большими и сервер таки найдёт место - но экстент будет стоять полупустым, возможно отнимая жизнённое пространство у более "важных" табличек... Matiush, таки RTFM: Первое, на что нужно было посмотреть при возникновении вопросов по Extents: Administering -> System Administration -> Performance Guide -> Table Performance Considerations -> Managing Extents По мере возникновения вопросов к понятиям, "проваливаться" на чуть более простые понятия: Administering ->System Administration -> Administrator's Reference -> Configuring and Monitoring Dynamic Server -> Disk Structures and Storage ->Dbspace Structure and Storage ->Structure and Allocation of an Extent -> Extent Structure Administering -> System Administration -> Administrator's Guide -> Disk, Memory, and Process Management -> Data Storage -> Extents Administering -> System Administration -> Performance Guide ->Table Performance Considerations -> Estimating Table Size П.С.: Ссылки на доку по 11.50 - это не страшно :). В конце-концов, по доке на 9-ку мне просто лениво это делать... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2009, 17:36 |
|
|
start [/forum/topic.php?desktop=1&fid=44&tid=1607674]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 360ms |
total: | 528ms |
0 / 0 |