提升MySQL性能的秘密:了解表压缩功能的使用及其对性能的影响。

在MySQL数据库的使用中,对于字段类型设计大家可能都有一些思路和方式,但是针对存储方面的设计,在表结构设计之初可能就没考虑过,只有当业务发展到一定规模才意识到它所带来的问题严重性。而物理存储主要是考虑是否要启用表的压缩功能。默认情况下,所有表都是非压缩的。

一听到压缩,可能会下意识地认为压缩会导致 MySQL 数据库的性能下降。这个观点说对也不对,需要根据不同场景进行区分。 本篇文章,我们就来看一看表的物理存储设计:不同场景下,表压缩功能的使用。

一、表压缩

数据库中的表是由一行行记录(rows)所组成,每行记录被存储在一个页中,在 MySQL 中,一个页的大小默认为 16K,一个个页又组成了每张表的表空间。

如果一个页中存放的记录数越多,数据库的性能越高。这是因为数据库表空间中的页是存放在磁盘上,MySQL 数据库先要将磁盘中的页读取到内存缓冲池,然后以页为单位来读取和管理记录。

那么,一个页中存放的记录越多,内存中能存放的记录数也就越多,那么存取效率也就越高。若想将一个页中存放的记录数变多,可以启用压缩功能。此外,启用压缩后,存储空间占用也变小了,同样单位的存储能存放的数据也变多了。

若要启用压缩技术,数据库可以根据记录、页、表空间进行压缩,不过在实际工程中,我们普遍使用页压缩技术,这是为什么呢?

  • 压缩每条记录:每次读写数据都要压缩和解压,对CPU的计算过于依赖,会导致性能明显下降;另外,每条数据的大小一般都不会太大,对于每条数据都进行压缩的话,压缩效率也不是很好。

  • 压缩表空间:对表空间的压缩,其实压缩效率还是不错的,但是它要求表空间文件要保持静态,这对关系型数据库来讲又不现实。(不过业务中的历史数据倒是可以考虑)

而基于页的压缩,既能提升压缩效率,又能在性能之间取得一种平衡

这里大家可能要担心了,启用页压缩的话,性能会有损失,因为压缩需要额外的CPU计算。确实,压缩会给CPU带来一定的消耗。但压缩并不意味着性能下降,有可能还能提升性能呢?因为大部分的数据库业务系统,CPU的处理能力是有余力的,也就是计算时过剩的。IO负载才是数据库的主要瓶颈。

通过页压缩技术,MySQL可以把16K的页压缩到8K或是4K。这样一来,从磁盘读取或写入时,就能将IO请求大小减半。从而提升数据库的整体性能。

二、MySQL压缩表设计

1、COMPRESS 页压缩

COMPRESS 页压缩是 MySQL 5.7 版本之前提供的页压缩功能。只要在创建表时指定ROW_FORMAT=COMPRESS,并设置通过选项 KEY_BLOCK_SIZE 设置压缩的比例。虽然是通过选项 ROW_FORMAT 启用压缩功能,但这并不是记录级压缩,依然是根据页的维度进行压缩

比如以下示例:我们将一张日志表ROW_FROMAT 设置为 COMPRESS,表示启用 COMPRESS 页压缩功能,KEY_BLOCK_SIZE 设置为 8,表示将一个 16K 的页压缩为 8K。

CREATE TABLE sys_log (

  logId BINARY(16) PRIMARY KEY,

  ......

)

ROW_FORMAT=COMPRESSED

KEY_BLOCK_SIZE=8

COMPRESS 页压缩就是将一个页压缩到指定大小,比如从16K压缩到8K,但是如果无法压缩到8K,则会产生两个8K的页。

COMPRESS 页压缩,适合用于一些对性能不敏感的业务表,例如日志表、监控表、告警表等,压缩比例通常能达到 50% 左右

虽然 COMPRESS 压缩可以有效减小存储空间,但 COMPRESS 页压缩的实现对性能的开销是巨大的,性能会有明显退化。主要原因是一个压缩页在内存缓冲池中,存在压缩和解压两个页。为了 解决压缩性能下降的问题,从MySQL 5.7 版本开始推出了 TPC 压缩功能。

2、TPC压缩

TPC(Transparent Page Compression)是 5.7 版本推出的一种新的页压缩功能,其利用文件系统的空洞(Punch Hole)特性进行压缩。可以使用下面的命令创建 TPC 压缩表:

CREATE TABLE sys_log (

  logid BINARY(16) PRIMARY KEY,

  .....

)

COMPRESSION=ZLIB | LZ4 | NONE;

要使用 TPC 压缩,首先要确认当前的操作系统是否支持空洞特性。通常来说,当前常见的 Linux 操作系统都已支持空洞特性。

由于空洞是文件系统的一个特性,利用空洞压缩只能压缩到文件系统的最小单位 4K,且其页压缩是 4K 对齐的。比如一个 16K 的页,压缩后为 7K,则实际占用空间 8K;压缩后为 3K,则实际占用空间是 4K;若压缩后是 13K,则占用空间依然为 16K。

空洞压缩的另一个好处是,它对数据库性能的侵入几乎是无影响的(小于 20%),甚至可能还能有性能的提升。

这是因为不同于 COMPRESS 页压缩,TPC 压缩在内存中只有一个 16K 的解压缩后的页,对于缓冲池没有额外的存储开销。

另一方面,所有页的读写操作都和非压缩页一样,没有开销,只有当这个页需要刷新到磁盘时,才会触发页压缩功能一次。但由于一个 16K 的页被压缩为了 8K 或 4K,其实写入性能会得到一定的提升。

三、总结

对一些对性能不敏感的业务表,例如日志表、监控表、告警表等,它们只对存储空间有要求,因此可以使用 COMPRESS 页压缩功能

在一些较为核心的业务表上更推荐使用 TPC压缩。因为核心信息是一种非常重要的数据,通常伴随高频、重要业务。

比如上面提到的订单数据,大部分的电商公司都会对历史订单数据去做单独存储。以确保近期订单数据可以秒查。那么针对这个业务场景,我们可以将历史数据启用TPC压缩功能,对近三个月或六个月的订单数据不启用压缩。

需要特别注意的是: 通过命令 ALTER TABLE xxx COMPRESSION = ZLIB 可以启用 TPC 页压缩功能,但是这只对后续新增的数据会进行压缩,对于原有的数据则不进行压缩。所以上述ALTER TABLE 操作只是修改元数据,瞬间就能完成。

若想要对整个表进行压缩,需要执行 OPTIMIZE TABLE 命令:

ALTER TABLE sys_log COMPRESSION=ZLIB;

OPTIMIZE TABLE sys_log;

文章将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 机器学习 基础 之 监督学习 【分类器的不确定度估计】 的简单说明

Python 机器学习 基础 之 监督学习 【分类器的不确定度估计】 的简单说明 目录 Python 机器学习 基础 之 监督学习 【分类器的不确定度估计】 的简单说明 一、简单介绍 二、监督学习 算法 说明前的 数据集 说明 三、监督学习 之 分类器的不确定度估计 1、决策函数 2、预测…

怎么转换视频格式到mp4?格式转换,4种简单方法

转换视频格式到MP4可以使视频在各种设备上播放更加方便,而MP4格式的优势在于其高质量的视频和相对较小的文件大小。怎么转换视频格式到mp4?在本文中,我们将介绍四种简单有效的方法,帮助您快速将视频格式转换为MP4。 无论您是初学…

Linux内核的非确定行为消除

Linux内核作为一种广泛使用的开源操作系统内核,在多种硬件和设备上运行,提供了强大的功能和灵活的配置选项。然而,随着技术的发展和应用需求的增加,内核中出现的不确定行为也日益成为开发者和系统管理员关注的焦点。这些不确定行为…

Encryption Everywhere DV TLS CA - G1

Encryption Everywhere DV TLS CA - G1属于DigiCertCA机构发布,分为单域名SSL证书和通配符SSL证书两种为主,常见的是单域名SSL证书,到期后就需要重新申请。 单域名类型可以保护一个全域名,比如:一个子域名或者一个主域…

卖家必备:OZON、WB自养号测评详解从搭建到权重提升的全方位指导

俄罗斯跨境电商平台OZON、WB国内卖家入驻也日益渐多,很多卖家也都着手通过自养号测评方式打造产品权重,OZON、WB自养号测评具有多个优势,这些优势主要体现在以下几个方面: 权重提升快:通过自养号进行测评&#xff0c…

yolov8 模型架构轻量化 | 极致降参数量

模型轻量化加速是深度学习领域的重要研究方向,旨在减小模型的体积和计算复杂度,从而提高在资源受限设备上的运行效率,模型参数量在轻量化加速中扮演着至关重要的角色。 首先,模型参数量直接决定了模型的复杂度和存储空间需求。随…

