Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как по systables расчитать размер таблицы / 23 сообщений из 23, страница 1 из 1
20.08.2009, 11:29
    #36154151
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
К примеру просто умножив размер записи на коичество мы не увидим реальный размер аллокированый в базе (размер extension-а). Как его почитать? npused*pagesize не дает правильного размера... Отдельно onckeck -pT запрошу.
...
Рейтинг: 0 / 0
20.08.2009, 11:58
    #36154265
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Если я правильно понял вопрос, то нужно узнать сколько места занимает таблица в БД.

Код: plaintext
1.
2.
3.
database sysmaster;
select sum(size) from sysextents
where tabname = "dsreestr"
...
Рейтинг: 0 / 0
20.08.2009, 12:03
    #36154272
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Нету такой таблички в IBM Informix Dynamic Server Version 10.0.TC3
...
Рейтинг: 0 / 0
20.08.2009, 12:03
    #36154275
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
А сорри все понял...
...
Рейтинг: 0 / 0
20.08.2009, 12:11
    #36154295
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
По данным это налогично так что все равно не понятно как расчтать размер. Что на что умножить то?

Код: plaintext
1.
2.
3.
database sysmaster
select size from sysextents where dbsname = 'ubj' and tabname = 'applog'
database ubj
select nextsize from systables where tabname = 'applog'
...
Рейтинг: 0 / 0
20.08.2009, 12:21
    #36154324
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Место под таблицу выделяется кусками, которые называется экстентами.
Сумма размеров экстентов и даст реальный размер, который имеет таблица.
ЗЫ. Информикс не умеет освобождать экстенты. Т.е. если из таблицы удалить все данные, то занимаемое данными место нельзя использовать для другой таблицы.
...
Рейтинг: 0 / 0
20.08.2009, 12:31
    #36154349
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
DBA может менять размер экстента для таблицы. Поэтому значений extent size и next size недостаточно для вычисления размера таблицы.
Например число транзакций у Вас увеличилось в 100 раз, и число экстентов в таблице ctransactions стало безудержно расти. А т.к максимальное число экстентов не бесконечно, то размер экстента нужно увеличить.
...
Рейтинг: 0 / 0
20.08.2009, 12:46
    #36154397
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Поствим вопрос по другому. Есть команда oncheck -pT для таблицы. К примеру она выдает вот такое значение:

oncheck Maximum row size 586
Number of special columns 2
Number of keys 0
Number of extents 1
Current serial value 1
Pagesize (k) 4
First extent size 16362
Next extent size 1636
Number of pages allocated 16362
Number of pages used 4497
Number of data pages 4496
Number of rows 130835
Partition partnum 6291627
Partition lockid 6291627

Как имея эти данные расчитаь размер таблицы который она отъедает от тейблспейса?
Number of pages allocated 16362 * Page Size (from systables 4096) = 67 018 752

Но расчитав минимальный размер исходя из размера записи получим:
Maximum row size 586 * Number of rows 130835 = 76 669 310

Что за лабуда и что я не так посчитал?
...
Рейтинг: 0 / 0
20.08.2009, 12:53
    #36154425
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Maximum row size 586 - это не показатель.
В строке могут быть NULL значения или varchar.
Строка становится короче.
...
Рейтинг: 0 / 0
20.08.2009, 12:59
    #36154446
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
А еще 7 строк длиной 586 байт не влезут на страницу размером 4096 байт. Влезет только 6. Свободными останутся 580 байт.
В общем пора читать "IBM Informix Dynamic Server Administrator’s Guide"
...
Рейтинг: 0 / 0
20.08.2009, 13:37
    #36154577
Sergey Babitch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
klepaЗЫ. Информикс не умеет освобождать экстенты. Т.е. если из таблицы удалить все данные, то занимаемое данными место нельзя использовать для другой таблицы.

ALTER FRAGMENT ON TABLE table_name INIT IN dbs_name;
ALTER FRAGMENT ON INDEX index_name INIT IN dbs_name;

