Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему файл БД вырос после alter column / 25 сообщений из 53, страница 1 из 3
04.01.2021, 22:38
    #40033486
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
почему так получилось:

- почистил немного данные в БД, а в одной из таблиц еще решил уменьшить длину поля ReqJson (было varchar 8000)
Выполнил
Код: sql
1.
alter table [dbo].[Monitoring_Arch] alter column [ReqJson ] varchar(6000)



До начала операции на диске было свободно более 65Гб.
я наблюдал за ростом файла БД и лога пока длилась операция
Операция прошла успешно, лог урезался, а вот файл БД на диске так и остался большим (свободное место сейчас чуть более 47Гб).
Почему так? И что можно сделать, чтобы освободить место на диске?
...
Рейтинг: 0 / 0
04.01.2021, 22:50
    #40033493
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser,

Шринк?
Лучше смотрите не место на диске, а свойства базы данных.
...
Рейтинг: 0 / 0
04.01.2021, 23:04
    #40033499
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
godsql
RegisteredUser,

Шринк?
Лучше смотрите не место на диске, а свойства базы данных.


лог урезался как раз после DBCC SHRINKDATABASE ([JMProd]);
а вот mdf остался большим
...
Рейтинг: 0 / 0
04.01.2021, 23:08
    #40033502
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser,

А почему должна была уменьшиться база? varchar указывает на максимально допустимый размер, который может быть выделен при сохранении строки. Очевидно, Вы путаете с char типом.
...
Рейтинг: 0 / 0
04.01.2021, 23:10
    #40033504
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
проблема локализовна:
- созданы доп. файлы tempdb

что с ними делать?
...
Рейтинг: 0 / 0
04.01.2021, 23:30
    #40033512
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser,

Это правильно, количество файлов должно зависеть от количества ядер.
...
Рейтинг: 0 / 0
04.01.2021, 23:38
    #40033514
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Владислав Колосов,

тогда вопрос остается открытым - данных стало меньше, а размер БД вырос гиг на 15 после alter column
...
Рейтинг: 0 / 0
05.01.2021, 08:36
    #40033543
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser
Владислав Колосов,

тогда вопрос остается открытым - данных стало меньше, а размер БД вырос гиг на 15 после alter column


Ты, наверное, думаешь, что трансформация таблицы производится сферическим святым духом в вакууме?
Наивняк.
Был создан новый столбец в таблице, скопированы туда данные, а затем старый столбец удален.
Вот тебе, бабушка, и 15 Гб.
А тот чего бы сервер жужжал диском столько долго...
...
Рейтинг: 0 / 0
05.01.2021, 10:11
    #40033552
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser
файл БД на диске так и остался большим

RegisteredUser
размер БД вырос гиг на 15 после alter column
Файл БД остался прежним, или вырос?
aleks222
Был создан новый столбец в таблице, скопированы туда данные, а затем старый столбец удален.
Да, это при добавлении столбца null командой alter?
Там же только метаданные меняются.
...
Рейтинг: 0 / 0
05.01.2021, 10:17
    #40033554
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
alexeyvg

Там же только метаданные меняются.

