Как снять ограничения по размеру на базу в 10 Гб?
Доброго времени суток! Появилась такая проблема, база достигла 10 гб, на сколько я понимаю это предельный объём для sql server, из за этого в базу нельзя заносить информацию, как можно решить проблему с ограничениями размера базы?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как снять ограничения доступа к файлам
Доброго времени суток. Помогите пожалуйста. Перед установкой Win7 сделал копию всех данных на.
Как снять ограничения доступа к файлам и папкам?
Проблем произошла после того как я сохранил файлы на накопитель,затем переустановил.
Как снять ограничения на количество одновременных открытых соединений
Переустановил Windows еще вчера и сегодня опять какая-то программа ограничила кол-во одновременных.
Dataframe: ограничения по размеру
Добрый день. Выгружаю данные в датафрейм следующим образом: startDate = dt.datetime(2019,2,10).
Что лучше использовать и как обойти ограничения
Есть Веб приложение (ASP NET MVC), которое досталось на поддержку. Часть по аутентификации использует подключение к базе MS SQL Server Expres.
Основная часть приложения, использует БД My SQL Commynity. Конечно чтобы не тратить деньги никто в организации не хочет вкладываться в нормальную версию MS SQL Server. вопрос (по части MY SQL), есть ли ограничение в MySQL на идентификаторы в базе данных?
Поясню, есть таблица, столбцы int(11) identity 1,1, varchar(255).
Первый столбец автоинкремент. С ним вопрос, у него длина 2147483647, как только достигнут значения в БД такого количества, что произойдет с данными? вставка в БД будет невозможна? или будут перезаписываться? как в данном случае ведет себя MySQL ?
Решения проблемы: использовать BIGINT или UNSIGNED BIGINT, но они тоже конечны ?
Или есть другие способы решения? Если перевести все таблицы в MSSQL Server Express, как лучше обойти ограничение в 10Гб ?
Отслеживать
Denis Ivanov
задан 6 июн 2018 в 15:13
Denis Ivanov Denis Ivanov
243 2 2 серебряных знака 11 11 бронзовых знаков
Есть вариант использовать float или double, но они тоже конечны. Но это ужасная идея использовать эти типы для первичного ключа, а тем более в качестве идентификатора.
6 июн 2018 в 15:24
да не float/double конечно не хотелось бы
6 июн 2018 в 15:26
Стоит также подумать, правильно ли спроектирована БД, если требуется больше 8 байт. А ещё уточнить, сколько по времени будет наполняться таблица с 18446744073709551616 записями.
6 июн 2018 в 15:29
Что это у вас за данные такие, что вам даже bigint не хватает? 🙂
6 июн 2018 в 15:36
float/double нельзя использовать в качестве первичного ключа, т.к. во-первых, значение может искажаться, а, во-вторых, они хранят меньше уникальных значений чем int/bigint соответственно.
QWERTY SQL
Сегодня я хотел бы поговорить о SQL Express, а именно о лимите в 10ГБ на файлы данных. Многие разработчики выбирают эту СУБД для своих проектов. Она имеет достаточно шрокий функционал. Но рано или поздно, они сталкиваются с ограничениями которые не позволяют дальше пользоваться бесплатной версией. Одно из ограничений это лимит на файлы данных. Сегодня я постараюсь ответить на вопрос можно ли как-то обойти это ограничение.
Может использовать только 1 Физический процессор (но все ядра)
Имеет ограничение 10ГБ на файлы данных (начиная с версии SQL Server 2008 R2)
Ограничение касается только фалов данных, но не файлов логов;
Ограничение не распространяется на FileStream.
К примеру у нас в базе имеется таблица dbo.Data следующей структуры, и она занимает в БД более 80% места.
use master; go create database BigDb; go use BigDb; go create table dbo.Data ( Id int , CreatedDate datetime2(0) not null , PlaceHolder char(100) not null , constraint PK_Data primary key clustered (Id) ) -- заполним базу данных данными, чтобы было с чем работать ;with cte ( id ) as ( select 1 union all select id + 1 from cte where id < 500000 ) insert into BigDb.dbo.Data ( Id , CreatedDate , PlaceHolder ) select id , dateadd(minute, id, '20120826') , 'cte data' from cte option ( maxrecursion 0 )
Давайте распределим эту таблицу к примеру на 4 базы. Вообще выбор на сколько частей можно разделить таблицу зависит от баланса между сложностью поддержки мнжества баз, и получаемым в результате объемом хранения. Т.е. не стоит создавать 100 баз данных, потому что их будет сложно поддерживать, да SQL Server будет тормозить (не забывайте про другие ограничения).
Теперь наша задача найти подходящий столбец, по которому возможно было бы разделить данные. Если у вас есть подходящий столбец можно использовать его. Хорошим вариантом был бы какой нибудь тип записи в таблице RecordTypeId, в котором храняться значения от 1-8, тогда можно распределить данные по 8 базам.
В нашем примере у нас такого столбца нет, поэтому нам придется добавить суррогатный тип записи. Итак приступим. Создаем 4 дополнительные базы данных и в них таблицы аналогичной структуры.
use master; go create database BigDb1; create database BigDb2; create database BigDb3; create database BigDb4; go use BigDb1; create table dbo.Data ( Id int , CreatedDate datetime2(0) not null , DB tinyint not null , PlaceHolder char(100) not null , constraint PK_Data primary key clustered (id, DB) , constraint CH_CreatedDate check ( DB = 1 ) ) go use BigDb2; create table dbo.Data ( Id int , CreatedDate datetime2(0) not null , DB tinyint not null , PlaceHolder char(100) not null , constraint PK_Data primary key clustered (id, DB) , constraint CH_CreatedDate check ( DB = 2 ) ) go use BigDb3; create table dbo.Data ( Id int , CreatedDate datetime2(0) not null , DB tinyint not null , PlaceHolder char(100) not null , constraint PK_Data primary key clustered (id, DB) , constraint CH_CreatedDate check ( DB = 3 ) ) go use BigDb4; create table dbo.Data ( Id int , CreatedDate datetime2(0) not null , DB tinyint not null , PlaceHolder char(100) not null , constraint PK_Data primary key clustered (id, DB) , constraint CH_CreatedDate check ( DB = 4 ) ) go
Мы добавили столбец DB tinyint not null - это будет наш сурогатный тип записи (разделитель)
Мы добавили в структуру таблицы ограничение, чтобы в каждой из таблиц мог храниться только определенный тип записи CH_CreatedDate check ( DB = 4 ) например.
use BigDb; create view dbo.vData as select Id, DB, CreatedDate, PlaceHolder from BigDb1.dbo.Data d union all select Id, DB, CreatedDate, PlaceHolder from BigDb2.dbo.Data d union all select Id, DB, CreatedDate, PlaceHolder from BigDb3.dbo.Data d union all select Id, DB, CreatedDate, PlaceHolder from BigDb4.dbo.Data d go
А теперь можно перелить данные через представление.
insert into dbo.vData ( Id, DB, CreatedDate, PlaceHolder ) select d.Id , d.Id % 4 + 1 , d.CreatedDate , d.PlaceHolder from dbo.Data d
Обратите внимание как мы заполняем поле DB, это нам придется делать всегда при вставке данных. Если бы у нас было поле типа записи, нам бы не пришлось этого делать, и данные бы вставлялись как обычно.
Теперь, можно проверить как данные распределились по базам
select * from BigDb1.dbo.Data select * from BigDb2.dbo.Data select * from BigDb3.dbo.Data select * from BigDb4.dbo.Data
Теперь старую таблицу нужно удалить, и работаеть с данными через представление dbo.vData, для простоты можете дать представлению тоже название что имела таблица т.е. dbo.Data.
Хорошо давате теперь поэкспериментируем с типичными запросами к данным, и посмотрим на их планы выполнения.
use BigDb; select * from dbo.vData
| Как видите были просканированы 4 таблицы которые находятся в разных базах, после чего результаты были объеденены |
use BigDb; select * from dbo.vData where id between 100 and 1000
| Тожесамое произошло и здесь, только в место сканирования мы имеем поиск в кластерном индексе |
Также можно ограничивать и используемые базы
use BigDb; select * from dbo.vData where id between 100 and 1000 and DB in ( 1, 3 )
| Тут произведен поиск в кластерных индексах только двух таблиц |
А как насчет не кластерных индексов, они работают? Давайте проверим. Создаем индексы на поле CreatedDate для каждой таблицы.
use BigDb1; create index IDX_Data_CreatedDate on dbo.Data(CreatedDate) go use BigDb2; create index IDX_Data_CreatedDate on dbo.Data(CreatedDate) go use BigDb3; create index IDX_Data_CreatedDate on dbo.Data(CreatedDate) go use BigDb4; create index IDX_Data_CreatedDate on dbo.Data(CreatedDate) go
use BigDb; select Id , DB , CreatedDate , PlaceHolder from dbo.vData where CreatedDate between '20120827' and '20120828'
| Некластерные индексы используютя в плане |
Применив такой подход вы конечно же столкнетесь с дополнительными усилиями по сопровождению ваших данных. Ведь теперь у вас не одна база данных а несколько :). Но тем не менее возможно это поможет вам сэкономить пару лишних баксов.
Как обойти ограничения MS SQL Express? : MS SQL
Есть клиент, у которого в ПО как СУБД используется MS SQL Express. База клиента вот-вот упрется в потолок ограничений экспресс версии. Покупать версию Standard клиент пока не готов. Вопрос: как бы нам поступить, чтобы и овцы были сыты, и волки целы? Помогите советом.
█ 06.11.2014 13:40
подрезать базу.
█ 06.11.2014 13:47
там какой-то хитрый способ был. типа база заполнилась до предела, потом делаешь детач и снова атачишь ее. дальше растет без проблем. работало, по-моему, на 2005 скуле
█ 06.11.2014 14:08
baggio ➤ подрезать базу.
С этого момента чуть более подробно, пожалуйста.
█ 06.11.2014 14:14
sh00r00p ➤ С этого момента чуть более подробно, пожалуйста.
Это, обычно зависит от используемого софта.
Там должна быть функция удаления чего-нибудь старого.
█ 06.11.2014 14:23
Разработчик/поставщик софта на мой вопрос по усечению БД путем удаления устаревших записей ответил отказом, мотивировав тем, что "слишком сложно столько записей удалять связи искать и прочее". Мое самое первое предложение было именно причесать базу, оставив записи максимум годичной давности.
█ 06.11.2014 14:46
у mssql есть такая штука как shrink . типа причесать.
пробовать на тестовом сервере.
█ 06.11.2014 14:47
Она уменьшит размер лога транзакций. Но не уменьшит размера файла с данными.
█ 06.11.2014 15:09
Mtirt ➤ Она уменьшит размер лога транзакций. Но не уменьшит размера файла с данными.
да татьяна права.
http://jfo.su/admin/97.html
я чет сёня точно туплю.
тогда попробовать сделать экспорт\импорт.
возможно пара сотен мегабайт причешется.
█ 06.11.2014 15:13
sh00r00p ➤ Разработчик/поставщик софта на мой вопрос по усечению БД путем удаления устаревших записей ответил отказом, мотивировав тем, что "слишком сложно столько записей удалять связи искать и прочее". Мое самое первое предложение было именно причесать базу, оставив записи максимум годичной давности.
А вручную поудалять документы нельзя? Или остатки поплывут?
Часовой пояс GMT +3, время: 09:37 .
Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.
