Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление из переполненной MSSQL Express / 25 сообщений из 28, страница 1 из 2
21.05.2021, 15:59
    #40071969
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Имеем Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64) Jul 5 2017 23:41:17 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 19041: )

Достигнут предел базы 10 Гб, свободно пишет 0,63 MB

При попытке удалить ненужное
Код: sql
1.
delete from ... where Id < @nMaxId


ошибка
Could not allocate space for object 'dbo....'.'PK_....' in database '...' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Дает удалять только по одной, сейчас так и молотит, но это растянется часов на 5. Клиентская прога генерит в цикле
Код: sql
1.
delete from ... where Id = ...


Удаляет примерно по 1000 штук в секунду.

Я думал что немного места освободится и можно будет хотя бы по сотне за раз удалять, но нет, все-равно 1-2 за раз, больше - ошибка.

Может кто подскажет как ускорить процесс ?
...
Рейтинг: 0 / 0
21.05.2021, 16:11
    #40071976
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Пока так ускорил (по 100 за раз)
Код: sql
1.
delete from ... where Id in (del_id, del_id+1, del_id+2 ... del_id+99)


Не в 100 раз, но заметно быстрее.
...
Рейтинг: 0 / 0
21.05.2021, 16:20
    #40071980
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T,

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

После чего уже можно предпринимать какие-то сервисные действия по отношению к базе.
...
Рейтинг: 0 / 0
21.05.2021, 16:46
    #40071991
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T

Может кто подскажет как ускорить процесс ?

подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данные
вернуть базу на экспресс
...
Рейтинг: 0 / 0
21.05.2021, 16:46
    #40071992
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Базу в bulk logged перевели?
...
Рейтинг: 0 / 0
21.05.2021, 16:55
    #40071997
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T
Пока так ускорил (по 100 за раз)
Код: sql
1.
delete from ... where Id in (del_id, del_id+1, del_id+2 ... del_id+99)


Не в 100 раз, но заметно быстрее.


потому, транзакции отдельные. Сделайте так:
begin tran
delete ..
delete ..
delete ..
commit
...
Рейтинг: 0 / 0
21.05.2021, 17:00
    #40071998
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
komrad подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данныеТогда уже
Перевести базу на экспресс в оффлайн
Скопировать файлы базы (mdf и ldf) на стандарт/девелопер/энтерпрайз
Присоединить и добавить места - расширить файлы
Перевести базу в оффлайн
Перезаписать старые файлы на експресс новыми
Открыть базу
...
Рейтинг: 0 / 0
21.05.2021, 20:42
    #40072051
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Кесарь
найдите какую-то таблицу, у которой более менее приличный размер, и данные в которой не слишком важны. И сделайте ей truncate.

Нет таких таблиц, есть большая таблица откуда можно удалить часть старой инфы.
komrad
Dima T

Может кто подскажет как ускорить процесс ?

подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данные
вернуть базу на экспресс

Я за лицензионную чистоту, поэтому экспресс. Как понимаю упомянутые версии на Win10 не встанут, надо сначала где-то серверный виндавс нарыть.
...
Рейтинг: 0 / 0
21.05.2021, 20:44
    #40072052
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dorosh
Базу в bulk logged перевели?

Не понял о чем речь, почитаю.
...
Рейтинг: 0 / 0
21.05.2021, 20:52
    #40072053
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Проблема порешалась удалением по 100. За 10 минут удалилось 0.7 Гб

В итоге главная непонятка вот в чем:
Код: sql
1.
delete from ... where Id < @nMinId+100


выдает ошибку нехватки места, даже +2 невсегда срабатывает
а это стабильно работает
Код: sql
1.
delete from ... where Id in (@nMinId, @nMinId+1, @nMinId+2 ... @nMinId+99)


хотя @nMinId это min(id)

Id это int, primary key

В чем разница между Id < ... и Id in ... ?
...
Рейтинг: 0 / 0
21.05.2021, 21:11
    #40072059
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
>Я за лицензионную чистоту, поэтому экспресс
Дело ваше. Если надумаете посмотрите
https://www.sentryone.com/blog/aaronbertrand/get-developer-edition

