sqlserver收缩数据库
sqlserver收缩数据库为什么要收缩数据库SQL Server 2000采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了100MB,而实际上只占用了50MB空间,这样就会造成存储空间的浪费。
为此,SQL Server 2000提供了收缩数据库的功能,允许对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。
不能将整个数据库收缩到比其原始大小还要小。
因此,如果数据库创建时的大小为 10 MB,后来增长到100MB,则该数据库最小能够收缩到10MB(假定已经删除该数据库中所有数据)。
不能在备份数据库时收缩数据库,也不能在收缩数据库时创建或备份数据库。
4.8.2 什么是自动收缩和手动收缩SQL Server 2000支持对数据库实行自动收缩和手工收缩。
在如图4.38所示的数据库属性的【选项】选项卡中选择【自动收缩】复选框将实现自动收缩。
SQL Server 2000服务器每30分钟检查数据库的空间使用情况。
如果发现大量闲置的空间,就会自动缩小数据库的文件大小。
图4.38 设置自动收缩功能利用企业管理器或DBCC SHRINKDATABASE 和 DBCC SHRINKFILE 语句可以完成手工收缩操作。
4.8.3 收缩数据文件和日志文件有什么不同不论是收缩数据文件还是日志文件,都会确实减少物理文件的大小,两者不同之处如下。
数据文件可以作为文件组或单独地进行手工收缩。
日志文件收缩分别考虑每个文件,基于整个日志文件进行收缩。
日志文件的收缩将删除非活动的VLF。
4.8.4 收缩操作是如何执行的文件的收缩操作始终从文件末端开始反向进行。
例如,如果要将一个5GB 的文件收缩到4GB,则SQL Server 2000将从文件的最后一个1GB开始释放尽可能多的空间。
如果文件中被释放的部分包含使用过的页面,则SQL Server 2000会将这些页面重新定位到保留的部分。
只能将数据库收缩到没有剩余的可用空间为止。
例如,某个5GB的数据库已经有4GB的数据,如果指定将数据库收缩到3GB,则实际上只会释放1GB的空间。
如果收缩操作无法收缩日志文件中的所有空间,系统将反馈信息,指出必须执行什么操作以释放更多符合条件的空间。
4.8.5 收缩数据库的案例(1)在【企业管理器】的管理目标导航【树】下选择刚建立的数据库mydatabase单击鼠标右键,在出现的快捷菜单中选择【所有任务】/【收缩数据库】选项。
(2)出现如图4.39所示的【收缩数据库】界面。
q 在【数据库大小】区域可以查看【已经分配的空间】和【可用的空间】,这是决定是否进行收缩的重要依据。
q 在【收缩操作】区域的【收缩后文件中的最大可用空间】文本框中设置收缩数据库后数据文件中的最大可用空间百分比。
选择【在收缩前将页移到文件起始位置】指定在收缩数据库前将页移到文件的起始位置,选择该选项可能会影响性能。
q 在【调度】区域选择【根据调度收缩数据库】复选框,单击按钮可以设置自动收缩数据库的时间。
图4.39 【收缩数据库】界面图4.40 【收缩文件】界面(3)在图4.39中的【收缩文件】区域单击‘收缩文件’按钮出现如图4.40所示的【收缩文件】界面,可以对数据文件或日志文件设置更精细的收缩策略。
在【数据库文件】下拉列表框中可以选择要收缩的数据文件或者日志文件。
在【收缩操作】区域可以设置文件的具体收缩操作,包括是否截断、压缩页以及收缩后的文件大小等。
在【延迟收缩】区域可以设置自动收缩的时间。
完成设置后单击按钮。
收缩数据库可以删除已经分配但尚未使用的页,从而更好地利用存储空间。
与收缩相对应的是扩充数据库,即修改数据库的属性即可。
收缩后的可用空间应该留有一定的空闲空间,这样当数据发生更改时不必额外分配空间。
2:1、用BACKUP LOG database WITH NO_LOG清除日志把数据库属性中的故障还原模型改为“简单”可以大大减慢日志增长的速度。
如果把还原模型调到简单,这样就不支持时间点还原了,但是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全用BACKUP LOG database WITH NO_LOG命名后,会截断不活动日志,不减小物理日志文件的大小,但逻辑日志会减小,收缩数据库后会把不活动虚拟日志删除来释放空间,不会损坏数据。
如果日志被截断并收缩数据库后,就不能直接用最近的一个全库备份做时间点还原,建议立即备份数据库,以防万一。
2、sql server运行中,是否能删除主数据库事务日志文件步骤如下:(1)、分离数据库企业管理器--数据库--右击你要删除日志的数据库--所有任务--分离数据库(2)、然后删除日志文件(3)、然后再附加数据库企业管理器--数据库--右击数据库--所有任务--附加数据库这时候只附加。
mdf就可以了。
3、压缩SQL数据库及日志的详细方法SQL Server 2000基础教程——压缩数据库数据库在使用一段时间后,时常会出现因数据删除而造成数据库中空闲空间太多的情况,这时就需要减少分配给数据库文件和事务日志文件的磁盘空间,以免浪费磁盘空间。
当数据库中没有数据时,可以修改数据库文件属性直接改变其占用空间,但当数据库中有数据时,这样做会破坏数据库中的数据,因此需要使用压缩的方式来缩减数据库空间。
可以在数据库属性选项中选择“Auto shrink”选项,让系统自动压缩数据库,也可以用人工的方法来压缩。
人工压缩数据库有以下两种方式:1、用Enterprise Manager 压缩数据库在Enterprise Manager 中在所要压缩的数据库上单击右键,从快捷菜单中的“所有任务(All Tasks)”中选择“Shrink Database(压缩数据库)”选项,就会出现如图6-10所示的对话框。
可以在图6-10所示的对话框中选择数据库的压缩方式,也可以选择使用压缩计划或压缩单个文件单击图6-10中的“Files”按钮,会出现如图6-11所示的压缩数据库文件对话框,可以针对每个数据库文件进行不同的压缩设置。
单击图6-10中的“Change” 按钮,会出现如图6-12所示的压缩计划编辑对话框,可以指定压缩计划的执行方式。
单击图6-12中的“Change” 按钮,会出现如图6-13所示的循环工作计划编辑对话框,可以编辑计划执行的周期或时间点。
设置完成后单击“OK” 按钮就开始压缩数据库,在压缩结束后会显示一个压缩情况信息框。
2、用Transact-SQL 命令压缩数据库可以使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令来压缩数据库。
其中DBCC SHRINKDATABASE 命令对数据库进行压缩,DBCC SHRINKFILE 命令对数据库中指定的文件进行压缩。
(1)DBCC SHRINKDATABASEDBCC SHRINKDATABASE 命令语法如下:DBCC SHRINKDATABASE (database_name [, target_percent][, {NOTRUNCATE | TRUNCATEONLY}] )各参数说明如下:·target_percent 指定将数据库压缩后,未使用的空间占数据库大小的百分之几。
如果指定的百分比过大,超过了压缩前未使用空间所占的比例,则数据库不会被压缩。
并且压缩后的数据库不能比数据库初始设定的容量小。
·NOTRUECATE将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统。
如果不选择此选项,则剩余的空间返还给操作系统。
·TRUNCATEONLY将数据库缩减后剩余的空间返还给操作系统。
使用此命令时SQL Server 将文件缩减到最后一个文件分配,区域但不移动任何数据文件。
选择此项后,target_percent 选项就无效了。
例6-14:压缩数据库mytest 的未使用空间为数据库大小的20%。
dbcc shrinkdatabase (mytest, 20)运行结果如下:DBCC execution completed. If DBCC printed errormessages, contact your system administrator.(2) DBCC SHRINKFILEDBCC SHRINKFILE 命令压缩当前数据库中的文件。
其语法如下:DBCC SHRINKFILE ( {file_name|file_id }{ [, target_size]|[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )各参数说明如下:·file_id指定要压缩的文件的鉴别号(Identification number,即ID)。
文件的ID 号可以通过FILE_ID()函数或如本章前面所讲述的Sp_helpdb 系统存储过程来得到。
·target_size指定文件压缩后的大小。
以MB 为单位。
如果不指定此选项,SQL Server 就会尽最大可能地缩减文件。
·EMPTYFILE指明此文件不再使用,将移动所有在此文件中的数据到同一文件组中的其它文件中去。
执行带此参数的命令后,此文件就可以用ALTER DATABASE命令来删除了。
其余参数NOTRUNCATE 和TRUNCATEONLY 与DBCC SHRINKDATABASE命令中的含义相同。
例6-15: 压缩数据库mydb 中的数据库文件mydb_data2 的大小到1MB。
use mydb dbcc shrinkfile (mydb_data2, 1)企业管理器里面的方法:1、打开企业管理器2、打开要处理的数据库3、点击最上面菜单>工具>SQL查询分析器,打开SQL查询分析器4、在输入窗口里面输入:Code:DUMP TRANSACTION[数据库名]WITH NO_LOGBACKUP LOG[数据库名]WITH NO_LOGDBCC SHRINKDATABASE([数据库名])点击绿色的小三角(或按F5)执行查询,等状态栏提示处理完成即可!程序里面的方法:压缩数据库日志--1.清空日志exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')--2.截断事务日志:exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')--3.收缩数据库文件(如果不压缩,数据库的文件不会减小exec('DBCC SHRINKDATABASE(['+@dbname+'])')4、减小日志的方法:一、用如下步做了:1、DUMP TRANSACTION庫名WITH no_log2、dbcc shrinkfile(logfilename)3、收縮數據庫4、設定自動收縮。
sqlserver数据库收缩步骤
sqlserver数据库收缩步骤数据库收缩是一种优化数据库性能和空间利用的操作,它通过重新组织数据文件和索引,从而减少磁盘空间的使用,提高查询和存储性能。
以下是SQL Server数据库收缩的一般步骤。
步骤1:备份数据库在进行任何数据库操作之前,备份数据库是一个必要的安全措施,以防止数据丢失或操作错误导致的问题。
使用SQL Server Management Studio(SSMS)或命令行工具(如SQLCMD或PowerShell)执行完整数据库备份。
步骤2:索引分析在收缩数据库之前,需要对数据库进行索引分析,以确定是否存在不必要的或重复的索引。
可以使用SQL Server Management Studio的“索引优化向导”或自定义查询来执行索引分析。
步骤3:重建和重新组织索引根据索引分析的结果,可以选择重建或重新组织索引。
重建索引将需要更多的时间和磁盘空间,但可以最大程度地提高查询性能。
重新组织索引需要较少的时间和磁盘空间,但性能提升的效果较弱。
使用以下命令执行索引重建:```sqlALTERINDEX[索引名]ON[表名]REBUILD```使用以下命令执行索引重新组织:```sqlALTERINDEX[索引名]ON[表名]REORGANIZE```步骤4:收缩数据库文件对于在线进行的数据库,可以使用以下命令来缩小数据库文件:```sqlDBCCSHRINKDATABASE([数据库名])```对于离线的数据库,可以使用以下命令来缩小数据库文件:```sqlDBCCSHRINKFILE([数据库文件名])```收缩数据库文件可能需要一段时间,具体取决于数据库的大小和硬件性能。
在收缩数据库文件之前,可以使用以下命令来查看文件的当前大小:```sqlSELECT name, size/128.0 AS CurrentSizeMBFROM sys.database_files;```步骤5:重新索引在完成数据库文件的收缩后,由于数据文件的重新组织和索引重建,索引可能会变得非常稀疏。
SQLServer数据库无法收缩问题
MS SQL Server数据库无法收缩的处理办法一. 数据库数据文件无法收缩的情况在MS SQL Server 2008中有一个叫做“张金玉”的数据库。
想把他收缩一下。
进入“SQL Server Management Studio”,使用“数据库”→“张金玉”鼠标右键菜单中的“任务”→“收缩”→“文件”菜单项,弹出一个“收缩文件”窗口,如下图。
在这个窗口中可以看到“当前分配的空间”为31236.00MB,“可用空间”为23341.81MB (74%)。
可以缩小很多。
选中窗口中的“在释放未使用的空间前重新组织页”单选按钮,并将那个“将文件收缩到”框框里面的值设为0(此处设为0在运行中会自动填入这个框框右边的最小值—7825)。
点击“确定”按钮,稍等片刻,这个窗口自动关闭,表示已经收缩完毕。
但是,再次打开这个窗口看看,“当前分配的空间”仍然是31236.00MB。
换句话说,这个数据库实际上并没有收缩。
换用其它的收缩方法,统统不能收缩。
鉴于此种情况,考虑数据库本身可能存在错误。
试用“DBCC CHECKDB”检查是否有误。
在“SQL Server Management Studio”中新建一个查询选项卡,先指定数据库名称为“张金玉”,然后执行“DBCC CHECKDB”。
执行期间服务器的硬盘灯常亮。
执行完毕后报告有错。
在报告开头附近就有两行红字如下:张金玉的DBCC 结果。
Service Broker 消息9675,状态1: 已分析的消息类型: 14。
Service Broker 消息9676,状态1: 已分析的服务约定: 6。
Service Broker 消息9667,状态1: 已分析的服务: 3。
Service Broker 消息9668,状态1: 已分析的服务队列: 3。
Service Broker 消息9669,状态1: 已分析的会话端点: 0。
Service Broker 消息9674,状态1: 已分析的会话组: 0。
sqlserver收缩数据库
sqlserver收缩数据库为什么要收缩数据库SQL Server 2000采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了100MB,而实际上只占用了50MB空间,这样就会造成存储空间的浪费。
为此,SQL Server 2000提供了收缩数据库的功能,允许对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。
不能将整个数据库收缩到比其原始大小还要小。
因此,如果数据库创建时的大小为 10 MB,后来增长到100MB,则该数据库最小能够收缩到10MB(假定已经删除该数据库中所有数据)。
不能在备份数据库时收缩数据库,也不能在收缩数据库时创建或备份数据库。
4.8.2 什么是自动收缩和手动收缩SQL Server 2000支持对数据库实行自动收缩和手工收缩。
在如图4.38所示的数据库属性的【选项】选项卡中选择【自动收缩】复选框将实现自动收缩。
SQL Server 2000服务器每30分钟检查数据库的空间使用情况。
如果发现大量闲置的空间,就会自动缩小数据库的文件大小。
图4.38 设置自动收缩功能利用企业管理器或DBCC SHRINKDATABASE 和 DBCC SHRINKFILE 语句可以完成手工收缩操作。
4.8.3 收缩数据文件和日志文件有什么不同不论是收缩数据文件还是日志文件,都会确实减少物理文件的大小,两者不同之处如下。
数据文件可以作为文件组或单独地进行手工收缩。
日志文件收缩分别考虑每个文件,基于整个日志文件进行收缩。
日志文件的收缩将删除非活动的VLF。
4.8.4 收缩操作是如何执行的文件的收缩操作始终从文件末端开始反向进行。
例如,如果要将一个5GB 的文件收缩到4GB,则SQL Server 2000将从文件的最后一个1GB开始释放尽可能多的空间。
如果文件中被释放的部分包含使用过的页面,则SQL Server 2000会将这些页面重新定位到保留的部分。
只能将数据库收缩到没有剩余的可用空间为止。
SqlServer数据库的备份、还原、收缩、自动定时备份相关知识
SqlServer数据库的备份、还原、收缩、自动定时备份相关知识网软志成开发的系列网站系统,如交友婚恋网站系统,分类信息系统,地方门户系统,多用户商城系统,人才招聘网站系统等都是采用的大型数据库mssql,日常管理维护中对数据库要做相关的维护,如对正在使用的数据库文件进行备份,还原.bak格式的数据库备份文件,数据库文件大了得对数据库进行收缩操作,为了数据的安全,可对数据库设置自动定时备份。
下面分项详细介绍。
一、备份数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server2、SQL Server组-->双击打开你的服务器-->双击打开数据库目录3、选择你的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择备份数据库4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份二、还原数据库1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server2、SQL Server组-->双击打开你的服务器-->点图标栏的新建数据库图标,新建数据库的名字自行取3、点击新建好的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择恢复数据库4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。
SQLServer2000收缩数据库文件至最小的空间会影响数据库性能此
SQL Server 2000收缩数据库文件至最小的空间会影响数据库性能此问题在项目得到证实,数据文件从90G收缩至70G后,用户的查询体验速度受到严重影响,特别是数据量较大、查询范围大的数据表。
因此建议在磁盘空间请允许的情况下不要收缩数据库文件,如果磁盘空间有限,需要收缩,则收缩数据库后,一定要对数据库表重建索引。
处理步骤:一、查看数据表索引碎片情况命令:DBCC SHOWCONTIG(TableName)参数说明:扫描页数:如果你知道行的近似尺寸和表或索引里的行数,那么你可以估计出索引里的页数。
看看扫描页数,如果明显比你估计的页数要高,说明存在内部碎片。
扫描扩展盘区数:用扫描页数除以8,四舍五入到下一个最高值。
该值应该和DBCC SHOWCONTIG返回的扫描扩展盘区数一致。
如果DBCC SHOWCONTIG返回的数高,说明存在外部碎片。
碎片的严重程度依赖于刚才显示的值比估计值高多少。
扩展盘区开关数:该数应该等于扫描扩展盘区数减1。
高了则说明有外部碎片。
每个扩展盘区上的平均页数:该数是扫描页数除以扫描扩展盘区数,一般是8。
小于8说明有外部碎片。
扫描密度[最佳值:实际值]:DBCC SHOWCONTIG返回最有用的一个百分比。
这是扩展盘区的最佳值和实际值的比率。
该百分比应该尽可能靠近100%。
低了则说明有外部碎片。
逻辑扫描碎片:无序页的百分比。
该百分比应该在0%到10%之间,高了则说明有外部碎片。
扩展盘区扫描碎片:无序扩展盘区在扫描索引叶级页中所占的百分比。
该百分比应该是0%,高了则说明有外部碎片。
每页上的平均可用字节数:所扫描的页上的平均可用字节数。
越高说明有内部碎片,不过在你用这个数字决定是否有内部碎片之前,应该考虑fill factor(填充因子)。
平均页密度(完整):每页上的平均可用字节数的百分比的相反数。
低的百分比说明有内部碎片。
二、重建索引命令DBCC DBREINDEX用法语法:DBCC DBREINDEX( [ 'database.owner.table_name'[ , index_name[ , fillfactor ]]])参数说明:'database.owner.table_name'是要重建其指定的索引的表名。
sqlserver收缩数据库文件
SQL SERVER 数据库日志已满,如何收缩数据库日志
如何收缩数据库日志
3.右键-任务-收缩-数据库
/*****************************/
转载:https:///dqs78833488/article/details/51322000
在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下面的SQL命令进行快速清除数据库中的事 务日志,命令如下: - 第一步:清空日志
在sqlserver中经常遇到事务日志变大的情况除了将数据库设置为自动Байду номын сангаас缩外还可以使用下面的sql命令进行快速清除数据库中的事务日志命令如下
sqlserver收 缩 数 据 库 文 件
/******************************/
1.右键-属性-选项-简单模式
2.右键-任务-收缩-文件
DUMP TRANSACTION databasename WITH NO_LOG
-- 第二步:截断事务日志
BACKUP LOG databasename WITH NO_LOG
-- 第三步:收缩数据库
DBCC SHRINKDATABASE(databasename)
需要说明几点: 1. 上面的SQL命令需要按照顺序执行; 2. 执行上面的命令通常比直接使用右键菜单中的“收缩”命令要快很多
sqlserver数据库收缩步骤
sqlserver数据库收缩步骤收缩数据库是SQL Server数据库管理中常见的任务之一,它有助于释放未使用的空间并提高数据库性能。
以下是收缩数据库的步骤:步骤一:评估数据库在开始收缩数据库之前,首先需要评估数据库的大小和使用情况。
可以使用以下脚本查询数据库的大小:```USE [master]GOSELECTname AS 'Database Name',size*8/1024 AS 'Size (MB)'FROMsys.master_filesWHEREtype = 0```通过这个脚本可以查看数据库的大小,并根据需要确定是否需要收缩。
步骤二:备份数据库在收缩数据库之前,务必先备份数据库。
这样可以确保在出现任何问题时可以还原数据库。
可以使用SQL Server Management Studio(SSMS)或以下TSQL语句进行备份:```BACKUP DATABASE [DatabaseName]TO DISK = 'C:\Backup\DatabaseName.bak'```步骤三:索引优化数据库中的索引也会占用一定的空间,因此可以优化索引以减小数据库的大小。
可以使用以下脚本重新组织或重建索引:```USE [DatabaseName]GOALTER INDEX [IndexName] ON [TableName] REORGANIZE``````USE [DatabaseName]GOALTER INDEX [IndexName] ON [TableName] REBUILD```通过重新组织或重建索引,可以删除空间碎片并提高数据库的性能。
步骤四:收缩数据库文件在SQL Server中,可以使用DBCC SHRINKDATABASE命令来收缩数据库文件。
该命令有两个参数,其中第一个参数是数据库名称,第二个参数是目标百分比。
以下是收缩数据库文件的示例:```DBCC SHRINKDATABASE ('DatabaseName', 10)```以上命令将收缩数据库文件到其当前大小的10%。
sqlserver数据库收缩步骤
sqlserver数据库收缩步骤数据库收缩是指将数据库中的空间回收和重新组织,以便提高性能和节省磁盘空间。
以下是SQL Server数据库收缩的步骤:1.首先,运行`DBCCSHRINKDATABASE`命令来收缩整个数据库。
该命令将尝试压缩数据库文件并释放未使用的空间。
语法如下:```DBCC SHRINKDATABASE (database_name)```其中,`database_name`是要收缩的数据库的名称。
2.默认情况下,`DBCCSHRINKDATABASE`将尝试将数据库缩小到其实际大小。
但是,如果你希望将数据库缩小到指定的大小,可以使用`TARGET_SIZE`选项。
例如,要将数据库缩小到100MB大小,可以执行以下命令:```DBCC SHRINKDATABASE (database_name, 100)```3.收缩数据库过程可能会造成数据库锁定,因此在收缩数据库之前应考虑该数据库的使用情况。
如果数据库正在被频繁使用,可能需要在低峰时间进行收缩操作。
4.收缩数据库期间,可以将进度信息输出到消息窗口。
要启用此选项,可以使用`WITHNO_INFOMSGS`选项。
例如:DBCC SHRINKDATABASE (database_name) WITH NO_INFOMSGS```5.如果只需要收缩特定的表或索引,可以使用`DBCCSHRINKFILE`命令。
该命令用于收缩特定文件(数据文件或日志文件),而不是整个数据库。
语法如下:```DBCC SHRINKFILE (file_name, target_size)```6. `DBCC SHRINKFILE`命令中的`file_name`参数可以指定要收缩的文件的名称。
可以通过查询`sys.database_files`系统视图或使用SQL Server Management Studio(SSMS)查看文件名称。
7.使用`DBCCSHRINKFILE`命令收缩数据库文件时,可以将文件缩小到其实际大小,或者指定目标大小。
关于sqlserver收缩数据库(引起的问题、可以半途停止吗)
关于sqlserver收缩数据库(引起的问题、可以半途停⽌吗)sqlserver⾃动收缩数据库引起⼤量阻塞最近遇到⼀个数据库设置了⾃动收缩,收缩期间引起⼤量阻塞的问题,记录下看到的⽂章学习什么是⾃动收缩?随着数据量的增加数据库的设备⽂件(MDF\LDF)会不断增长,当数据库中的某些数据删除,数据库设备⽂件的⼤⼩并不会随着数据量的减少⽽减少,数据库设备需要占⽤的磁盘空间就没那么⼤了,这时候⾃动收缩就可以释放出磁盘空间,主要直观体现在数据库设备⽂件的⼤⼩上,避免资源的浪费.在什么条件下会触发?在开启⾃动收缩选项的情况下,SQL Server定期会检查⽂件使⽤情况。
如果空闲空间⼤于25%,SQL Server就会⾃动运⾏⾃动收缩数据库⽂件的动作。
例如:数据迁移删除⼤量数据时,空闲空间⼤于25%时,会触发⾃动收缩功能。
带来的危害(⾃动收缩和⼿动收缩)?对于⼀个磁盘空间很紧张的系统,这个设置⽆疑是有帮助的。
但是从数据库⾃⾝的健康和性能考虑,这个设置并不建议多⽤。
这是因为:1、数据⽂件收缩导致了索引的完全碎⽚化,索引的效率⼤⼤降低,严重影响性能。
2、数据⽂件的收缩同样产⽣了⼤量的I/O操作,耗费⼤量的CPU资源,性能下降。
3、在业务⾼峰期的时候可能会造成⼤量的阻塞。
关于收缩的建议不到万不得已,千万不要收缩数据库。
收缩数据库影响极⼤:1.收缩数据库对数据库的影响极⼤,产⽣⼤量⽇志和碎⽚,⽽且会锁表。
如果你的库当前正在被使⽤,收缩不下去⾮常正常。
2.收缩数据库⼀定要⼿⼯来做的,⽽且是在维护窗⼝期做。
3.尽量使⽤语句来执⾏,可以提⽰错误4.尽量⼀次不要收缩太多,分⼏次收缩。
收缩的正确姿势在不得不收缩的时候,参考下⾯的步骤1.找到数据库中最⼤的⼏个表,重建所有索引。
⾸先尝试指定Truncate Only收缩⽅式.它只是移除⽂件尾部的空闲空间,并不重新组织已经使⽤的数据页。
DBCC SHRINKDATABASE (AdventureWorks2012, TRUNCATEONLY);2 最后才考虑,不带选项的收缩。
SQLServer中,用来收缩每个数据库文件的SQL脚本
SQLServer中,⽤来收缩每个数据库⽂件的SQL脚本下⾯这段SQL脚本,可以根据单个数据库中所有⽂件(数据⽂件、⽇志⽂件等)的⼤⼩,来收缩数据库⽂件:DECLARE@databaseFiles TABLE(freeSpace FLOAT,fileName NVARCHAR(300))INSERT INTO@databaseFiles(freeSpace,fileName)SELECTCAST(size AS FLOAT) /FILEPROPERTY(name, 'SpaceUsed') AS freeSpace,--sys.database_files的size列是数据库⽂件⽬前的⼤⼩(返回的是数据库⽂件的页数,每⼀页为8KB⼤⼩),其中包含分配了但没有使⽤的空间⼤⼩,FILEPROPERTY( nameFROM sys.database_files AS dfWHERE df.type_desc = N'ROWS'--这⾥,如果要收缩数据库的数据⽂件(mdf,ndf)就是ROWS,如果要收缩数据库的⽇志⽂件(ldf)就是LOGWHILE (SELECT COUNT(1) FROM@databaseFiles)>0BEGINDECLARE@FreeSpace FLOAT,@FileName NVARCHAR(300),@NewSize INTSELECT TOP1@FileName=fileName,@FreeSpace=freeSpaceFROM@databaseFilesIF@FreeSpace>2.5--如果数据库⽂件⽬前的⼤⼩超过了实际使⽤空间的2.5倍,就收缩该数据库⽂件BEGINSELECT@NewSize=CEILING(FILEPROPERTY(name, 'SpaceUsed') /128*1.1)--将数据库⽂件收缩到实际使⽤空间的1.1倍FROM sys.database_files AS dfWHERE df.type_desc = N'ROWS'--这⾥,如果要收缩数据库的数据⽂件(mdf,ndf)就是ROWS,如果要收缩数据库的⽇志⽂件(ldf)就是LOGDBCC SHRINKFILE (@FileName, @NewSize)ENDDELETE FROM@databaseFiles WHERE fileName=@FileNameEND注意,其中⽤到的⼀些SQL Server系统视图和函数,可以查看下⾯这⼏个微软官⽅⽂档:。
