mysql的压缩特性-使用场景以及监控

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

使用场景:

数据分布特点,决定了空间压缩的效率,如果存入的数据的重复率较高,其压缩率就会较高;通常情况下字符类型数据(CHAR, VARCHAR, TEXT or BLOB )具有较高的压缩率,而一些二进制数据(integers or floating point numbers)或者一些已经压缩过的数据(JPEG or PNG images)的压缩率不会很好;

应用场景,可以简单解释为应用的insert,update,delete,select的比率:

如果应用select占了绝大部分,只有很少的update,那么只有较少的页当modification log[为了尽可能多的避免压缩、解压带来的额外消耗,InnoDB在压缩后的B-Tree页中新增了一个modification log区,通过记录当前的页的修改日志,来避免频繁压缩解压]空间不足时候,才需要重组或者重新压缩的,这种场景下使用compress也是不错的选择;

如果应用只是单纯的insert,此时数据的插入按照主键递增的方式组织,即使表中的secondary index page也基本上不需要重组和重压缩;

对于delete操作,由于innodb删除行采用打标志位的方式来删除,所以对compress行的删除通过修改uncompressed数据的方式实现,所以效率很高;

对于update操作,如果不是对索引列或者存储在off-page的blob,text,长字符串的列的更新,这种场景下使用压缩也是可以接受的;

上面结合insert,update,delete,select说明了各个使用场景,但是归根结底是利用cpu time来换取性能的提升,如果应用的瓶颈为io瓶颈,而不是cpu瓶颈,那么可以利用剩余的cpu来提升应用性能。

监控性能:我们可以观察应用程序的性能,数据服务器的cpu,i/o,磁盘空间等重要指标,通过这些指标我们来判断compress的性能再好不过了;除了上面的手段外,innodb plugin提供了监控compress压缩率以及内存的使用情况的视图:{information_schema:innodb_cmp,innodb_cmp_rest}:两个视图的列都是相同的,记录了页在compress和uncompress操作过程中的一些状态值,只不过innodb_cmp记录的是一个历史汇总,而innodb_cmp_rest记录的是一个较为实时的统计值,包括btree页compress/uncompress的次数,所花费时间,compress成功次数,以及compress-page的大小;

通过这两个视图能够帮助我们决定是否对采取对某一个表进行压缩(前提是没有使用其他压缩表),其中值得我们关注的信息包括plugin执行压缩,解压的时间,次数;如果有大量的compress操作(对比insert,update,delte),则有可能表明压缩表被更新的太频繁导致压缩效率变低,这个时候需要选择大一些的page,或者其他的表进行压缩;成功率:compress_ops_ok/compress_ops的比率很高的话,则表明系统运行的良好,反之则表明innodb经常进行 reorganize, recompress and split B-tree nodes,此时则需要对该表禁止使用compress或者选择较大的key_block_size;当对btree节点进行一次更新操作时,如果该节点已经没有足够的空间容下压缩数据,而不得不节点split,这个时候我们就需要关注compress success的次数了;{information_schema.innodb_cmpmem,innodb_cmpmem_rest}:这两个视图记录压缩页使用buffer pool的一些信息,innodb plugin使用了buddy allocator系统来分配不同大小的页:1kb到16kb,详细信息包括:buffer pool为压缩页分配正在使用的page数,可供使用的page数,buddy allocator重新分配page的次数及时间;

从上面的查询出来的信息中可以看到buffer pool中只含有8k的压缩页,一共进行了1048次压缩,其中921次成功,61次的解压缩,同时可以看出压缩和解压页所花费的时间都是小于1秒的,因为查询出来的值都为0;

上面这幅图展示了buffer pool内存分配情况,有6169个8kb的压缩页在buffer pool中,除此剩余的还分配了64字节的page,这个page的用途为记录在buffer中有多少压缩页并且还未以压缩形式存在,即我们可以得出有6169-5910=259个压缩页以未压缩的状态存在于buffer pool中;同时可以得到由于内存分配给压缩页导致的碎片,而不能使用的(128*1+512*1+2048*1+4096*1)内存,导致碎片的原因官方文档中这样说的:This is because small memory allocation requests are fulfilled by splitting bigger blocks, starting from the 16K blocks that are allocated from the main buffer pool, using the buddy allocation system.The fragmentation is this low, because some allocated blocks have been relocated (copied) to form bigger adjacent free blocks. This copying of SUM(PAGE_SIZE*RELOCATION_OPS) bytes has consumed less than a second (SUM(RELOCATION_TIME)=0).

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
|
22天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
61 1
|
22天前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
39 1
|
2月前
|
JSON 关系型数据库 MySQL
MySQL 8.0 新特性
MySQL 8.0 新特性
149 10
MySQL 8.0 新特性
|
2月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
542 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
1月前
|
SQL 安全 关系型数据库
MySQL8.2有哪些新特性?
【10月更文挑战第3天】MySQL8.2有哪些新特性?
40 2
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
63 2
zabbix agent集成percona监控MySQL的插件实战案例
|
3月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
3月前
|
SQL 算法 关系型数据库
(二十)MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!
 MySQL数据库从1995年诞生至今,已经过去了二十多个年头了,到2022.04.26日为止,MySQL8.0.29正式发行了GA版本,在此之前版本也发生了多次迭代,发行了大大小小N多个版本,其中每个版本中都有各自的新特性,所有版本的特性加起来,用一本书的篇幅也无法完全阐述清楚,因此本章主要会挑重点特性来讲,具体各版本的特性可参考MySQL官网的开发手册。
155 1
|
4月前
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
164 3

热门文章

最新文章

下一篇
无影云桌面