При этом dbs_name может быть тот же самый, в котором таблица находится в данный момент. Лишь бы места в нём хватило... Если места мало - можно таблицу мувнуть в другой dbs, а потм вернуть назад. И всё свободное место в занятых экстентах будет возвращено системе для использования другими (или этой же самой) таблицами.
...
Рейтинг: 0 / 0
20.08.2009, 14:51
    #36154795
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Петров АндрейК примеру просто умножив размер записи на коичество мы не увидим реальный размер аллокированый в базе (размер extension-а). Как его почитать? npused*pagesize не дает правильного размера... Отдельно onckeck -pT запрошу.
npused*pagesize по systables даст правильный размер только после обновления статистики, и если таблица не фрагментирована
...
Рейтинг: 0 / 0
20.08.2009, 16:08
    #36155081
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Для топикстартера и некоторых отвечающих будет полезно почитать топик 4-х летней давности (к тому же эта тема поднималась множество раз - нужно всего лишь воспользоваться поиском).
http://sql.ru/forum/actualthread.aspx?tid=203290&hl=%f0%e0%e7%ec%e5%f0+%f2%e0%e1%eb%e8%f6%fb
...
Рейтинг: 0 / 0
20.08.2009, 16:20
    #36155114
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Sergey Babitch
И всё свободное место в занятых экстентах будет возвращено системе для использования другими (или этой же самой) таблицами.
В принципе правильно, но есть несколько замечаний (так как картинка не такая простая :)
1) для "этой же самой таблицы" пространство в экстентах с удаленными строками доступно для вставок все время и без всяких манипуляций;
2) Если у таблицы при создании установлен большой начальный экстент (и дополнительные экстенты не выделялись, для простоты примера), то после удаления большого массива строк и проведения манипуляций по "сжатию" (alter fragment on...) свободное пространство из экстента никуда не денется и другим таблицам будет не доступно. Сначала (перед alter fragment) нужно привести в нужному значению (уменьшить) размеры начального и дополнительного экстентов.
3) операция alter fragment транзакционная и для больших таблиц может не хватить объема логических журналов (см. понятие "длинной транзакции"). Эта проблема тоже не раз обсуждалась.
...
Рейтинг: 0 / 0
20.08.2009, 16:26
    #36155139
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Петров АндрейКак имея эти данные расчитаь размер таблицы который она отъедает от тейблспейса?
В "тейблспейсе" не может быть нескольких таблиц, точнее таблица может занимать один или несколько tablespaces.
...
Рейтинг: 0 / 0
21.08.2009, 07:40
    #36155887
Leonid Belov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
vasilis
1) для "этой же самой таблицы" пространство в экстентах с удаленными строками доступно для вставок все время и без всяких манипуляций;
Для этого нужно еще одно условие - статистика по таблице должна быть обновлена хотя бы раз. Если этого не было - свободное пространство повторно не используется - по крайней мере в 9-й версии
vasilis2) Если у таблицы при создании установлен большой начальный экстент (и дополнительные экстенты не выделялись, для простоты примера), то после удаления большого массива строк и проведения манипуляций по "сжатию" (alter fragment on...) свободное пространство из экстента никуда не денется и другим таблицам будет не доступно. Сначала (перед alter fragment) нужно привести в нужному значению (уменьшить) размеры начального и дополнительного экстентов.

С дополнительным все просто. А как изменить размер начального экстента без пересоздания таблицы?
...
Рейтинг: 0 / 0
21.08.2009, 13:30
    #36156768
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
Leonid Belovvasilis
1) для "этой же самой таблицы" пространство в экстентах с удаленными строками доступно для вставок все время и без всяких манипуляций;
Для этого нужно еще одно условие - статистика по таблице должна быть обновлена хотя бы раз. Если этого не было - свободное пространство повторно не используется - по крайней мере в 9-й версии
Мне кажется, что вы ошибаетесь. (Хотя рубаху на груди рвать не буду и проверить сейчас не могу :)
Если не обновить статистику, то при выполнении запроса оптимизатор просто не будет знать, что большинства строк уже нет, и может принять неверное решение по сканированию всех , даже фактически пустых, страниц таблицы.
А вот при вставке новых строк эта статистическая информация, насколько я помню, не нужна и свободные слоты на странице будут использоваться в любом случае (или только для модифицируемых строк ?).
Правда, возникает закономерный вопрос - неужели при вставке будут проверяться заголовки всех страниц таблицы в буфере для поиска свободных слотов или будет просто браться свободная страница экстента из битмаповой страницы ?

