数据库压缩备份提高备份效率
背景
在数据库的备份过程中有很多参数,前几日发现公司的备份数据库job运行的很慢,就去研究了一下,发现在备份程序中都没有启用压缩,加上压缩以后有发现效率提高了不少,本篇就几个压缩相关的参数来看一下备份数据库的过程中如何提高备份的效率。
代码实现
为了更好地了解数据库备份,我们首先要知道代码以及参数的含义。
普通代码:
BACKUP DATABASE ‘备份数据库名称’
TO DISK = '地址+bak文件名称' ;
加快备份进度的几个关键参数:
1.BUFFERCOUNT--指定用于备份操作的 I/O 缓冲区总数。可以指定任何正整数
2.MAXTRANSFERSIZE--指定要在 SQL Server 和备份介质之间使用的最大传输单位。可能的值是 64 KB的倍数,最大 4 MB。
3.COMPRESSION--压缩备份选项。
4.CHECKSUM--验证数据选项。
5.启用多个备份集。
这四个中CHECKSUM是用来保证数据安全的这里我们不做讨论,由于一般备份也不会用到多个备份集,这里我们主要讨论前三个带来的影响,当然对于数据量级比较大的可以采用多备份集,尤其不同磁盘的备份集将会大大提高效率。
具体对比:
首先是常规没有压缩的情况下的备份如图1:
图1
数据页数282295,总共花费了32.147秒。接下来我们看一下当加了压缩等参数后的表现。
增加压缩参数的情况如图2:
图2
页数接近,花费的时间是19.524秒,单位备份速度大幅提升到112.957/s。
添加了COMPRESSION、MAXTRANSFERSIZE、BUFFERCOUNT三个参数的:
图3
这个就快了不少,花费了17.6秒,写入速度为125.228M/s。
适当缩小MAXTRANSFERSIZE、BUFFERCOUNT,如图4:
图4
如图所示,缩小MAXTRANSFERSIZE、BUFFERCOUNT后相应的写入速度略微下降。时间也略微提高。
大幅提升BUFFERCOUNT的数值,能够提升写入速度。
图5
缓冲区使用的总计空间由下面公式确定:buffercount*maxtransfersize,这里需要知道该公式结果不能大于分配内存,所以要注意服务器的最大内存以免内存溢出。
除了以上几个条件,我也做了几个相关的其他条件的修改来适应不同的备份数据,例如数据验证CHECKSUM等都会增大备份数据的时间。
注意:
1> 通过压缩前后文件的大小对比可知道到压缩比率。
2> 对已启用压缩的数据库进行压缩备份,CPU消耗会变得更高
压缩主要因素包括:
1.数据类型。字符数据的压缩率要高于其他类型的数据。
2.数据重复的比例越高压缩越好,类似于数据库压缩(页压缩)。
通常,如果某页包含多个行,而其中的某个字段包含相同的值,则该值可获得较大的压缩。相反,对于包含随机数据或者每页只有一个很大的行的数据库,压缩备份的大小几乎与未压缩的备份相同。
总结:
不难发现,以上主要测试三个数据,在合理外围内越大越能提高效率。同时经过研究还发现,备份压缩后,还原的效率也会提高。
COMPRESSION、MAXTRANSFERSIZE、BUFFERCOUNT配合服务器的性能就能大幅提高备份效率。优点是显而易见的对于备份时间,备份文件大小都有提高。
- PHP 面试知识梳理
- 5.如何为Impala配置OpenLDAP认证
- 传统Spring项目使用FeignClient组件访问微服务
- 4. 如何为Hive配置OpenLDAP认证
- 3.如何实现OpenLDAP的主主同步
- 2.OpenLDAP集成SSH登录并使用SSSD同步用户
- 1.如何在CentOS6.5安装OpenLDAP并配置客户端
- PHP 面试知识梳理
- 如何修改CM及CDH元数据库配置
- 如何实现CDH元数据库MySQL的高可用
- 如何实现CDH元数据库MySQL的主主互备
- 在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析
- 如何在Hue中配置已启用SSL的HttpFS服务
- 如何使用Nginx实现CDSW的跨网段访问
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WeTest:五年沉淀,打造游戏品质的坚实后盾
- ES5新增方法
- 筛选商品案例
- volatile关键字在Android中到底有什么用?
- Python无头爬虫下载文件的实现
- Python基于stuck实现scoket文件传输
- Python %r和%s区别代码实例解析
- Python基础类继承重写实现原理解析
- python torch.utils.data.DataLoader使用方法
- Android自定义橡皮擦效果
- Android Canvas drawText文字居中的一些事(图解)
- Nginx+keepalived一主一从高可用,手把手带你一步一步配置!
- Behave!:一款针对页面活动的浏览器监控插件
- R可视化 | 地理信息空间(上)
- Nautilus:一款基于语法的反馈式模糊测试工具