За чем же тогда "наблюдал" страдалец?
Создание пустого столбца "не понаблюдаешь".
...
Рейтинг: 0 / 0
05.01.2021, 11:05
    #40033563
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
RegisteredUser
Почему так? И что можно сделать, чтобы освободить место на диске?
Потому что создается новый столбец и в него копируются данные из старого. Старый будет физически удален только перестроением таблицы.
Код: 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.
59.
60.
61.
62.
63.
64.
use tempdb;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create table dbo.t (id int identity primary key, s varchar(8000));
insert into dbo.t
 (s)
 select top (10000)
  replicate('a', 5000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b
go

select
 c.name, pc.max_length
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
where
 p.object_id = object_id('dbo.t', 'U')
order by
 pc.partition_column_id;

exec sp_spaceused 'dbo.t', 'true';
go

alter table dbo.t alter column s varchar(6000);
go

select
 c.name, pc.max_length
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
where
 p.object_id = object_id('dbo.t', 'U')
order by
 pc.partition_column_id;

exec sp_spaceused 'dbo.t', 'true';
go

alter table dbo.t rebuild;
go

select
 c.name, pc.max_length
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
where
 p.object_id = object_id('dbo.t', 'U')
order by
 pc.partition_column_id;

exec sp_spaceused 'dbo.t', 'true';
go

drop table dbo.t;
go

...
Рейтинг: 0 / 0
05.01.2021, 12:16
    #40033578
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
А что делать - так страдальцу и не сказали!

Код: sql
1.
alter table [dbo].[Monitoring_Arch] Rebuild


спасет отца русской демократии!

ЗЫ: Размер поменял зря. Ни пользы от этого, ни удовольствия.
Размер varchar должен быть примерно в 2 раза больше средней длины хранящихся в поле данных, при этом, разумеется, не меньше максимально возможного размера данных, которые там предстоит хранить.
...
Рейтинг: 0 / 0
05.01.2021, 12:42
    #40033585
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
uaggster,

так как подобные поля очень редко нуждаются в индексации, то я предпочитаю сразу делать их [n]varchar(max). Как плюс, места в кортежах они почти не занимают (24 байта на каждое) и обслуживание таблиц ускоряется. Как минус, нужно помнить о лимите в 8060 байт для сортировки.
...
Рейтинг: 0 / 0
05.01.2021, 13:56
    #40033600
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
ptr128
uaggster,

так как подобные поля очень редко нуждаются в индексации, то я предпочитаю сразу делать их [n]varchar(max). Как плюс, места в кортежах они почти не занимают (24 байта на каждое) и обслуживание таблиц ускоряется. Как минус, нужно помнить о лимите в 8060 байт для сортировки.

лажа это, прости господи.
если значение поля влазит в инроу, то там и будет размещено.
так что если значения по длине не превышают 6000 символов,
как ни объявляй, varchar(6000) или varchar(max), покуда длина строки не превысит 8060,
размещение будет одинаковым.
и уж ни о каком ускорении речи не идет вовсе.
...
Рейтинг: 0 / 0
05.01.2021, 13:57
    #40033601
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
ptr128
так как подобные поля очень редко нуждаются в индексации, то я предпочитаю сразу делать их [n]varchar(max). Как плюс, места в кортежах они почти не занимают (24 байта на каждое) и обслуживание таблиц ускоряется.
1. По умолчанию типы *(max) все равно хранятся in-row, если это возможно.
2.
Код: 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.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database DBTest001;
alter database DBTest001 set recovery full;
backup database DBTest001 to disk = 'nul:';
go

use DBTest001;
go

create table dbo.t1 (id int identity primary key, s varchar(1000));
create table dbo.t2 (id int identity primary key, s varchar(max));
create table dbo.t3 (id int identity primary key, s varchar(max));

exec sp_tableoption 'dbo.t3', 'large value types out of row', 1;
go

set statistics time on;
go

insert into dbo.t1
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.t2
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.t3
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;
go

set statistics time off;
go

use master;
alter database DBTest001 set single_user with rollback immediate;
drop database DBTest001;
go

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 SQL Server Execution Times:
   CPU time = 422 ms,  elapsed time = 947 ms.

 SQL Server Execution Times:
   CPU time = 515 ms,  elapsed time = 961 ms.

 SQL Server Execution Times:
   CPU time = 5547 ms,  elapsed time = 6264 ms.
...
Рейтинг: 0 / 0
05.01.2021, 14:07
    #40033605
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Yasha123

лажа это, прости господи.
если значение поля влазит в инроу, то там и будет размещено.


Если чего-то не знаете, то из этого не следует, что этого нет )))
invm

create table dbo.t3 (id int identity primary key, s varchar(max));
exec sp_tableoption 'dbo.t3', 'large value types out of row', 1;
...
Рейтинг: 0 / 0
05.01.2021, 14:14
    #40033606
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
invm,

про вставку я ничего не говорил. В моем случае, это очень редкая операция, по сравнению с выборкой.


Код: 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.
59.
60.
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create database DBTest001;
alter database DBTest001 set recovery full;
backup database DBTest001 to disk = 'nul:';
go

use DBTest001;
go

create table dbo.t1 (id int identity primary key, s varchar(1000));
create table dbo.t2 (id int identity primary key, s varchar(max));
create table dbo.t3 (id int identity primary key, s varchar(max));

exec sp_tableoption 'dbo.t3', 'large value types out of row', 1;
go

set statistics time on;
set statistics io on;
go

insert into dbo.t1
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.t2
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

insert into dbo.t3
 (s)
 select top (100000)
  replicate('a', 1000)
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;
go

SELECT SUM(id) FROM t1 WHERE id BETWEEN 1000 AND 10000
SELECT SUM(id) FROM t2 WHERE id BETWEEN 1000 AND 10000
SELECT SUM(id) FROM t3 WHERE id BETWEEN 1000 AND 10000

