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

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

Код: 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
Как по systables расчитать размер таблицы
    #36154324
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Место под таблицу выделяется кусками, которые называется экстентами.
Сумма размеров экстентов и даст реальный размер, который имеет таблица.
ЗЫ. Информикс не умеет освобождать экстенты. Т.е. если из таблицы удалить все данные, то занимаемое данными место нельзя использовать для другой таблицы.
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36154349
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DBA может менять размер экстента для таблицы. Поэтому значений extent size и next size недостаточно для вычисления размера таблицы.
Например число транзакций у Вас увеличилось в 100 раз, и число экстентов в таблице ctransactions стало безудержно расти. А т.к максимальное число экстентов не бесконечно, то размер экстента нужно увеличить.
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36154397
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поствим вопрос по другому. Есть команда 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
Как по systables расчитать размер таблицы
    #36154425
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maximum row size 586 - это не показатель.
В строке могут быть NULL значения или varchar.
Строка становится короче.
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36154446
klepa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще 7 строк длиной 586 байт не влезут на страницу размером 4096 байт. Влезет только 6. Свободными останутся 580 байт.
В общем пора читать "IBM Informix Dynamic Server Administrator’s Guide"
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36154577
Sergey Babitch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как по systables расчитать размер таблицы
    #36154795
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров АндрейК примеру просто умножив размер записи на коичество мы не увидим реальный размер аллокированый в базе (размер extension-а). Как его почитать? npused*pagesize не дает правильного размера... Отдельно onckeck -pT запрошу.
npused*pagesize по systables даст правильный размер только после обновления статистики, и если таблица не фрагментирована
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36155081
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для топикстартера и некоторых отвечающих будет полезно почитать топик 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
Как по systables расчитать размер таблицы
    #36155114
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Babitch
И всё свободное место в занятых экстентах будет возвращено системе для использования другими (или этой же самой) таблицами.
В принципе правильно, но есть несколько замечаний (так как картинка не такая простая :)
1) для "этой же самой таблицы" пространство в экстентах с удаленными строками доступно для вставок все время и без всяких манипуляций;
2) Если у таблицы при создании установлен большой начальный экстент (и дополнительные экстенты не выделялись, для простоты примера), то после удаления большого массива строк и проведения манипуляций по "сжатию" (alter fragment on...) свободное пространство из экстента никуда не денется и другим таблицам будет не доступно. Сначала (перед alter fragment) нужно привести в нужному значению (уменьшить) размеры начального и дополнительного экстентов.
3) операция alter fragment транзакционная и для больших таблиц может не хватить объема логических журналов (см. понятие "длинной транзакции"). Эта проблема тоже не раз обсуждалась.
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36155139
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров АндрейКак имея эти данные расчитаь размер таблицы который она отъедает от тейблспейса?
В "тейблспейсе" не может быть нескольких таблиц, точнее таблица может занимать один или несколько tablespaces.
...
Рейтинг: 0 / 0
Как по systables расчитать размер таблицы
    #36155887
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasilis
1) для "этой же самой таблицы" пространство в экстентах с удаленными строками доступно для вставок все время и без всяких манипуляций;
Для этого нужно еще одно условие - статистика по таблице должна быть обновлена хотя бы раз. Если этого не было - свободное пространство повторно не используется - по крайней мере в 9-й версии
vasilis2) Если у таблицы при создании установлен большой начальный экстент (и дополнительные экстенты не выделялись, для простоты примера), то после удаления большого массива строк и проведения манипуляций по "сжатию" (alter fragment on...) свободное пространство из экстента никуда не денется и другим таблицам будет не доступно. Сначала (перед alter fragment) нужно привести в нужному значению (уменьшить) размеры начального и дополнительного экстентов.

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

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

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

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

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

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

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


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

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

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

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


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