当前位置: 首页 > 科技观察

SQLServer数据库缩容知识笔记

时间:2023-03-17 13:43:15 科技观察

1。为什么需要收缩数据库?SQLServer数据库采用预分配空间的方式创建数据库的数据文件或日志文件。占用20MB的空间,会造成磁盘存储空间的浪费。数据库中的每个文件都可以通过数据库收缩技术进行收缩,已经分配但未使用的页面可以被删除。从而节省了服务器的存储成本。2.官方对数据库收缩原理的解释:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用空间来恢复空间。在文件末尾创建足够的可用空间后,可以释放文件末尾的数据页并将其返回到文件系统。3.数据库收缩的限制和限制收缩的数据库不能小于最初创建数据库时指定的大小。或者使用文件大小更改操作(如DBCCSHRINKFILE)设置的最后一个显式大小。例如:如果最初创建的数据库大小为10MB,后来增长到100MB,即使删除了数据库中的所有数据,也只能将数据库缩小到最小10MB。您不能在备份时收缩数据库。反之,在数据库缩容的时候不能备份数据库。4.缩小数据库的方法4.1缩小数据库DBCCSHRINKDATABASE介绍:缩小指定数据库中数据文件的大小。语法格式:DBCCSHRINKDATABASE(database_name[,target_percent][,{NOTRUNCATE|TRUNCATEONLY}])参数说明:database_name:为待缩容的数据库名target_percent:为缩容后数据库文件中所需剩余空闲空间的百分比收缩。NOTRUNCATE:导致释放的文件空间保留在数据库文件中。如果未指定,释放的文件空间将释放给操作系统。TRUNCATEONLY:将数据文件中任何未使用的空间释放给操作系统,并将文件缩小到最后分配的大小,从而在不移动任何数据的情况下减小文件大小。不会尝试重新定位未分配页面的行。使用TRUNCATEONLY时将忽略target_percentis。4.2收缩数据库文件DBCCSHRINKFILE介绍:收缩当前数据库指定数据或日志文件的大小,或者通过将指定文件中的数据移动到同一文件组中的其他文件来清空文件,允许从中删除文件数据库。文件大小可以缩小到小于创建文件时指定的大小。这会将最小文件大小重置为新值。语法格式:DBCCSHRINKFILE({file_name|file_id}{[,EMPTYFILE]|[[,target_size][,{NOTRUNCATE|TRUNCATEONLY}]]})[WITHNO_INFOMSGS]参数说明:file_name:待收缩文件的逻辑名。file_id:要收缩的文件的标识(ID)号。要获取文件ID,请使用FILE_IDEX系统函数,或查询当前数据库中的sys.database_files目录视图。target_size:文件的大小,以兆字节为单位(以整数表示)。如果未指定,DBCCSHRINKFILE会将文件大小减小到默认文件大小。默认大小是创建文件时指定的大小。注意:可以使用DBCCSHRINKFILEtarget_size减小空文件的默认大小。例如,如果您创建一个10MB的文件,然后在文件仍为空时将该文件缩小为2MB,则默认文件大小将设置为2MB。这仅适用于永远不会包含数据的空文件。EMPTYFILE:将指定文件中的所有数据迁移到同一文件组中的其他文件中。由于数据库引擎不再允许将数据放在空文件中,因此可以使用ALTERDATABASE语句删除文件。NOTRUNCATE:指定或不指定target_percent,将分配的页面从数据文件的末尾移动到文件前面的未分配页面。文件末尾的空闲空间不会返回给操作系统,文件的物理大小也不会改变。因此,当指定NOTRUNCATE时,文件看起来是未收缩的。NOTRUNCATE仅适用于数据文件。日志文件不受影响。TRUNCATEONLY:将文件末尾的所有空闲空间释放给操作系统,但不在文件内执行任何页面移动。数据文件仅缩小到最后分配的范围。如果使用TRUNCATEONLY指定target_size,则忽略此参数。TRUNCATEONLY仅适用于数据文件。WITHNO_INFOMSGS:禁止显示所有信息性消息。5、示例——将TestDB数据库中的TestDB文件大小缩小到20MB。USETestDB;GODBCCSHRINKFILE(TestDB,20);--将减少UserDB用户数据库中数据文件和日志文件的大小,--在数据库中留出10%的空闲空间DBCCSHRINKDATABASE(TestDB,30);--清理数据库日志文件为2MUSEmasterALTERDATABASETestDBSETRECOVERYSIMPLEWITHNO_WAITALTERDATABASETestDBSETRECOVERYSIMPLE--简单模式USETestDBDBCCSCHRINKFILE(N'TestDB_log',2,TRUNCATEONLY)--设置压缩日志大小为2M,可以指定USEmasterALTERDATABASETestDBSETRECOVERYFULLSETTERNO_WAITALSETTA

猜你喜欢