Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типов данных в большой таблице. Подводные камни / 5 сообщений из 5, страница 1 из 1
05.04.2018, 18:44
    #39626327
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типов данных в большой таблице. Подводные камни
Привет.

Хотелось бы получить подтверждение своим теоретическим предположениям у местных гуру.
Дело касается в первую очередь времени выполнения.

Допустим у нас есть некая таблица размером скажем с терабайт и строк эдак 15 млрд.
EventDate datetime2(2),
SomeID int,
SomeValue double,
SomeFK int,
LongStrValue nvarchar(max),
ShortStrValue nvarchar(20)

Первые два поля = Primary Key.
Какие соображения надо учитывать меняя тип данных у следущих полей?
1. EventDate datetime2(2) -> datetime2(7)
Тут никаких constraint не проверяется, надо токо метаданные обновить. Но это Primary Key. И поле с фиксированной длиной. То есть надо все данные в дата файле передвигать. Так? То есть по сути самая тяжеловесная операция.
Доп. вопрос: надо ли после этого индекс ребилдить или оно само в процессе дефрагментируется? Что-то мне подсказывает, то само...

2. LongStrValue nvarchar(max) -> nvarchar(200)
Это тип данных с нефиксированной длиной. Метаданные обновить, но и еще проверить, влезают ли все значения в 200. Это может занять время, так? Играет ли тут какую-нить роли статистика?

3. ShortStrValue nvarchar(20) -> nvarchar(50)
Вот тут я вообще никакой доп. задержки не ожидаю. Я прав?

4. SomeFK int ->bigint
Можно отключить constraint временно и поменять тип данных, сэкономив время на проверке целостности.
Но это поле с фикс. длиной. Будет ли операция столь же тяжеловесной как и в (1) ? Приведет ли к большей фрагментации?
...
Рейтинг: 0 / 0
05.04.2018, 18:48
    #39626330
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типов данных в большой таблице. Подводные камни
Glebanski,

при увеличении размерности обычно не чекается при уменьшении - да. Строки, конечно, просмотром только можно проверить.
...
Рейтинг: 0 / 0
05.04.2018, 19:54
    #39626357
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типов данных в большой таблице. Подводные камни
Glebanski,

Изучайте
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
use tempdb;
go

create function dbo.fnColumnsInfo
(
  @name sysname
)
returns table
as
return (
 select
  c.name as column_name,
  t.name,
  pc.max_length,
  pc.is_dropped,
  pc.leaf_offset
 from
  sys.system_internals_partition_columns pc join
  sys.partitions p on p.partition_id = pc.partition_id left join
  sys.columns c on column_id = pc.partition_column_id and c.object_id = p.object_id join
  sys.types t on t.system_type_id = pc.system_type_id and t.user_type_id = t.system_type_id
 where
  p.object_id = object_id(@name)
);
go

create table dbo.t
(
 EventDate datetime2(2),
 SomeID int,
 SomeValue float,
 SomeFK int,
 LongStrValue nvarchar(max),
 ShortStrValue nvarchar(20)
);

select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column EventDate datetime2(7);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column LongStrValue nvarchar(200);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column ShortStrValue nvarchar(50);
select * from dbo.fnColumnsInfo(N'dbo.t');
go

alter table dbo.t alter column SomeFK bigint;
select * from dbo.fnColumnsInfo(N'dbo.t');
go

drop table dbo.t;
drop function dbo.fnColumnsInfo;
go

...
Рейтинг: 0 / 0
05.04.2018, 20:33
    #39626380
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типов данных в большой таблице. Подводные камни
invm,
Благодарю!
...
Рейтинг: 0 / 0
11.04.2018, 18:55
    #39628686
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение типов данных в большой таблице. Подводные камни
Вот отличная статья на тему https://social.technet.microsoft.com/wiki/contents/articles/29228.sql-server-internals-of-a-change-of-the-size-of-a-fixed-data-type.aspx
Хорошо, что в ней объяснили, а то у меня глаза на лоб когда измененные поля в конец строки переместились
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Изменение типов данных в большой таблице. Подводные камни / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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