0

找出需要创建多少空间索引的公式是什么?sql server 2005快速空间创建索引公式所需的空间

重要提示:我们使用sql server express 2005.所以4GB是限制。因此,这个问题。 不受限制自动增长日志文件不是一个选项。下面的t-sql伪代码将进一步解释。

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 
) 

任何指针问候。希望这是一个重复,但在我搜索时找不到任何东西。 谢谢

UPDATE:解决方案,为我工作使用亚伦的建议。 (超过指数占据的空间现在再增加1.2倍)。因此,我基本上清除了最旧的数据,直到空间可用空间大于当前索引大小的1.2到1.5倍(由sp_spaceused表名称报告)。然后创建索引。

+0

你说“不受限制的日志文件autogrow不是一个选项。”我不是一个大的Express用户,但是您确定日志文件大小是计算的一部分吗? (我没有运行任何测试,但我确信它不是。)你确定这与你的问题无关吗?运行此操作时是否看到大量的日志使用情况,数据文件扩展或两者? –

+0

感谢Aaron和JNK。我将检查当我尝试在完整或几乎完整的express数据库上创建索引时收到的错误消息。稍后会在这里发布错误。我们在生产中使用Express db来降低成本。逻辑清除旧数据时,它最大。我们有一种情况,我们需要升级我们的快速数据库的某个报告应用程序的索引,那就是背景。 – Gullu

+0

这里是微软用户友好的错误消息:)当我尝试创建索引消息1105,级别17,状态2,行1 无法为数据库'MyDB'中的对象'dbo.SORT临时运行存储:422212493901824'分配空间因为'PRIMARY'文件组已满。 通过删除不需要的文件,删除文件组中的对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。 – Gullu

回答

2

大小限制仅限于每个数据库。你是否考虑过将一些垃圾,静态或至少不稳定的数据放入单独的数据库?您可以创建同义词以使代码不会意识到某些数据位于其自身的4GB空间中。所有在一个实例中,你都很难注意到任何性能差异,最大的问题是备份的一致性,因为你会单独备份数据。但这将是避免索引空间需求的一种方法。

另外,为了不移动到最新发布的版本(SQL Server 2008 R2),而不是使用这个旧版本的SQL Server 2005 Express,那么您可以使用另外6个GB(数据库大小限制为10 GB而不是4 GB)。此外,您还可以获得一些新功能,T-SQL语法和性能优势。

+0

+1另一种解决方法 – JNK

+0

是的。我们正在升级到2008年快车。我很惊讶没有公式或一般准则来计算创建索引所需的空间,给定数据库的当前大小,创建索引的表的大小,创建索引的列和列大小以及可用空间等。 ... – Gullu

+0

重建索引的传统观点是,您现在需要在索引占据的空间之外再增加1.2X。然而,正如JNK指出的那样,这取决于实际使用的数据,填充因子,对索引的更改等因素而有很大差异......所以不,没有魔术数学能够告诉你需要什么,直到你真的需要做它。 –

1

我不认为有可能确定。

这不仅仅是创建的索引,它还会创建一个用于解析索引叶节点的b树,以及支持的统计信息。

这两项因素是由你的数据值,选择性的分布的影响,等等。

存在影响使用类似的填充因子空间的其他选项,包括域等

而且这将是这是一个真正的挑战,不管上述因素如何计算varcharnvarchar字段,因为长度(以及因此使用的空间)逐行变化。

只有获得SQL Server许可证才更有意义,而不是花费数百个工时来准确无误地处理重新编码问题。

+0

+1找出需要多少空间来执行这样的任务的方法是执行任务。根据您需要的空间大小来决定清除多少数据,而不是试图清除您不需要的所有数据。如果你还没有空间,那么你需要扩大或扩大。 –

+0

购买SQL Server许可证!看看他们的价格。忘掉男人时间。如果我们每次销售我们产品的许可证,我们可能会关闭商店,我将不得不返回印度再次成为软件苦力者。 http://www.microsoft.com/sqlserver/2008/en/us/pricing.aspx Google for coolie :-) – Gullu

+0

当你在问题中没有明确表达你正在发布的内容时,很难嘲笑一个建议用软件表达,而不是仅仅使用内部数据库的副本。 –