powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему файл БД вырос после alter column
53 сообщений из 53, показаны все 3 страниц
Почему файл БД вырос после alter column
    #40033486
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему так получилось:

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



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

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

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


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

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

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

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

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

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


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

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

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

За чем же тогда "наблюдал" страдалец?
Создание пустого столбца "не понаблюдаешь".
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033563
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033578
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что делать - так страдальцу и не сказали!

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


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

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

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

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

лажа это, прости господи.
если значение поля влазит в инроу, то там и будет размещено.
так что если значения по длине не превышают 6000 символов,
как ни объявляй, varchar(6000) или varchar(max), покуда длина строки не превысит 8060,
размещение будет одинаковым.
и уж ни о каком ускорении речи не идет вовсе.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033601
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033605
Фотография 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;
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033606
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033607
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033608
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

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

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

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

дарагуля, в спойлере выше все строки есть инроу (lob logical reads 0)
расхотелось уже хранить свои максы в лобах
или пример со сменой способа хранения лобов только мне показал,
а себе применить забыл?
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033613
Фотография 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 не используют )))
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033615
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033616
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему файл БД вырос после alter column
    #40033617
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз:
где пример хоть на какое-то ускорение благодаря черезжопному хранению?
на этот вопрос меня призвали открыть спойлер.
в спойлере НЕТ чтения лобов, сплошное инроу,
так о чем спор?

вы в этой теме громогласно заявляете, почему надо хранить out of row то,
что намеренно запихивают в in row, начиная с 2005-ого сервера.
вас спрашивают: пример на "ускорение" можно увидеть?
а ответ оказывается уже не в спойлере,
а в том, что там ваши процедуры читают. вернее, не читают.

всем пофигу на ваши процедуры.
но вот не надо с трибуны призывать хранить так, чтобы стало медленнее.

если строка влазит в 6000, не надо ее как max объявлять.
пользы 0, а тормознее станет, вот и все
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033618
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,
протрите глаза что ли, или очки. Выше явно показано, что количество logical reads при выборке, в которой строки вообще не участвуют, из таблицы t3 сократилось в 33 раза(!), по сравнению с той же выборкой из t1 и t2

Я пока на практике очень редко сталкивался со случаем, когда строки длинее ~200 символов действительно были бы нужны в более чем 10% запросах. Потому и считаю это скорее исключением, чем правилом. Да, пусть медленнее происходит вставка и выборка таких строк, раз остальные 90% запросов выполняются на порядок быстрее.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033622
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128

...Выше явно показано, что количество logical reads при выборке, в которой строки вообще не участвуют...

если чего-то не очень хочется/да и не нужно вообще читать,
не добавляйте это что-то в нужный индекс,
не добавляйте вообще в таблицу, храните в другой, связь 1 в 1 с основной.
зачем же так извращаться?
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033629
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Да, пусть медленнее происходит вставка и выборка таких строк, раз остальные 90% запросов выполняются на порядок быстрее.


https://www.brentozar.com/archive/2019/05/9-tips-for-faster-sql-server-applications/Don’t go overboard: SQL Server bases its memory grants in part based on the column definition. Oversize your column, and you’ll oversize your memory grant – which sounds good until you hit concurrency issues.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033634
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

потому что хранение таких строк в другой новой таблице потребует больших затрат, чем просто вынос этих строк в out-of-row. Причем затрат не только сервера, но и времени разработчика.

Многие универсальные веб-формы вобще не умеют сохранять одну строку в две связанные таблицы. Нужно добавлять кастомизированную веб-форму.

В процедурах ETL это тоже будет заметным усложнением. Одно дело просто в лоб XMLBulkLoad вызвать, а совсем другое - еще и переписывать то, что он сформировал.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033636
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда и не пойте здесь о скорости.
все, что вас подталкивает на извращение, это "усложнение" в виде лени.
если надо будет копировать все целиком,
на приличном объеме разница в перетаскивании 2ух связанных таблиц, но полностью инроу
и одной, но с лобами в виде лобов(b-tree),
будет измеряться часами.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033638
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
про вставку я ничего не говорил. В моем случае, это очень редкая операция, по сравнению с выборкой.
Тогда зачем давать универсальный совет, если по факту он для частного случая?
Да еще и не упоминать, что для принудительного хранения out-of-row нужны дополнительные настройки...
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033639
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

про указание принудительного хранения действительно забыл упомянуть. Тут вину признаю.
А уж насколько он частный ни я, ни Вы, субъективно судить не можем. В моей практике он скорее общий, чем частный.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033641
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
ну тогда и не пойте здесь о скорости.
все, что вас подталкивает на извращение, это "усложнение" в виде лени.

Какое отношение имеет к лени срыв сроков и удорожание проекта из-за дополнительной загрузки разработчиков?
При этом, выделение в отдельную таблицу строк длинее, для примера, 200 символов, так же влечет за собой и дополнительную нагрузку на сервер. Я совсем не уверен, что она в итоге окажется меньше, чем простое вытеснение таких строк out-of-row