Leonid Belovvasilis2) Если у таблицы при создании установлен большой начальный экстент (и дополнительные экстенты не выделялись, для простоты примера), то после удаления большого массива строк и проведения манипуляций по "сжатию" (alter fragment on...) свободное пространство из экстента никуда не денется и другим таблицам будет не доступно. Сначала (перед alter fragment) нужно привести в нужному значению (уменьшить) размеры начального и дополнительного экстентов.

С дополнительным все просто. А как изменить размер начального экстента без пересоздания таблицы?
Никак :)
...
Рейтинг: 0 / 0
21.08.2009, 15:14
    #36157127
zaiets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
11.50
ALTER TABLE customer MODIFY EXTENT SIZE 32;

но смысла особого не вижу, может кто прояснит?
Разве что для создания индексов.
...
Рейтинг: 0 / 0
21.08.2009, 23:00
    #36157866
Leonid Belov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
zaiets11.50
ALTER TABLE customer MODIFY EXTENT SIZE 32;

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

Неужели наконец сделали? Попробую...

Ну а смысл... В условиях высокой активности программистов - дикая фрагментация первого чанка dbspace по умолчанию. Почти все таблицы из 5000 осели там...
...
Рейтинг: 0 / 0
21.08.2009, 23:09
    #36157875
Leonid Belov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
vasilis
Мне кажется, что вы ошибаетесь. (Хотя рубаху на груди рвать не буду и проверить сейчас не могу :)
Если не обновить статистику, то при выполнении запроса оптимизатор просто не будет знать, что большинства строк уже нет, и может принять неверное решение по сканированию всех , даже фактически пустых, страниц таблицы.
А вот при вставке новых строк эта статистическая информация, насколько я помню, не нужна и свободные слоты на странице будут использоваться в любом случае (или только для модифицируемых строк ?).
Правда, возникает закономерный вопрос - неужели при вставке будут проверяться заголовки всех страниц таблицы в буфере для поиска свободных слотов или будет просто браться свободная страница экстента из битмаповой страницы ?


Сегодня проверил. В 9.40FC6 поведение вроде бы адекватное. В предыдущих версиях у меня с этим были большие проблемы. Пока статистику не обновишь - таблица растет как на дрожжах.
...
Рейтинг: 0 / 0
17.11.2009, 20:48
    #36315850
zaiets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
zaiets11.50
ALTER TABLE customer MODIFY EXTENT SIZE 32;

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

Нашел некий смысл.
Компрессия рулит.
Кстати, если для таблицы было выделено больше места чем нужно, с помощью
"fragment repack shrink"
можно освободить неиспользованное место изменив начальный размер экстента,
компрессия при этом происходить не будет.
жаль на индексы нельзя так натравить.
...
Рейтинг: 0 / 0
18.11.2009, 17:00
    #36317903
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
zaietsКстати, если для таблицы было выделено больше места чем нужно, с помощью
"fragment repack shrink"
можно освободить неиспользованное место изменив начальный размер экстента,
компрессия при этом происходить не будет.
Это все с версии 11.5 ?
Да, я уже сильно отстал "от жизни" :(
...
Рейтинг: 0 / 0
20.11.2009, 12:23
    #36321979
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по systables расчитать размер таблицы
klepaМесто под таблицу выделяется кусками, которые называется экстентами.
Сумма размеров экстентов и даст реальный размер, который имеет таблица.
ЗЫ. Информикс не умеет освобождать экстенты. Т.е. если из таблицы удалить все данные, то занимаемое данными место нельзя использовать для другой таблицы.

Начиная с 10 версии информикса можно использовать оператор truncate который удалит все данные из таблицы и пустые страницы на диске.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как по systables расчитать размер таблицы / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]