>Как понимаю упомянутые версии на Win10 не встанут
Нет возможности проверить, но девелопер вставала на клиентскую OS
...
Рейтинг: 0 / 0
21.05.2021, 21:19
    #40072062
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
SERG1257
>Я за лицензионную чистоту, поэтому экспресс
Дело ваше. Если надумаете посмотрите
https://www.sentryone.com/blog/aaronbertrand/get-developer-edition

>Как понимаю упомянутые версии на Win10 не встанут
Нет возможности проверить, но девелопер вставала на клиентскую OS

На postgres надо перейти, но все лень и некогда
...
Рейтинг: 0 / 0
21.05.2021, 22:16
    #40072078
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T
Кесарь
найдите какую-то таблицу, у которой более менее приличный размер, и данные в которой не слишком важны. И сделайте ей truncate.

Нет таких таблиц, есть большая таблица откуда можно удалить часть старой инфы.
komrad
пропущено...

подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данные
вернуть базу на экспресс

Я за лицензионную чистоту, поэтому экспресс. Как понимаю упомянутые версии на Win10 не встанут, надо сначала где-то серверный виндавс нарыть.

Не фантазируй, а почитай инструкцию
https://docs.microsoft.com/ru-ru/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server?view=sql-server-2016

АФАИК на W7SP1 работает практически все.

Используй виртуалки для тестов.

ЗЫ. Постресс пусть только в страшном сне тебе снится.
...
Рейтинг: 0 / 0
22.05.2021, 11:43
    #40072151
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Алгоритм действий, в общем, прост.
Копируешь очищаемые таблицы в master, в исходной базе делаешь truncate этих таблиц, копируешь только нужные данные из таблиц в master'е в оттранкейченные таблицы, удаляешь ненужные таблицы в мастере, сжимаешь мастер, по желанию - сжимаешь целевую БД.

Можно, кстати, ничего и не удалять.
Переместить таблицы в мастер, и сделать на них алиесы в исходной бд.
На мастер нет ограничение по размеру.

Кстати, ограничение то не на все данные 10Гб, а на одну базу. Поэтому нет проблем вынести половину толстых таблиц в соседнюю базу, а в исходной сделать алиесы на них.

И даже если этого сделать нельзя, у вас одна таблица, размером больше 10 Гб - классическое горизонтальное секционирование вам в руки. Половину таблицы - в одну базу, половину - в другую. На id - создать констрейнт, between минимальное значение в этом куске and максимальное значение в этом куске. Ну и нарисовать в исходной базе, вместо таблицы view
Код: sql
1.
Select * from db1.halftable where id between 1 and 1000000 Union all Select * from db2.halftable where id between 1000001 and 2000000


И продолжить работать как ни в чем не бывало. Оно обновляемое.
Ну, или трюк с мастер.

Ограничение по размеру базы в экспресс - легко обходится.
Вот ограничение по количеству ядер и памяти - нет.
...
Рейтинг: 0 / 0
22.05.2021, 22:43
    #40072234
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
"легко обходится" не в смысле взламываются, а в смысле не создают таких трудностей, как ограничение по процессорам и памяти. Также стоит упомянуть использование псевдонимов, в совокупности к уже указанным секционированным представлениям.
...
Рейтинг: 0 / 0
23.05.2021, 19:54
    #40072313
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T
Dorosh
Базу в bulk logged перевели?

Не понял о чем речь, почитаю.
...
Рейтинг: 0 / 0
24.05.2021, 10:32
    #40072384
vadikpavlov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Спасибо, полезная информация
...
Рейтинг: 0 / 0
25.05.2021, 13:24
    #40072724
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Siemargl
Dima T
пропущено...

Нет таких таблиц, есть большая таблица откуда можно удалить часть старой инфы.
пропущено...

Я за лицензионную чистоту, поэтому экспресс. Как понимаю упомянутые версии на Win10 не встанут, надо сначала где-то серверный виндавс нарыть.

Не фантазируй, а почитай инструкцию
https://docs.microsoft.com/ru-ru/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server?view=sql-server-2016

АФАИК на W7SP1 работает практически все.

Используй виртуалки для тестов.

ЗЫ. Постресс пусть только в страшном сне тебе снится .

