我检查了我的大数据库,并运行了5或7次收缩任务。我有大约11 GB的自由空间。此DB用于脱机报告操作。以前,当我们创建一个报告时,它增长了大约2或3GB(这也很奇怪,但大约有600万行CDR日志导入和处理),但我们最后一次尝试。即使空闲空间约为11 GB。无法生成报告。磁盘空间意外地为空。
因此,进行一些搜索,并查看一些建议,以检查索引。根据索引碎片,可能存在一些磁盘空间问题。
首先,索引碎片是否会导致磁盘空间的无效使用?第二,如果我进行索引重组或重建,会发生什么情况?当然,DB崩溃的风险总是存在,但它会对DB造成危害吗?
发布于 2011-04-28 10:56:10
有两种不同类型的碎片需要担心:物理碎片和逻辑碎片。物理碎片意味着存储索引的文件在文件系统级别上是分段的。逻辑碎片表示在索引中插入或更新数据时出现了分页现象。顺便说一句,如果(当)您的数据库文件被迫增长以容纳更多的数据,并且增长所需的空间与现有的数据文件不毗连,那么收缩数据库文件最终将导致物理碎片。此外,重新组织和重建索引,除非在tempdb中执行排序,否则很可能会导致包含索引的文件上的增长。这可能进一步加剧物理碎裂问题。这就是为什么缩小数据文件几乎从来都不是一个好主意的原因;它们的增长是有原因的,它们只会再次增长,当它们这样做时,它们将导致物理碎片。
不幸的是,我不能回答你的第一个问题。我假设逻辑索引碎片不会在IO级别造成问题。但是,由于文件系统碎片,物理碎片将表现为随机读取次数的增加。
至于你的第二个问题,索引维护不应该引起任何问题。事实上,您应该已经将索引维护作为日常维护的一部分来执行。需要注意的一件重要事情是,索引重建隐式地更新了索引统计信息,并进行了全面扫描。但是,索引重组没有。作为索引维护的一部分,我显式地对重新组织的索引执行完整的扫描统计更新,而不是重新构建。
最后,我怀疑您的问题是由索引引起的。听起来,在运行此报告之前,您正在将大量数据加载到暂存表或临时表中。如果要加载到暂存表中,则可能可以在另一个存储卷上将暂存表移动到它自己的文件组。如果要加载到临时表中,则可能会遇到运行空间不足的tempdb。无论哪种方式,似乎您都需要额外的存储,或者需要在不同的存储介质上为您的暂存表添加一个新的文件组。
希望这个答案(诚然太长)有帮助!
哑光
发布于 2011-04-27 06:41:56
我不能回答第一个问题,但第二个问题是不,重新组织或重建索引不会(不应该)对数据库有害。我每周重新组织一次索引。重新组织将使索引保持灵活,重新构建删除它们,然后重新创建它们,这需要SQL服务器花费相当多的时间和精力。
https://dba.stackexchange.com/questions/2385
复制相似问题