Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / База данных не уменьшается после удаления записей / 25 сообщений из 28, страница 1 из 2
18.01.2019, 11:08
    #39761325
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Добрый день.

Помогите, пожалуйста, я скорее программист, чем администратор, но приходится решать проблему со сжатием базы данных. Поиском воспользовался, Shrink по логам сделан, Recovery Model - Simple, логи составляют всего 10 М. А база - 150 Gb. Удаляю старые данные, но при этом снижения размера базы не происходит. В Tasks->Shink пришет, что для DATA свободного пространства - 0%, минимальный размер файла равен текущему размеру (хотя треть записей удалена).

Версия:

Microsoft SQL Server 2016 (SP1-CU6) (KB4037354) - 13.0.4457.0 (X64) Nov 8 2017 17:32:23 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )

Если простым советом здесь не поможешь, ищу специалиста на разовую работу по снижению размера базы средствами администратора, в идеале - без реальной остановки.

Заранее признателен,
Сергей.
...
Рейтинг: 0 / 0
18.01.2019, 11:43
    #39761365
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey Gusev,

"Бытовая аналогия" (с) с соседней ветки форума
...
Рейтинг: 0 / 0
18.01.2019, 11:49
    #39761368
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey Gusev,

Тут если в двух словах и кратко, то:
1) Удалить все ненужные (на ваш взгляд) данные из таблиц
2) Устранить "фрагментацию" страниц на уровне таблиц/индексов (читать alter [table | index] rebuild)
3) Шринк файлов.

Как альтернативный вариант, вместо 2 и 3 создать новую ФГ, перенести всё в неё, старую ФГ удалить.

Все операции - на ваш страх и риск.
На стандартной редакции скуль сервера - перестроение таблиц и индексов - блокирующая операция, без фозможности выполнения с опцией ONLINE
...
Рейтинг: 0 / 0
18.01.2019, 12:13
    #39761388
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey GusevShink пришет, что для DATA свободного пространства - 0%, минимальный размер файла равен текущему размеру
покажите результат sp_spaceused по данной базе
...
Рейтинг: 0 / 0
18.01.2019, 12:33
    #39761414
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey Gusev,

зачем Вы ее сжимаете, в базе никогда не появятся новые данные?
...
Рейтинг: 0 / 0
18.01.2019, 12:36
    #39761420
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Владислав КолосовSergey Gusev,

зачем Вы ее сжимаете, в базе никогда не появятся новые данные?
да и не сжимается у него.
пишет же, свободного места нет.
и если это так,
то вопрос ТС законный, кто держит освободившееся после удаления место.
и например, это кучи.
или пустые LOB-страницы
и у них неплохо бы место забрать
...
Рейтинг: 0 / 0
18.01.2019, 12:40
    #39761424
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123,

не знаете ли - куча отдаст место, если удалить все записи?
...
Рейтинг: 0 / 0
18.01.2019, 12:46
    #39761428
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Владислав КолосовSergey Gusev,

зачем Вы ее сжимаете, в базе никогда не появятся новые данные?

Пока не сжимаю, рассматриваю как вариант. А что, сжатие доступно только для архивов? Вообще, база активно используется и в те таблицы, которые я собираюсь сжимать, будут идти записи.
...
Рейтинг: 0 / 0
18.01.2019, 12:55
    #39761437
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123Sergey GusevShink пришет, что для DATA свободного пространства - 0%, минимальный размер файла равен текущему размеру
покажите результат sp_spaceused по данной базе

Вот по трём самым большим таблицам -
...
Рейтинг: 0 / 0
18.01.2019, 12:57
    #39761439
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Владислав КолосовYasha123,
не знаете ли - куча отдаст место, если удалить все записи?
если с таблоком удалять, то отдает.
если без таблока, не отдает.
хоть все, хоть не все
...
Рейтинг: 0 / 0
18.01.2019, 12:58
    #39761442
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey GusevYasha123пропущено...

покажите результат sp_spaceused по данной базе

Вот по трём самым большим таблицам -
вроде пишу русским языком:
результат sp_spaceused по базе .
без параметров sp_spaceused запустите
...
Рейтинг: 0 / 0
18.01.2019, 13:05
    #39761452
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123без параметров sp_spaceused запустите


database_name database_size unallocated space
RBCMoneyNew 161860.94 MB 3.40 MB

reserved data index_size unused
165730920 KB 148398584 KB 17289784 KB 42552 KB
...
Рейтинг: 0 / 0
18.01.2019, 13:20
    #39761465
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey Gusev,

Код: 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.
set nocount on;
declare @name sysname;

declare cur1 cursor for
	select ss.name + '.'+ tt.name obj
	from sys.tables tt
	inner join sys.schemas ss on tt.schema_id = ss.schema_id

create table #result1 (name sysname, rows bigint, reserved varchar(100), data varchar(100), index_size varchar(100), unused varchar(100))
create table #result (name sysname, rows bigint, reserved bigint, data varchar(100), index_size varchar(100), unused bigint)

open cur1
fetch cur1 into @name
while @@FETCH_STATUS = 0
begin 
	insert #result1
		exec sp_spaceused @objname = @name;
	insert #result 
		select @name, rows, cast(replace(reserved, ' kb', '') as bigint), data, index_size, cast(replace(unused, ' kb', '') as bigint) from #result1
	delete #result1

	fetch cur1 into @name
end

close cur1
deallocate cur1

select *, iif(unused = 0, 0.01, unused)/iif(reserved = 0, 0.01, reserved) * 100.00 waste_pc from #result where reserved > 100000 order by 7 desc