P.S. Если Вы очень хотите прослыть демагогом - продолжайте дальше переходить на личности )))
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033644
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

Упоминание только лишь про собственную практику и говорит о частности случая.
Написали бы, что в основном нагрузка на чтение и получать строковые данные нужно очень редко - вопросов бы не было.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033645
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128

Какое отношение имеет к лени срыв сроков и удорожание проекта из-за дополнительной загрузки разработчиков?

а какое отношение ваши проекты имеют к скорости работы с ЛОБами?

вы мне рассказываете об ускорении работы с таблицами за счет выноса инроу в оффроу,
которые или мизерны, или вообще вам нужны только для приложений,
которые не умеют работать с тем или этим.
и мне смешно,
т.к. мне наоборот пришлось избавлять таблицу от лобов в связи с жуткими тормозами.
и как только мне говорят: мой селект возвращает 100 строк за 5 минут,
мой первый вопрос это есть ли там треклятые ЛОБы.
ЛОБы и скорость это в рамках SQL Server-а понятия ровно противоположные
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033646
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

я честно написал "я предпочитаю" )))
И даже указал почему. Потому что эти строки мне, в подавлющем большинстве случаев, просто неинтересны. А размещение их in-row тормозит 90% выборок.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033647
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
ptr128

Какое отношение имеет к лени срыв сроков и удорожание проекта из-за дополнительной загрузки разработчиков?

а какое отношение ваши проекты имеют к скорости работы с ЛОБами?

Сначала ответьте на мой вопрос. Отвечать вопросом на вопрос грубо и бескультурно.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033649
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128

я честно написал "я предпочитаю" )))
И даже указал почему.

не поверите, в MS посчитали, что наоборот, такие поля читают.
и чтобы ускорить процесс, начиная с 2005-ого,
на каждом углу пишут не использовать атавизмы в виде text/ntext/image.
а использовать вытеснившие сии атавизмы varchar(max)/varbinary(max),
которые всячески стараются хранить данные, где возможно, именно в инроу.
это дефолтное поведение и его сделали таковым не назло вам, а на благо остальных.

так что да, если бы вы написали свой ответ в ключе
"а вот когда вы не намерены это читать, можно и этак извратиться",
смотрелось бы это совсем по-другому.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033650
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123

и как только мне говорят: мой селект возвращает 100 строк за 5 минут,
мой первый вопрос это есть ли там треклятые ЛОБы.

Каждому свое )))
А мой первый вопрос: "План выполнения смотрел на предмет наличия table scan?"
Второй вопрос: "Давно ли пересчитывались статистики?"
Потому что lob могут замедлить запрос в несколько раз от силы. А вот table scan или протухшие статистики - на несколько порядков.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033653
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда пишут про топ 100 без сортировки,
план типа очевиден.
но можно, да, придраться, что у меня про топ не было сказано и заново устроить спор.

предлагаю тему закрыть.

кстати, вы тут видимо недавно,
а вот давным-давно обсуждали как раз VARCHAR(MAX) VS VARCHAR(N)
на второй странице ответ дает человек, очень хорошо разбирающийся в оптимизаторе.
оставлю здесь ссылку:
VARCHAR(MAX) VS VARCHAR(N)
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033654
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

я тут совсем не недавно. Просто в будни у меня совешенно нет времени ходить по форумам, а в короткие еженедельные выходные занят совсем другими делами.

Про все плюсы и минусы указания длины для полей я давно в курсе. Этак уже лет 15 )))
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033657
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Yasha123,

я тут совсем не недавно. Просто в будни у меня совешенно нет времени ходить по форумам, а в короткие еженедельные выходные занят совсем другими делами.

Про все плюсы и минусы указания длины для полей я давно в курсе. Этак уже лет 15 )))


вот у меня тоже давно нет ни времени, ни желания тут находиться.
вас честно говоря, не помню совсем.
явно не пересекались.
хотя контингент тут вообще поменялся на 90% за последние года 2.
и весьма не в лучшую сторону.
в старые добрые времена у меня был серый ник о-о.
и если вы действительно тут давно, то наверное вспомните,
что мне про план объяснять не надо.
возможно, кто вас знает, тот тоже по огрызку фразы понял бы, что вы просто не написали про опцию,
которой, если честно, мне ни разу не пришлось воспользоваться.

а так-то выглядело все как всегда:
рассуждения про 6000 символов, которые, если объявить как макс, сразу уйдут в оффроу,
а зато по скорости ну сплошные выигрыши.
вот отсюда и наезд.
надеюсь, теперь можем мирно разойтись по своим делам :)

и да,если вы есть на dba.stackexchange, можем списаться и приглашать друга на полную ахинею.
там такое бывает, один плюсанет и пошло-поехало, стадное чувство.
акину там вижу и тапак раньше был ( вам, товарищи, привет!)
думаю, именно акина плюсанул там за ССЗБ, остальные вряд ли поняли, о чем это :)
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033660
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