Даладно.
PostgreSQL - это то, о чем мечтали большевики.
И правильно юзер хочет
...
Рейтинг: 0 / 0
25.05.2021, 17:25
    #40072820
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
В некот. случаях перенос таблицы + вьюха на нее не сработает, т.к. приложение может проверять наличие именно конкретной таблицы.
Н-р тот же 1С.
...
Рейтинг: 0 / 0
26.05.2021, 09:27
    #40072985
RedBird
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T,

Подобную проблему на БД, с которой ничего делать было нельзя, я решил через INDEX REBUILD для тех индексов, у которых был очень низкий fill factor.

На глазах изумленной публики за полчаса удалось "достать из воздуха" 2Гб свободного места в БД.
...
Рейтинг: 0 / 0
26.05.2021, 10:40
    #40073017
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
RedBird
Подобную проблему на БД, с которой ничего делать было нельзя, я решил через INDEX REBUILD для тех индексов, у которых был очень низкий fill factor.


Думаю, вы имеете внутреннюю (aka физическую) фрагментацию, так же известную как "заполненность страниц". Она имеет очень отдаленное отношение в fillfactor-у

Ну и для любого ребилда требуется дополнительное место в БД. Причем как минимум по размеру индекса после перестроения.
...
Рейтинг: 0 / 0
26.05.2021, 15:49
    #40073192
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Спасибо за ответы.
В целом база что-то типа логов где инфа со временем устаревает и самую старую можно безболезненно удалять. Что я собственно и делаю периодически, а тут так получилось что заполнилась на 100%.
На будущее создал ненужную таблицу на 30 Мб мусора, при необходимости удалю и будет место.

Но хотелось бы найти способ выхода из уже сложившейся ситуации.

Вопрос порешался, но я не понял почему не работало так
Код: sql
1.
2.
3.
4.
declare @min_id int
select @min_id = min(Id) from MyTable

delete from MyTable where Id < @min_id+100


а так работало
Код: sql
1.
delete from MyTable where Id in (@min_id, @min_id+1, @min_id+2 ... @min_id+99)


по сути это одно и тоже
...
Рейтинг: 0 / 0
26.05.2021, 16:03
    #40073198
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T
Спасибо за ответы.
В целом база что-то типа логов где инфа со временем устаревает и самую старую можно безболезненно удалять. Что я собственно и делаю периодически, а тут так получилось что заполнилась на 100%.
На будущее создал ненужную таблицу на 30 Мб мусора, при необходимости удалю и будет место.

Но хотелось бы найти способ выхода из уже сложившейся ситуации.

Вопрос порешался, но я не понял почему не работало так
Код: sql
1.
2.
3.
4.
declare @min_id int
select @min_id = min(Id) from MyTable

delete from MyTable where Id < @min_id+100


а так работало
Код: sql
1.
delete from MyTable where Id in (@min_id, @min_id+1, @min_id+2 ... @min_id+99)


по сути это одно и тоже


а к таблице в это время непрерывно сыпались запросы?
...
Рейтинг: 0 / 0
26.05.2021, 16:09
    #40073200
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Если вы бесплатно пропатчите ваш экспресс то сможете включить секционирование (partitioning) удалять старые данные будет веселее
...
Рейтинг: 0 / 0
26.05.2021, 16:15
    #40073202
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление из переполненной MSSQL Express
Dima T

Но хотелось бы найти способ выхода из уже сложившейся ситуации.


Самый простой способ, это написать процедуру удаления старых данных. И запускать её периодически джобом. Если удалять будете по критерию даты, то лучше иметь по данному полю индекс.


Dima T
Вопрос порешался, но я не понял почему не работало так
Код: sql
1.
2.
3.
4.
declare @min_id int
select @min_id = min(Id) from MyTable

delete from MyTable where Id < @min_id+100


а так работало
Код: sql
1.
delete from MyTable where Id in (@min_id, @min_id+1, @min_id+2 ... @min_id+99)


по сути это одно и тоже


Ну раз не работает в одном случае, то очевидно, что это не одно и тоже. Выполните оба запроса на живой теперь базе и сравните планы выполнения.

Можно даже без удаления, селекты с такими параметрами сделайте.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление из переполненной MSSQL Express / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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