powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление из переполненной MSSQL Express
25 сообщений из 28, страница 1 из 2
Удаление из переполненной MSSQL Express
    #40071969
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем 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
Удаление из переполненной MSSQL Express
    #40071976
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока так ускорил (по 100 за раз)
Код: sql
1.
delete from ... where Id in (del_id, del_id+1, del_id+2 ... del_id+99)


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

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

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

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

подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данные
вернуть базу на экспресс
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40071992
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Базу в bulk logged перевели?
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40071997
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Удаление из переполненной MSSQL Express
    #40071998
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad подцепить базу к 2016 стандарт/девелопер/энтерпрайз и удалить данныеТогда уже
Перевести базу на экспресс в оффлайн
Скопировать файлы базы (mdf и ldf) на стандарт/девелопер/энтерпрайз
Присоединить и добавить места - расширить файлы
Перевести базу в оффлайн
Перезаписать старые файлы на експресс новыми
Открыть базу
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072051
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
найдите какую-то таблицу, у которой более менее приличный размер, и данные в которой не слишком важны. И сделайте ей truncate.

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

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

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

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

Не понял о чем речь, почитаю.
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072053
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема порешалась удалением по 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
Удаление из переполненной MSSQL Express
    #40072059
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Я за лицензионную чистоту, поэтому экспресс
Дело ваше. Если надумаете посмотрите
https://www.sentryone.com/blog/aaronbertrand/get-developer-edition

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

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

На postgres надо перейти, но все лень и некогда
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072078
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Удаление из переполненной MSSQL Express
    #40072151
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алгоритм действий, в общем, прост.
Копируешь очищаемые таблицы в 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
Удаление из переполненной MSSQL Express
    #40072234
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"легко обходится" не в смысле взламываются, а в смысле не создают таких трудностей, как ограничение по процессорам и памяти. Также стоит упомянуть использование псевдонимов, в совокупности к уже указанным секционированным представлениям.
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072313
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Dorosh
Базу в bulk logged перевели?

Не понял о чем речь, почитаю.
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072384
vadikpavlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, полезная информация
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072724
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Удаление из переполненной MSSQL Express
    #40072820
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некот. случаях перенос таблицы + вьюха на нее не сработает, т.к. приложение может проверять наличие именно конкретной таблицы.
Н-р тот же 1С.
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40072985
RedBird
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

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


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

Ну и для любого ребилда требуется дополнительное место в БД. Причем как минимум по размеру индекса после перестроения.
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40073192
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
Удаление из переполненной MSSQL Express
    #40073198
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Удаление из переполненной MSSQL Express
    #40073200
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы бесплатно пропатчите ваш экспресс то сможете включить секционирование (partitioning) удалять старые данные будет веселее
...
Рейтинг: 0 / 0
Удаление из переполненной MSSQL Express
    #40073202
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление из переполненной MSSQL Express
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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