скажите, пожалуйста, честно: эта особенность таблиц (large value types out of row) у ваших систем задокументирована или это сакральное знание, устно передающееся из поколения в поколение? Ее же не найти, если не знать о ней...
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033661
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений,
По разному бывало )
На текущем проекте так:
Во-первых, 'large value types out of row' = 1 вовсе не у всех таблиц. Есть исключения, хоть их и мало.
Во-вторых, для удобства, список таких таблиц хранится в справочнике и этот справочник документирован. При разворачивании установка 'large value types out of row' = 1 производится только для таблиц перечисленных в справочнике. Перестройка таблиц при этом не производится. Удаление элемента из справочника не порождает автоматического сброса флага 'large value types out of row', но будет учтено при следующем разворачивании и флаг будет сброшен. Но опять таки без перестройки всей таблицы.

Первоисточник, почему так сделано тут :
If you are converting an existing LOB data type column (text, ntext, or image) to small-to-medium large value types (varchar(max), nvarchar(max), or varbinary(max)), and most statements do not reference the large value type columns in your environment, consider changing large_value_types_out_of_row to 1 to gain optimal performance.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033765
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123
когда пишут про топ 100 без сортировки,
план типа очевиден.
но можно, да, придраться, что у меня про топ не было сказано и заново устроить спор.

предлагаю тему закрыть.

кстати, вы тут видимо недавно,
а вот давным-давно обсуждали как раз VARCHAR(MAX) VS VARCHAR(N)
на второй странице ответ дает человек, очень хорошо разбирающийся в оптимизаторе.
оставлю здесь ссылку:
VARCHAR(MAX) VS VARCHAR(N)

Вот тут даже не поленились экспериментально подтвердить:
https://habr.com/ru/post/489182/
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033774
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОФФТОП
Коллеги!
вы сретесь тут хуже чем на полит форумах.
такое ощущение, что вы готовы убить за sql server.
я так долго живу, что еще помню старый добрый sql.ru форум, на котором старались помочь советом, а не замазать коллегу говном.


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


не хватает места на диске.
50 Гиг откусывает за 2 минуты.
придется просто удалять записи старше 6 месяцев.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033795
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,

Вы так и не поняли, что varchar(6000) не уменьшит место хранения по сравнению с varchar(8000)? Операцией замены типа только хуже сделали, как вами убедились.
Переписывайте данные в новую таблицу, затем удалите старую, переименуйте новую и воссоздайте права, если необходимо.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033810
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser

не хватает места на диске.

Если таблицу сжать для начала, то места может хватить.

Код: sql
1.
2.
ALTER TABLE [dbo].[Monitoring_Arch] REBUILD PARTITION = ALL  
WITH (DATA_COMPRESSION = ROW)


потом уже переименуйте таблицу и скопируйте из нее данные в нужном виде.

Ну или более трудоемкая альтернатива. bcp в файл, TRUNCATE TABLE, ALTER TABLE, BULK INSERT
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033837
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
RegisteredUser,

Вы так и не поняли, что varchar(6000) не уменьшит место хранения по сравнению с varchar(8000)? Операцией замены типа только хуже сделали, как вами убедились.
Переписывайте данные в новую таблицу, затем удалите старую, переименуйте новую и воссоздайте права, если необходимо.


наверно так и сделаю.
спасибо
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033853
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser
наверно так и сделаю.
Прежде чем делать, неплохо бы подумать.
Ребилд таблицы и есть создание новой и удаление старой. Без лишних приседаний, озвученных Владиславом Колосовым. Так что, если ребилд не помог, то и ручное переписывание не поможет.

Есть такой вариант:
1. Выгрузить данные с помощью bcp туда, где есть место
2. Очистить таблицу truncate'ом
3. Поменять длину столбца
4. Если модель восстановления full - перевести БД в bulk_logged или simple
5. Выгруженные в п.1 данные залить обратно.
6. При необходимости вернуть модель восстановления full

ЗЫ: См. в документации порядок действий, необходимый для смены full в bulk_logged или simple.
...
Рейтинг: 0 / 0
Почему файл БД вырос после alter column
    #40033855
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

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

Вы так и не поняли, что varchar(6000) не уменьшит место хранения по сравнению с varchar(8000)? Операцией замены типа только хуже сделали, как вами убедились.
Переписывайте данные в новую таблицу, затем удалите старую, переименуйте новую и воссоздайте права, если необходимо.


RegisteredUser


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


не хватает места на диске.
50 Гиг откусывает за 2 минуты.


Не, старый добрый SQL-форум инфаркт хватит.
От таких советов.
Шо, копия таблицы места не занимает?

Зы. Вот тредстартеру неймется.
Спи спокойно, дарагой товарисчЪ.
Со временем, старые записи будут удалены, страницы освобождены, а вместе с ними и старый столбец.
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему файл БД вырос после alter column
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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