SQL Server 2005 Express пространство, необходимое для создания формулы индекса - PullRequest
0 голосов
/ 08 июля 2011

Какова формула, чтобы определить, сколько места нужно создать для индекса?

ВАЖНО: мы используем sql server express 2005. Таким образом, 4 ГБ - это предел. Отсюда и этот вопрос. Неограниченный Autogrow файлов журнала не вариант. Ниже приведен код t-sql psuedo.

int spaceNeeded = 
  FN_COMPUTE_SPACE_NEEDED_TO_CREATE_UNCLUSTERED_INDEX(MyTableName, MyColumnName)

Это единственная функция, над которой я застрял при кодировании этого хранимого процесса. Я думаю, что я могу справиться со всем ниже с информацией, доступной на MSDN и т. Д.

While(GetDBSpaceAvailable() < spaceNeeded )
{
    purge some data (go thru all tables and delete data logically)
}

create the index we need
CREATE NONCLUSTERED INDEX [IX_NonClustered_MyTable] ON [dbo].[MyTable]
(   [MyColumn] ASC
)

Любые указатели оценены в этом отношении. Надеюсь, что это повторение, но я ничего не мог найти, когда я искал. спасибо

ОБНОВЛЕНИЕ : Решение, которое сработало для меня, использует предложение Аарона. (дополнительные 1.2X сверх того места, которое сейчас занимает индекс). Поэтому в основном я удаляю самые старые данные до тех пор, пока доступное пространство не увеличится в 1,2-1,5 раза сверх текущего размера индекса, указанного в sp_spaceused tablename . Затем создайте индекс.

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Ограничение размера только для базы данных. Рассматривали ли вы размещение некоторых ваших ненужных, статических или, по крайней мере, менее изменчивых данных в отдельной базе данных? Вы можете создать синонимы, чтобы код не осознавал, что некоторые данные находятся в собственном пространстве 4 ГБ. В одном случае вам будет трудно заметить разницу в производительности, разделив ее, самой большой проблемой будет непротиворечивость резервного копирования, поскольку вы будете выполнять резервное копирование данных по отдельности. Но это был бы один из способов избежать ваших требований к пространству индекса.

Кроме того, вместо использования этой старой версии SQL Server 2005 Express, почему бы не перейти на самую последнюю выпущенную версию (SQL Server 2008 R2), где у вас есть еще 6 ГБ для игры (размер базы данных ограничен 10 ГБ вместо 4 гб). Кроме того, вы получаете некоторые новые функции, синтаксис T-SQL и преимущества в производительности.

1 голос
/ 08 июля 2011

Я не думаю, что это возможно знать наверняка.

Это не только индекс, который создается, он также создает b-дерево, используемое для анализа конечных узлов индекса, а также для поддержки статистики.

На оба этих фактора влияет распределение значений данных, селективность и т. Д.

Существуют дополнительные параметры, которые влияют на используемое пространство, например коэффициент заполнения, включенные поля и т. Д.

Также было бы непросто вычислить это значение для полей varchar или nvarchar, так как длина (и, следовательно, используемое пространство) меняется от строки к строке.

Имеет больше смысла просто получить лицензию на SQL Server вместо того, чтобы тратить сотни человеко-часов, которые потребуются, чтобы сделать это точным и справиться с перекодированием, когда неизбежно возникнет проблема.

...