赞
踩
记录一下:有一个做了很久的项目,涉及近十几个数据库,数据量不大,业务压力不重,也非分布式部署。由于操作频繁且历史悠久,数据库文件越来越大,而云服务器硬盘有限,因此我们需要对数据库进行合理优化。
本次优化是在本地测试的。
我们先看一张图,这是其中一个业务库A:
大小:8301M
可用空间:6373.84M
这说明 数据文件 .mdf 和 日志文件 .ldf 占用了近8G的硬盘空间,且在持续地增大,但这其中却有6G多的空间是没有被使用的。
一般常用影响数据库文件大小的因素有以下几种:
VARCHAR
类型的字段可以根据实际内容长度变化,而CHAR
类型则总是占用固定长度的空间。tempdb数据库是一个特殊的系统数据库,它用于存储所有会话和事务的临时数据,如临时表、表变量、存储过程的中间结果集以及优化器生成的一些内部临时工作表等。
若要进行数据优化呢,可以参考1-4进行酌情处理。
SQL Server数据库收缩(Shrink Database)是一种数据库维护任务,用于减少数据库文件的大小。
数据库收缩是一个有争议的操作,因为它有一些潜在的缺点:
在执行收缩操作前后,监控数据库的性能和空间使用情况
在某些情况下,可能更倾向于使用其他方法来管理数据库空间,如重新组织索引或使用数据库压缩功能。因此,在决定是否执行数据库收缩时,应该仔细考虑其潜在的影响,并在必要时寻求专业建议。
环境:Sql Server 2016
操作步骤:选择数据库A ——>【右键:任务】——>【收缩】——>【数据库】。
如图所示,我们做一个对比,超预期!
收缩前(M) | 收缩后(M) | |
---|---|---|
大小 | 8301 | 98.05 |
大小 | 6373.84 | 10.16 |
收缩成功后,访问数据库是遇到异常:
……偏移量为0x00000001a9a000 的位置执行 读取 期间,操作系统已经向SQL Server 返回了错误21(设备未就绪。)……
解决方案:
重启SqlServer服务。
操作:选择sql服务器——>【】
已数据库 DB_NameA为例:
USE[master]
GO
ALTER DATABASE [DB_NameA] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [DB_NameA] SET RECOVERY SIMPLE --简单模式
GO
USE [DB_NameA]
GO
DBCC SHRINKFILE (N'DB_NameA_log' , 1, TRUNCATEONLY) --DB_NameA 的日志文件名 .ldf
GO
USE[master]
GO
ALTER DATABASE [DB_NameA] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [DB_NameA] SET RECOVERY FULL --还原为完全模式
GO
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。