服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

SQL数据库物理文件碎片

我知道,作为一名DBA,我真的需要担心三种分裂: 索引 SQL数据文件中的碎片,包括聚簇索引(表)碎片。 使用DBCC SHOWCONTIG(在SQL 2000中)或sys.dm_ db_ index_ physical_ stats(在2005+中)来识别此问题。 SQL日志文件中的VLF碎片 。 运行DBCC LOGINFO查看每个SQL日志文件中有多less个VLF。 硬盘上的数据库文件的物理文件碎片。 通过使用Windows中的“磁盘碎片整理程序”实用程序进行诊断。 (由这个优秀的博客文章启发) 很多关注索引碎片(请参阅Paul Randall的优秀Serverfault答案 ),所以这不是我的问题的焦点。 我知道当数据库最初是通过规划一个合理的预期数据文件和日志大小来防止物理碎片(和VLF碎片),因为这种碎片最经常发生在频繁的增长和缩小,但我有一些关于如何修复物理碎片一旦被识别: 首先,企业级SAN上的物理碎片甚至是相关的? 我可以/应该在SAN驱动器上使用Windows碎片整理程序,还是应该使用内部碎片整理实用程序? 从Windows工具获得的碎片分析是否在SAN驱动器上运行时更准确 ? SQL性能上的物理碎片有多大? (让我们假设一个内部驱动器arrays,等待前面的问题的结果。)这是一个比内部索引碎片更大的交易? 或者是真的是一个类似的问题(驱动器必须做随机读取,而不是顺序读取) 碎片整理(或重build)索引浪费时间,如果驱动器物理碎片? 在我解决其他问题之前,我需要修复吗? 在生产SQL框中修复物理文件碎片的最好方法是什么? 我知道我可以closuresSQL服务并运行Windows Defrag,但是我也听说过一种技术,在这种技术中,您可以执行完整备份,删除数据库,然后从备份恢复到空驱动器。 这是后者的技术推荐? 从这样的备份还原还从头开始build立索引,消除内部索引碎片? 还是只是将页面顺序返回到与备份时相同? (如果有问题的话,我们使用Quest Lightspeed压缩备份。) 更新 :到目前为止,是否对SAN驱动器进行碎片整理(否)以及索引碎片整理是否对物理碎片驱动器仍然值得(YES)的回答是很好的答案。 任何人都在考虑权衡实际进行碎片整理的最佳方法吗? 或者估计你想要花费的时间来碎片化一个大型的驱动器,比如500GB左右? 相关的,显然,因为那是我的SQL服务器将closures的时间! 另外,如果有人对SQL性能改进有任何轶事的信息,那么通过修复物理碎片就可以提高性能,那也是很好的。 迈克的博客文章谈到揭露这个问题,但没有具体说明它做了什么样的改进。