С наибольшим waste_pc - кандидаты на alter table ... rebuild.
...
Рейтинг: 0 / 0
18.01.2019, 13:23
    #39761468
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Владислав КолосовС наибольшим waste_pc - кандидаты на alter table ... rebuild.

Спасибо!
...
Рейтинг: 0 / 0
18.01.2019, 13:26
    #39761471
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey GusevYasha123без параметров sp_spaceused запустите


database_name database_size unallocated space
RBCMoneyNew 161860.94 MB 3.40 MB

reserved data index_size unused
165730920 KB 148398584 KB 17289784 KB 42552 KB
ну вы же видите, у вас нет свободного места в базе (unallocated space 3.40 MB).
поэтому шринк и не проходит, отрезать нечего.
если треть записей удалена, то место свободное есть,
но оно продолжает числиться за объектами, которые вы почистили.
скорее всего это ЛОБы, или же вы удаляли данные из куч без таблока.
вам виднее, какой случай ваш.
ЛОБы это varchar(max), varbinary(max), xml
...
Рейтинг: 0 / 0
18.01.2019, 13:29
    #39761473
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey Gusev,

Покажите результат
Код: sql
1.
2.
3.
4.
5.
6.
select
 sum(case when index_id in (0, 1) then 1 else 0 end) as total_tables,
 sum(case when index_id = 0 then 1 else 0 end) as heap_tables,
 sum(case when index_id = 0 then page_count * (1 - avg_page_space_used_in_percent / 100.) else 0 end) / 128 as unused_heap_space
from
 [моя БД].sys.dm_db_index_physical_stats(0, null, null, null, 'detailed');
...
Рейтинг: 0 / 0
18.01.2019, 13:36
    #39761477
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Владислав КолосовSergey Gusev,

Код: 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.
set nocount on;
declare @name sysname;

declare cur1 cursor for
	select ss.name + '.'+ tt.name obj
	from sys.tables tt
	inner join sys.schemas ss on tt.schema_id = ss.schema_id

create table #result1 (name sysname, rows bigint, reserved varchar(100), data varchar(100), index_size varchar(100), unused varchar(100))
create table #result (name sysname, rows bigint, reserved bigint, data varchar(100), index_size varchar(100), unused bigint)

open cur1
fetch cur1 into @name
while @@FETCH_STATUS = 0
begin 
	insert #result1
		exec sp_spaceused @objname = @name;
	insert #result 
		select @name, rows, cast(replace(reserved, ' kb', '') as bigint), data, index_size, cast(replace(unused, ' kb', '') as bigint) from #result1
	delete #result1

	fetch cur1 into @name
end

close cur1
deallocate cur1

select *, iif(unused = 0, 0.01, unused)/iif(reserved = 0, 0.01, reserved) * 100.00 waste_pc from #result where reserved > 100000 order by 7 desc



С наибольшим waste_pc - кандидаты на alter table ... rebuild.
с кучей точно не катит.
допустим, удаляем 1млн строк из dbo.Nums (это все строки).
таблица пуста, по ней имеем (см.картинку)

ваш waste_pc = 0,14

с ЛОБами сейчас не могу проверить, может попозже
...
Рейтинг: 0 / 0
18.01.2019, 13:40
    #39761482
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123ну вы же видите, у вас нет свободного места в базе (unallocated space 3.40 MB).
поэтому шринк и не проходит, отрезать нечего

Собственно, об этом я и написал в самом первом сообщении. Удалил треть записей в самых больших таблицах, а уменьшить файлы не могу.
...
Рейтинг: 0 / 0
18.01.2019, 13:41
    #39761485
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
invm[моя БД].sys.dm_db_index_physical_stats( 0 , null, null, null, 'detailed');
это все равно полезет во все базы,
даже если из нужной вызвать.
надо
Код: sql
1.
sys.dm_db_index_physical_stats(db_id(), null, null, null, 'detailed');
...
Рейтинг: 0 / 0
18.01.2019, 13:57
    #39761496
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123надо
Код: sql
1.
sys.dm_db_index_physical_stats(db_id(), null, null, null, 'detailed');



Это вернуло

total_tables heap_tables unused_heap_space
112 0 0
...
Рейтинг: 0 / 0
18.01.2019, 13:59
    #39761497
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
LOB-ы удаляли?
...
Рейтинг: 0 / 0
18.01.2019, 14:51
    #39761519
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123LOB-ы удаляли?

Нет, пока даже не знаю, что это такое.
...
Рейтинг: 0 / 0
18.01.2019, 15:13
    #39761541
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Sergey GusevYasha123LOB-ы удаляли?

Нет, пока даже не знаю, что это такое.
вообще-то выше написано: это (n)text, image, varbinary(max), (n)varchar(max), xml.
если это добро было в удаляемых строках, по идее помогает alter index.. reorganize.
когда не помогает, остается только перелив в новую таблицу с последующим ее переименованием
...
Рейтинг: 0 / 0
18.01.2019, 15:32
    #39761565
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123вообще-то выше написано: это (n)text, image, varbinary(max), (n)varchar(max), xml.

То есть удаляя запись, MS SQL не удаляет связанные с ними большие данные? А как это тогда решать? Предварительное обнуление этих полей решит проблему?
...
Рейтинг: 0 / 0
18.01.2019, 15:42
    #39761572
Sergey Gusev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных не уменьшается после удаления записей
Yasha123если это добро было в удаляемых строках, по идее помогает alter index.. reorganize.

Это наверное, имеется в виду - кластерные индексы только?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / База данных не уменьшается после удаления записей / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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