Python数据分析与数据可视化 概念

考试题型: 一、填空题(1分*10) 二、程序代码填空(1分*20) 三、读程序写结果(10分*4) 四、程序设计(10分*1) 五、问答题(20分*1) 考试范围&#x…

【前段】开发五子棋小游戏全流程

使用前端技术开发五子棋小游戏 在这篇博文中,我们将详细介绍如何使用HTML、CSS和JavaScript开发一个简单的五子棋小游戏。我们将展示如何初始化棋盘、处理用户交互以及实现胜负判定。特别是,我们将着重介绍胜负判定的逻辑实现。 完整代码我放在了这里&a…

springBoot 如何让数据库读写分离

springBoot 数据库读写分离 数据库的读写分离,首先要把spring 中的自动加载的类排除掉,因为我们配置文件配置了多数据源,并且希望自己主导sql语句执行的数据库。 启动类排除自动配置 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 循环引用问题…

【喜马拉雅】副业分享、喜马拉雅如何赚钱、喜马拉雅写作赚钱、喜马拉雅会员免费吗?喜马拉雅极速版赚钱

上班族一枚,已经实现副业赚钱。结合自己的经历,给大家分享几点找副业的经验,专治「闲成废柴病」。 纯干货分享,不拉群、不私聊,请放心食用。建议先点赞收藏一下。 一、任何说马上能赚钱的副业,一般都不太靠…

React 状态管理库深度对比:在做技术选型的时候如何选择合适的状态库,nolan出品

掘金链接:https://juejin.cn/post/7368288987642232872 1,简介 在状态共享这方面,不像 Vuex,React 的官方并没有强力推荐某种封装方案,所以 React 的状态管理工具五花八门,百花齐放, react-redux、dva、C…

详解 JuiceFS sync 新功能,选择性同步增强与多场景性能优化

JuiceFS sync 是一个强大的数据同步工具,支持在多种存储系统之间进行并发同步或迁移数据,包括对象存储、JuiceFS、NFS、HDFS、本地文件系统等。此外,该工具还提供了增量同步、模式匹配(类似 Rsync)、分布式同步等高级功…

web安全学习笔记(16)

记一下第27-28课的内容。Token 验证 URL跳转漏洞的类型与三种跳转形式;URL跳转漏洞修复 短信轰炸漏洞绕过挖掘 一、token有关知识 什么是token?token是用来干嘛的?_token是什么意思-CSDN博客 二、URL跳转漏洞 我们在靶场中,…

【python量化交易】—— 双均线择时策略 - Qteasy自定义交易策略【附源码】

使用qteasy自定义并回测双均线交易策略 使用qteasy自定义并回测一个双均线择时策略策略思想导入qteasy模块创建一个新的策略回测交易策略,查看结果 使用qteasy自定义并回测一个双均线择时策略 我们今天使用qteasy来回测一个双均线择时交易策略,qteasy是…

计算机发展史故事【17】

任天堂崛起 七十年代美国雅达利公司开创一个高科技的电脑游戏业。无独有偶,一家专营电脑游戏机的日本任天堂公司,自八十年代初期把它的家庭电脑游戏机(FC)投放市场后,不平静的世界被再一次激起轩然大波。这个小小的日本…

x86 CPU的保护模式——概述(一)

文章目录 前言一、寄存器变化二、寻址变化三、为什么段寄存器依然是16位? 查看系列文章点这里: 操作系统真象还原 前言 我们在前面已经介绍过实模式了,它是32位 CPU 的一种工作模式,模拟了16位 CPU 的工作环境,但是大多…

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API + WebSocket + WebService

java医院信息系统HIS源码SaaS模式Java版云HIS系统 接口技术RESTful API WebSocket WebService 云HIS是基于云计算的医疗卫生信息系统(Cloud-Based Healthcare Information System),它运用云计算、大数据、物联网等新兴信息技术,…

centos7.9安装es7.12.0

下载es 国内镜像:https://mirrors.huaweicloud.com/elasticsearch/7.12.0/ 下载并上传内容到/usr/local目录下 解压: tar -zxvf /uar/local/elasticsearch-7.12.0-linux-x86_64.tar.gz安装 es一般不能用root启动,因此需要创建es:es用户和…

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时,使用的用户名,可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…