1首先你要了解数据库变大的原因:随着您不断添加、更新数据以及更改数据库设计,数据库文件会变得越来越大。导致增大的因素不仅包括新数据,还包括其他一些方面:
(1)Access 会创建临时的隐藏对象来完成各种任务。有时,Access 在不再需要这些临时对象后仍将它们保留在数据库中。
(2)删除数据库对象时,系统不会自动回收该对象所占用的磁盘空间。也就是说,尽管该对象已被删除,数据库文件仍然使用该磁盘空间。
随着数据库文件不断被遗留的临时对象和已删除对象所填充,其性能也会逐渐降低。其症状包括:对象可能打开得更慢,查询可能比正常情况下运行的时间更长,各种典型 *** 作通常似乎也需要使用更长时间。
2所以,压缩数据库并不是压缩数据,而是通过清除未使用的空间来缩小数据库文件。
3压缩数据库可以防止数据库变大而引起的执行性能变慢,防止因此造成的数据库损坏。
SQL Server SP 为我们带来了vardecimal功能 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储 据称这项功能可以为典型的数据仓库节省 %的空间 而SQL Server 在这一基础上又进一步增强了数据压缩功能 SQL Server 现在支持行压缩和页面压缩两种选项 数据压缩选项可以在以下对象上启用
未创建聚簇索引的表
创建聚簇索引的表
非聚簇索引(对表设置压缩选项不会影响到该表上的非聚簇索引 因此聚簇索引的压缩需要单独设置)
索引视图
分区表和分区索引中的单个分区
为什么需要数据压缩
首先可能需要讨论的问题就是为什么在存储成本不断降低的今天 微软还要煞费苦心地在SQL Server中实现并且不断改进数据压缩技术呢
尽管存储成本已经不再是传统意义上的首要考虑因素 但是这并不代表数据库尺寸不是一个问题 因为数据库尺寸除了会影响到存储成本之外 还极大地关联到管理成本和性能问题
首先我们来讨论为什么会有管理成本的问题因为数据库需要备份 数据库的尺寸越大 那么备份时间就会越长 当然另外一点就是消耗的备份硬件成本也会随之提高(包括需要的备份介质成本和为了满足备份窗口而需要更高级的备份设备带来的采购成本) 还有一种管理成本就是数据库的维护成本 例如我们经常需要完成的DBCC任务 数据库尺寸越大 我们就需要更多的时间来完成这些任务
接着我们再看看性能问题 SQL Server在扫描磁盘读取数据的时候都是按照数据页为单位进行读取的 因此如果一张数据页中包含的数据行数越多 SQL Server在一次数据页IO中获得的数据就会越多 这样也就带来了性能的提升
最后考虑存储的成本 按照原先SQL Server SP 中vardecimal的压缩数据为例 %的空间节省也就意味着 %的存储成本 而按照SQL Server 当前放出的测试数据 采用新的数据压缩技术可以达到 X X的存储率 再加上如果企业要考虑容灾而增加的存储空间 这样节省的存储硬件成本也将是想当可观的
如何使用数据压缩
SQL Server 中的压缩选项可以在创建表或索引时通过Option进行设置 例如 CREATE TABLE TestTable (col int col varchar( )) WITH (DATA_PRESSION = ROW);
如果需要改变一个分区的压缩选项 则可以用以下语句 ALTER TABLE TestTable REBUILD PARTITION = WITH (DATA PRESSION = PAGE);
如果需要为分区表的各个分区设置不同的压缩选项 可以使用以下的语句 (SQL Server 可以对不同的分区使用不同的压缩选项 这一点对于数据仓库应用是非常重要的 因为数据仓库的事实表通常都会有一个或数个热分区 这些分区中的数据经常需要更新 为了避免数据压缩给这些分区上的数据更新带来额外的处理载荷 可以对这些分区关闭压缩选项) CREATE TABLE PartitionedTable (col int col varchar( )) ON PS (col ) WITH ( DATA_PRESSION = ROW ON PARTITIONS( ) DATA_PRESSION = PAGE ON PARTITION( TO ));
如果是为某个索引设置压缩选项的话 可以使用
CREATE INDEX IX_TestTable_Col ON TestTable (Col ) WITH (DATA_PRESSION = ROW);
如果是修改某个索引的压缩选项 可以使用 ALTER INDEX IX_TestTable_Col ON TestTable REBUILD WITH (DATA_PRESSION = ROW);
SQL Server 同时还提供了一个名为sp_estimate_data_pression_savings存储过程帮助DBA估计激活压缩选项后对象尺寸
数据压缩是怎样工作的
对于行压缩 SQL Server 采用以下三种方法来节省存储空间
减少了与记录相关联的元数据开销 此元数据为有关列 列长度和偏移量的信息 在某些情况下 元数据开销可能大于旧的存储格式
它对于数值类型(例如 integer decimal和float)和基于数值的类型(例如 datetime和money)使用可变长度存储格式
它通过使用不存储空字符的可变长度格式来存储定长字符串
对于页面压缩 SQL Server 则是在一张数据页面上依次采用
行压缩
前缀压缩
字典压缩
配置数据压缩功能需要注意的
尽管SQL Server 的数据压缩功能非常有价值 但是仍然需要注意一些问题
数据压缩功能仅在企业版和开发版中可用
数据压缩可以让一张数据页存储更多的数据行 但是并不能改变单行数据最长 字节这一限制
在一张已经设置了数据压缩的表上创建聚簇索引时 聚簇索引默认继承原表上的压缩选项
在未设置聚簇索引的表上设置页面压缩时 只有以下情况才会获得页面压缩的实际效果
数据使用BULK INSERT语法添加到表中
数据使用INSERT INTO WITH (TABLOCK)语法添加到表中
执行带有页面压缩选项的ALTER TABLE REBUILD命令
在未设置聚簇索引的表上更改压缩选项 会导致该表上所有非聚簇索引都需要重建 因为这些非聚簇索引指向的数据行地址已经都发生了改变
在改变压缩选项时所需要的临时空间大小与创建索引是所需要的空间是一样的 因此对于分区表 我们可以逐个分区设置压缩选项来减少临时空间的需求压力
由于SQL Server 中数据压缩技术其实是SQL Server SP 中vardecimal技术的一个超集 因此设置了数据压缩后就没有必要保留vardecimal了 当然SQL Server 为了保持向后兼容性 在当前版本中仍然保留了vardecimal 但是SQL Server 的下一个版本及可能就会弃用vardecimal选项 因此做了这些设置的数据库应该尽早改变到数据压缩设置下
lishixinzhi/Article/program/Oracle/201311/17483
--压缩日志及数据库文件大小 /--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复 --/ --下面的所有库名都指你要处理的数据库的库名 1清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2截断事务日志: BACKUP LOG 库名 WITH NO_LOG 3收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成 --收缩数据库 DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select from sysfiles DBCC SHRINKFILE(1) 4为了最大化的缩小日志文件(如果是sql 70,这步只能在查询分析器中进行) a分离数据库: 企业管理器--服务器--数据库--右键--分离数据库 b在我的电脑中删除LOG文件 c附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码: 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a分离 EXEC sp_detach_db @dbname = '库名' b删除日志文件 c再附加 EXEC sp_attach_single_file_db @dbname = '库名', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名mdf' 5为了以后能自动收缩,做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" --SQL语句设置方式: EXEC sp_dboption '库名', 'autoshrink', 'TRUE' 6如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式: alter database 库名 modify file(name=逻辑文件名,maxsize=20)
你需要将日志文件截断后收缩
在查询分析器里依次执行下面的语句就可以了,把“数据库”替换成你实际的数据库名
--首先截断事务日志
backup log 数据库 with no_log
--收缩数据库
dbcc shrinkdatabase('数据库',0)
楼上的方法有风险,而且 *** 作的时候数据库是脱机的。
数据库压缩是SQL Server 2008的一个新特性,它可以显著地降低备份和恢复 *** 作。默认情况下,备份压缩是在服务器实例级别上关闭的。不像其它提供不同级别压缩的第三方软件,SQL Server 2008只提供了一个级别。
数据库压缩是针对数据库存储的内容主要是文本进行压缩存储以节约空间的一种方法。
数据备份就是要保存数据的完整性,防止非法关键,断电,病毒感染等等情况,使数据丢失。有必要的话,最好勤备份,防止数据丢失。
最主要的原因:尽可能地减少损失,包括时间上、精神上和金钱上的损失。很多人都不注意备份数据,以致在发生问题后丢失大量的重要数据。要知道,在地球上网是很危险的,即使做好安全预防措施,也难免会发生不可预想的问题。因此,数据备份是日常必不可少的 *** 作。
以上就是关于压缩access数据库的原理全部的内容,包括:压缩access数据库的原理、SQLServer2008中的数据压缩功能、MS SQL2000数据库太大了 如何压缩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)