set statistics time off;
set statistics io off;
go

use master;
alter database DBTest001 set single_user with rollback immediate;
drop database DBTest001;
go



...

(1 row affected)
Table 't1'. Scan count 1, logical reads 1295, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 2 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

(1 row affected)
Table 't2'. Scan count 1, logical reads 1295, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 2 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.

(1 row affected)
Table 't3'. Scan count 1, logical reads 39, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
...
Рейтинг: 0 / 0
05.01.2021, 14:16
    #40033607
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
ptr128
Yasha123

лажа это, прости господи.
если значение поля влазит в инроу, то там и будет размещено.


Если чего-то не знаете, то из этого не следует, что этого нет )))
invm

create table dbo.t3 (id int identity primary key, s varchar(max));
exec sp_tableoption 'dbo.t3', 'large value types out of row', 1;

чего уж так извращаться-то, объявляйте сразу text.
а лучше и вовсе на 2000-ый переходите,
ваша логика его достойна.
кстати, что там про ускорение-то?
жду тест, когда благодаря вашему извращению хоть что-то ускорится
(что замедлится как вставка, так и выборка, я вам на раз продемонстрирую)
...
Рейтинг: 0 / 0
05.01.2021, 14:19
    #40033608
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Yasha123,

откройте спойлер выше. На примере от invm - в два раза!
...
Рейтинг: 0 / 0
05.01.2021, 14:19
    #40033609
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
о, да это песня,
мало того, что в приведенном тесте вообще читаются только инроу-страницы,
так товарищ еще и не в курсе, что читать лобы будет куда дольше.
...
Рейтинг: 0 / 0
05.01.2021, 14:23
    #40033610
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Yasha123,

я отлично знаю, что чтение out-of-row будет медленней. Но когда на практике в 90% запросов они не читаются, так как содежат всяческие комментарии для пользователей или тому подобный текст, но зато тормозят обработку данных и обслуживание индексов, я выбираю out-of-row.
...
Рейтинг: 0 / 0
05.01.2021, 14:24
    #40033611
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
ptr128
Yasha123,

откройте спойлер выше. На примере от invm - в два раза!

дарагуля, в спойлере выше все строки есть инроу (lob logical reads 0)
расхотелось уже хранить свои максы в лобах
или пример со сменой способа хранения лобов только мне показал,
а себе применить забыл?
...
Рейтинг: 0 / 0
05.01.2021, 14:26
    #40033613
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Yasha123,

читать научитесь. Полезно будет )))

exec sp_tableoption 'dbo.t3', 'large value types out of row', 1
...
Table 't1'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 't2'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 't3'. Scan count 1, logical reads 39 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Просто на практике у меня выборки в хранимых процедурах в 90% out-of-row не используют )))
...
Рейтинг: 0 / 0
05.01.2021, 14:29
    #40033615
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
ptr128
Yasha123,

читать научитесь. Полезно будет )))

exec sp_tableoption 'dbo.t3', 'large value types out of row', 1
...
Table 't1'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 't2'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 't3'. Scan count 1, logical reads 39 , physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Просто на практике у меня выборки в хранимых процедурах в 90% out-of-row не используют )))

ну давай вместе поучимся:
авторTable 't1'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0 , lob physical reads 0, lob read-ahead reads 0.
Table 't2'. Scan count 1, logical reads 1295 , physical reads 0, read-ahead reads 0, lob logical reads 0 , lob physical reads 0, lob read-ahead reads 0.
Table 't3'. Scan count 1, logical reads 39 , physical reads 0, read-ahead reads 0, lob logical reads 0 , lob physical reads 0, lob read-ahead reads 0.
...
Рейтинг: 0 / 0
05.01.2021, 14:33
    #40033616
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему файл БД вырос после alter column
Yasha123,

Лично для Вас фонт покрупнее. Может со зрением плохо?

на практике у меня выборки в хранимых процедурах в 90% out-of-row не используют

Table 't1'. Scan count 1, logical reads 1295
Table 't2'. Scan count 1, logical reads 1295
Table 't3'. Scan count 1, logical reads 39

То есть, за счет того, что в последней таблице строки были вынесены out-of-row, количество logical reads при выборке из этой таблице, в которой эти строки не участвуют, сократилось в 33 раза!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему файл БД вырос после alter column / 25 сообщений из 53, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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