powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / expected row size
5 сообщений из 5, страница 1 из 1
expected row size
    #37218344
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 15

Есть таблица с exp_row_size = 200. Я втавляю строку размером 100 байт, ASE под эту строку выделит 200 байт или 300(100 + 200) байт? Т.е exp_row_size - это именно размер строки или размер резарва для каждой строки.

второй вопрос!
Параметр конфигурации default exp_row_size percent = 5%. Для всех явно не заданных таблиц, ASE тупо оставит 5% свободного пространства не как не деля эти 5% по строкам на странице?
...
Рейтинг: 0 / 0
expected row size
    #37219420
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 15.04.2011 14:37, cherrex_Den wrote:

> Есть таблица с exp_row_size = 200. Я втавляю строку размером 100 байт, ASE под
> эту строку выделит 200 байт или 300(100 + 200) байт?

100 байт

Т.е exp_row_size - это
> именно размер строки или размер резарва для каждой строки.

sybooksChapter 14: Setting Space Management Properties
Reducing row forwarding

Specifying an expected row size for a data-only-locked table is useful when an
application allows rows that contain null values or short variable-length
character fields to be inserted, and these rows grow in length with subsequent
updates. The major purpose of setting an expected row size is to reduce row
forwarding.
....



> второй вопрос!
> Параметр конфигурации default exp_row_size percent = 5%. Для всех явно не
> заданных таблиц, ASE тупо оставит 5% свободного пространства не как не деля эти
> 5% по строкам на странице?

sybooksDefault value

If you do not specify an expected row size or a value of 0 when you create a
data-only-locked table with variable-length columns, Adaptive Server uses the
amount of space specified by the configuration parameter default exp_row_size
percent for any table that has variable-length columns.

See “Setting a default expected row size server-wide” for information on how
this parameter affects space on data pages. Use sp_help to see the defined
length of the columns in the table.


Для КАЖДОЙ СТРОКИ (вставляемой) применяется exp_row_size.
Но учтите, что задаётся он ОДИН РАЗ при создании таблицы. Если вы его
задаёте явно, используется ваше значение, если не задаёте, оно расчитывается как
процент от размера страницы и делится на все записи. Как -- не очень ясно,
но по-видимому (далее -- моё предположение) вычисляется по минимальной длине
кол-во записей и доп. место, вычисленное как размер страницы на процент
`default exp_row_size percent', делится на все записи и резервируется для
каждой записи. Это чтобы потом строки не двигать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
expected row size
    #37219491
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! С этим вопросом все понятно!

Может кто-то объяснит такой полтергейств?

Создаем таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table test_tbl_123 (
	q                               numeric( 12 , 0 )                    not null  , -- 6 байт
	w                               datetime                             null  ,   -- 8 байт
	e                               datetime                             null       -- 8 байт
)
lock datarows
with dml_logging = full
 on 'default'

Максимальный размер строки 22 байта, минимальный 6 байт.

Смотрим в sysindexes, minlen = 12, а maxlen = 34. Откуда ASE взяд такие значения???
Смотрим в systabstats, datarowsize = 23. Почему 23???

добовляем 100 строк

Код: plaintext
1.
2.
insert into test_tbl_123 (q)
values ( 1 )
go  100  
при этом заполняем только одну колонку q, w и e null-ы
Обновляем статистику(systabstats) сами ,чтоб не ждать пока ее обновит ASE

Код: plaintext
update all statistics test_tbl_123

Смотрим в sysindexes, minlen = 12, а maxlen = 34. Не поменялось, оно и понятно.
Смотрим в systabstats, datarowsize = 12. С чего оно вдруг стало 12, если заполнено только поле q(numeric (12,0))? должно быть 6.

Далее проставляем два оставшихся поля w и e:

Код: plaintext
1.
2.
update  test_tbl_123
set w = '20110416', e = '20110416'
where w is null or e is null 

и опять
Код: plaintext
update all statistics test_tbl_123

Смотрим в sysindexes, minlen = 12, а maxlen = 34. Не поменялось, оно и понятно.
Смотрим в systabstats, datarowsize = 34. С чего оно вдруг стало 34???? Должно же быть 22!!!
...
Рейтинг: 0 / 0
expected row size
    #37219505
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И самый главный вопрос:

Берем туже таблицу, что и в прошлом посте.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table test_tbl_123 (
	q                               numeric( 12 , 0 )                    not null  ,
	w                               datetime                             null  ,
	e                               datetime                             null   
)
lock datarows
with dml_logging = full
 on 'default'

задаем exp_row_size на максимум:

Код: plaintext
sp_chgattribute test_tbl_123, "exp_row_size",  22 

далее добавляем 700 строк:

Код: plaintext
1.
2.
insert into test_tbl_123 (q)
values ( 1 )
go  700 

потом расширяем их:

Код: plaintext
1.
2.
update  test_tbl_123
set w = '20110416', e = '20110416'
where w is null or e is null 

Обновляем статистику:
Код: plaintext
update all statistics test_tbl_123

смотрим на systabstats или на вывод optdiag и видим forwrowcnt = 57

Откуда взялись forwarded rows?????? exp_row_size задан по максимому!!! больше чем 22, ASE сделать не дает!!!
...
Рейтинг: 0 / 0
expected row size
    #37220730
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы с размером строки разобрался!

Calculate the data row size

Действительно моя строка в таблице занимает 34 байта.
В принципе это и объясняет появление forwarded rows.
Но тогда почему ASE не дает установить exp_row_size = 34?
Хотя в документации это не запрещается:

документацияYou can change the exp_row_size only if the modified table schema contains variable length columns, and only to within the range specified by the maxlen and minlen values in sysindexes for the modified table schema.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / expected row size
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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