zoukankan      html  css  js  c++  java
  • 【SQL Server性能优化】SQL Server 2008之表压缩


    当数据库比较大,而要进行备份时,我们可以启动数据库备份的压缩,这样由于压缩后备份文件更小,所以整个备份的速度更快,同时也减少了磁盘空间的消耗。当然另一方面,肯定会增加cpu的消耗,不过一般的服务器都是多核,所以实际上对系统不会有大的影响。


    其实,不仅可以在备份的时候压缩,在SQL Server 2008中,我们还可以对表和索引进行压缩,下面通过压缩前、压缩后的比较,来展示SQL Server 2008强大的表及索引的压缩功能。


    这里在公司测试数据库找了一个中型的表,共有943万多条记录。


    1、压缩前表的大小

    SP_SPACEUSED 'TB_WCB'
    
    /*
    name	            rows	    reserved	data	   index_size	unused
    TB_WCB	            9439661    	746016 KB	412216 KB	329944 KB	3856 KB
    */

    2、压缩表

    这里启用的是row 级别的压缩

    ALTER TABLE TB_WCB
    rebuild
    WITH (DATA_COMPRESSION =ROW)


    3、压缩后的表大小

    SP_SPACEUSED 'TB_WCB'
    
    /*
    name	            rows	    reserved	data	   index_size	unused
    TB_WCB	            9439661    	497784 KB	167168 KB	328120 KB	2496 KB
    */


    4、表压缩前后的对比

    压缩前数据大小是412M(data字段的值就是表数据的大小,而index_size是索引的大小,两者是不同的),而在压缩后是 167M,压缩后表的大小只是原来表的40%,效果很明显,而且由于这个表中大部分字段只是id,相对而言重复值还不算多的,如果重复值更多,那么压缩效果会更好。


    但是,我们看到,索引的大小(index_size)基本上没什么变化,于是我们继续进行索引的压缩:


    5、压缩索引

    alter index IDX_TB_WCB_ID on TB_WCB
    rebuild
    with(data_compression=row)


    6、索引压缩后的对比

    SP_SPACEUSED 'MS_VISIT_QST_OPT'
    
    /*
    name	            rows	    reserved	data	    index_size	unused
    TB_WCB	            9439661    	317208 KB	167168 KB	149872 KB	168 KB
    */


    我们发现,索引压缩前大小是329M,而在压缩后是 149M,压缩比例为45%,效果也很明显。


    总结:

    通过表和索引的压缩,我们可以减小表占用的磁盘空间,这个只是一部分,更重要的是,读取同样多的数据,只需要读取更少的数据页,也就是只需要更少的IO,那么读取速度肯定会更快,而且由于占用的空间小了,也可以让更多的数据页缓存到内存中,进一步提高系统的整体性能。

  • 相关阅读:
    第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-2 session的基本原理与create命令的使用
    第4章 ZK基本特性与基于Linux的ZK客户端命令行学习 4-1 zookeeper常用命令行操作
    3-3 zookeeper的作用体现
    3-2 zk客户端连接关闭服务端,查看znode
    Python(2.7.6) glob
    SonarQube(5.0.1) 环境的安装配置
    Maven(3.0.5) 环境的安装配置
    Linux 命令
    Linux
    Python(2.7.6) copy
  • 原文地址:https://www.cnblogs.com/momogua/p/8304494.html
Copyright © 2011-2022 走看看