Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Размер таблицы. Как правильно считать?  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
Создают таблицу с одним атрибутом into
На 1 страницу умещается 592 записи?
Почему так происходит, если страница 8060б, а тип инт 4 байта
22 окт 16, 14:26    [19812158]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Как создаете?
Как заполняете?
Как проверяете?
22 окт 16, 14:30    [19812161]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
Гавриленко Сергей Алексеевич,
1 create table t(i int not null)
2 insert into t(i) values(1)
go 592
3 select index_type_desc, page_count,record_count,avg_page_space_used_in_percent
from sys.dm_db_index_physical_stats(DB_ID(N'sample'), OBJECT_ID(N't'),null,null,'DETAILED')

page_count = 1

sp_spaceused 't'
data 8 кб


Если еще раз выполнить insert into t(i) values(1), то page_count = 2
data = 16 кб
22 окт 16, 17:23    [19812357]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
RasimS
Почему так происходит, если страница 8060б, а тип инт 4 байта
Потому что размер записи не 4 байта, а больше - http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-record/
22 окт 16, 19:08    [19812471]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
RasimS
Почему так происходит, если страница 8060б, а тип инт 4 байта
Вот в доке есть алгоритм вычисление места для кучи: https://msdn.microsoft.com/ru-ru/library/ms189124.aspx
Размеры инедксов (в т.ч. таблицы с кластерным уникальным индексом) можно найти рядом: https://msdn.microsoft.com/ru-ru/library/ms175991.aspx
22 окт 16, 23:54    [19812787]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
zdvsf
Guest
SQL Server 2005 : о структуре записей
23 окт 16, 19:03    [19813530]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
alexeyvg
RasimS
Почему так происходит, если страница 8060б, а тип инт 4 байта
Вот в доке есть алгоритм вычисление места для кучи: https://msdn.microsoft.com/ru-ru/library/ms189124.aspx
Размеры инедксов (в т.ч. таблицы с кластерным уникальным индексом) можно найти рядом: https://msdn.microsoft.com/ru-ru/library/ms175991.aspx

invm
RasimS
Почему так происходит, если страница 8060б, а тип инт 4 байта
Потому что размер записи не 4 байта, а больше - http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-record/

Спасибо. Разобрался с этим.
Возник попутно еще вопрос. Есть большая таблица куча на 10 млн. строк.
Размер данных exec sp_spaceused показывает 2 641 848 кб
Изменяю только тип данных 2 столбцов.
datetime меняю на datetime2(2)
nvarchar(20) меняю на varchar(15)
Ограничений и другие столбцы остаются как были.

alter table t alter column dt datetime2(2) not null
go
alter table t alter column [Log_IP] varchar(15) not null
go

Замеряю размер 2 841 520 кб

Вопрос. Почему размер вырос? Типы имеют меньшую размерность. Неиспользуемого места практически нет в обоих вариантах. Таблица куча.
24 окт 16, 14:47    [19815958]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
o-o
Guest
RasimS
nvarchar(20) меняю на varchar(15)

теперь у вас в таблице лежит и прежний nvarchar(20),
помеченный удаленным,
и varchar(15),
полученный копированием с конвертированием значений из столбца nvarchar(20).

хотите убрать удаленный столбец, делайте alter table..rebuild
24 окт 16, 14:53    [19816015]     Ответить | Цитировать Сообщить модератору
 Re: Размер таблицы. Как правильно считать?  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
o-o
RasimS
nvarchar(20) меняю на varchar(15)

теперь у вас в таблице лежит и прежний nvarchar(20),
помеченный удаленным,
и varchar(15),
полученный копированием с конвертированием значений из столбца nvarchar(20).

хотите убрать удаленный столбец, делайте alter table..rebuild

Отлично. Спасибо большое
24 окт 16, 15:12    [19816167]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить