sql-server – 何时可以缩小数据库?
我知道缩小是妖怪:它颠倒了页面次序,并导致皮肤癌,数据碎片和环球变暖.列表继承……话虽云云,说我有一个100 GB的数据库,我删除50 GB的数据 – 不是在一张桌子上,而是在数据库范畴内对旧数据举办一样平常修剪,包围90%的数据表 – 这是否组成缩小数据库的恰当用例? 假如没有,从数据库中删除云云高比例的数据后,采纳什么样的法子来整理衡宇?我可以想到两个:重建索引和更新统计.尚有什么? 办理要领永久不会保举重组和紧缩.假如您可以使数据库脱机处事的应用措施,您可以通过在紧缩之前删除全部索引和主/外键束缚来加速历程并镌汰索引碎片(这意味着只有少量数据可以移动数据页面将被洗牌而不是此刻不存在的索引页面,从而加速了历程)然后从头建设全部索引和键. 在缩小之后从头建设索引意味着它们不该该显著碎片化,而且在缩小时代使它们消散意味着重建它们不会在文件中的页面分派中留下很多小的“裂痕”,这也许会在往后引起碎片. 假如可以使应用措施脱机,另一个选项是将全部数据迁徙到具有沟通布局的新数据库.假如您的构建进程是靠得住的,您应该可以或许快速构建该空缺数据库,假如没有从当前数据库建设一个空缺数据库(规复当前数据库的备份,截断/删除表中的全部内容并执行完全紧缩). 您也许仍但愿删除方针中的全部索引并在之后从头建设它们,由于在变动大量索引数据(在这种环境下为100%)时,这可以更有用.要加速复制进程,请将方针数据库的数据文件放在与源差异的物理驱动器上(除非您行使的是SSD,在这种环境下您不必要体谅镌汰磁头移动),您可以移动它们完成后到源位置. 另外,假如将方针建设为新的(而不是通过消隐源的副本)建设它的初始巨细将包括全部当前数据加上几个月的增添 – 这将使数据复制再次更快在整个进程中,它不会一次又一次地分派新的空间. 这也许比行使shrink更好,由于将数据迁徙到新数据库会复制紧缩操纵的预期操纵,但也许会有更少的碎片(这是重组和紧缩的不测效果).紧缩只是从文件末端四面获取块,并将它们放在接近开头的第一个空间中,而不消将相干数据生涯在一路. 我猜疑功效在空间方面也会更有用,由于过后也许会有更少的部门用过的页面.缩小只会移动部门行使的页面,移动数据更有也许导致整页,出格是假如凭证表的聚簇键/索引(表中有一个)的次序插入方针并建设其他索引数据所有迁徙后. 虽然,假如您基础无法使应用措施脱机,只需执行缩小即可,因此假如您确实必要接纳空间,请执行此操纵.按照您的数据,会见模式,常用事变集巨细,处事用具有几多RAM等等,特另外内部碎片最终也许并不那么重要. 对付复制操纵,SSIS或根基T-SQL也可以正常事变(SSIS选项也许服从较低,但往后也许更轻易维护).假如您在末了处建设FK相关以及索引,则可以在任何一种环境下为每个表执行简朴的“复制”.虽然,对付一次性,缩小重组也许也很好但我只是想恐吓人们从不思量常常紧缩! (我知道人们天天布置他们). (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |