iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql中如何进行数据压缩性能对比
  • 723
分享到

mysql中如何进行数据压缩性能对比

2023-06-25 13:06:17 723人浏览 安东尼
摘要

这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 测试环境1.1 软硬件一台 64位 2.6.18-92 内核linux开发机,4G内存,4个280

这篇文章给大家分享的是有关mysql中如何进行数据压缩性能对比的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    1. 测试环境

    1.1 软硬件

    一台 64位 2.6.18-92 内核linux开发机,4G内存,4个2800Mhz Dual-Core AMD Opteron(tm) Processor 2220 CPU。

    Mysql放在一块7200转SAT硬盘,未做raid

    mysql未做任何优化, 关闭了query cache ,目的在于避免query cache对测试结果造成干扰。

    1.2 表结构

    2424753条记录,生产环境某一个分片的实际数据;

    分别建立了(partition_by1,idx_rank) 和 (partition_by1,chg_idx)的联合索引,其中 partition_by1为32长度的varchar类型 ,用于检索;其余两个字段均为浮点数,多用于排序

    autokid作为子增列,充当PRIMARY KEY,仅作为数据装载时原子性保证用,无实际意义。

    2. 测试目的

    2.1 压缩空间对比

    压缩率越大,占用的磁盘空间越小,直接降低数据的存储成本;

    2.2 查询性能对比

    压缩后查询性能不应该有显著降低。ArcHive是不支持索引的,因此性能降低是必然的,那么我们也应该心里有个谱,到底降低了多少,能不能接受。

    3. 测试工具

    3.1 mysqlslap

    官方的工具当然是不二之选。关于mysqlslap的介绍请参考 官方文档 。

    3.2 测试query

    截取生产环境访问topranks_v3表的实际SQL共9973条,从中抽取访问量较大的7条,并发50,重复执行10次。命令如下:

    ./mysqlslap --defaults-file=../etc/my.cnf -u**** -p**** -c50 -i10 -q ../t.sql --debug-info

    4.测试结论

    比较项磁盘空间耗时(秒)CPU IdleLOAD并发
    基准表(MyISAM)4039560042.308301550
    ARCHIVE75630745>3007541
    PACK993021092.596302250

    根据上面的表格给出的测试数据,我们简单得出以下结论:

    • 针对测试表,Archive表占用空间约为之前的18.7%myisampack后空间占用约为之前的24.6%;二者相差不多,单纯从空间利用情况来看,我们似乎需要选择archive表;

    • 我们再看查询性能,与基准表进行对比。无论在总耗时还是系统负载方面,50并发下的pack表查询性能与基准表相当; 而archive表在单并发情况下耗时超过了5分钟 (实在等不了了,kill之)!

    那么,我们似乎可以得出结论,针对需要在线查询的表,ARCHIVE引擎基本上可以不考虑了。

    为什么这个测试过程中ARCHIVE引擎如此地慢呢?

    我们知道,mysql提供archive这种存储引擎是为了降低磁盘开销,但还有一个前提,那就是被归档的数据不需要或者很少被在线查询,偶尔的查询慢一些也是没关系的。鉴于上述原因,archive表是不允许建立自增列之外的索引的。

    有了这个共识,我们拿一条测试SQL来分析一下不用索引前后的查询性能差别为什么这么大。

    在我们的测试SQL中有这么一条:

    SELECT c1,c2,...,cn FROM  mysqlslap.rpt_topranks_v3WHERE ... AND partition_by1 = '50008090'ORDER BY added_quantity3 DESCLIMIT 500

    我们前边说过,测试的这个表在partition_by1这个字段上建立了索引,那么,我们初步判断在基准表和myisampack表上,这个查询应该用到了partition_by1的索引; EXPLAIN 一下:

    mysql> EXPLAIN    -> SELECT ... FROM  mysqlslap.rpt_topranks_v3    -> WHERE ... AND partition_by1 = '50008090'    -> ORDER BY added_quantity3 DESC    -> LIMIT 500\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        TABLE: rpt_topranks_v3         type: refpossible_keys: idx_toprank_pid,idx_toprank_chg          KEY: idx_toprank_pid      key_len: 99          ref: const         rows: 2477        Extra: USING WHERE; USING filesort1 row IN SET (0.00 sec)

    正如我们所料,这个查询用到了建立在partition_by1这个字段上的索引,匹配的目标行数为2477,然后还有一个在added_quantity3字段上的排序。由于added_quantity3没有索引,所以用到了filesort

    我们再看一下这条SQL在归档表上的 EXPLAIN 结果:

    mysql> EXPLAIN    -> SELECT ... FROM  mysqlslap.rpt_topranks_v3_<strong>archive</strong>    -> WHERE ... AND partition_by1 = '50008090'    -> ORDER BY added_quantity3 DESC    -> LIMIT 500\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        TABLE: rpt_topranks_v3_archive         type: ALLpossible_keys: NULL          KEY: NULL      key_len: NULL          ref: NULL         rows: 2424753        Extra: USING WHERE; USING filesort1 row IN SET (0.00 sec)

    EXPLAIN 说:“我没有索引可用,所以只能全表扫描2424753行记录,然后再来个filesort。”你要追求性能,那显然是委屈MySQL了。

    感谢各位的阅读!关于“mysql中如何进行数据压缩性能对比”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    您可能感兴趣的文档:

    --结束END--

    本文标题: mysql中如何进行数据压缩性能对比

    本文链接: https://www.lsjlt.com/news/304997.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • sql怎么查看表的索引
      通过查询系统表,可以获取表的索引信息,包括索引名称、是否唯一、索引类型、索引列和行数。常用系统表有:mysql 的 information_schema.statistics、postg...
      99+
      2024-05-14
      mysql oracle
    • sql怎么查看索引
      您可以使用 sql 通过以下方法查看索引:show indexes 语句:显示表中定义的索引列表及其信息。explain 语句:显示查询计划,其中包含用于执行查询的索引。informat...
      99+
      2024-05-14
    • sql怎么查看存储过程
      如何查看 sql 存储过程的源代码:使用 show create procedure 语句直接获取创建脚本。查询 information_schema.routines 表的 routi...
      99+
      2024-05-14
    • sql怎么查看视图表
      要查看视图表,可以使用以下步骤:使用 select 语句获取视图中的数据。使用 desc 语句查看视图的架构。使用 explain 语句分析视图的执行计划。使用 dbms 提供...
      99+
      2024-05-14
      oracle python
    • sql怎么查看创建的视图
      可以通过sql查询查看已创建的视图,具体步骤包括:连接到数据库并执行查询select * from information_schema.views;查询结果将显示视图的名称、...
      99+
      2024-05-14
      mysql
    • sql怎么用循环语句实现查询
      可以通过 do 和 while 语句创建循环,并在循环内执行查询,详细步骤包括:定义循环变量设置循环初始值循环执行查询更新循环变量执行查询循环退出条件 SQL 中使用循环语句实现查询 ...
      99+
      2024-05-14
    • sql怎么用代码修改表中数据
      通过 sql 代码修改表中数据的方法包括:修改单个记录:使用 update 语句设置列值并指定条件。修改多条记录:在 update 语句中指定多个条件来修改满足条件的所有记录。增加新列:...
      99+
      2024-05-14
    • sql怎么用命令创建数据库
      在 sql 中使用 create database 命令创建新数据库,其语法包含以下步骤:指定数据库名称。指定数据库文件和日志文件的位置(可选)。指定数据库大小、最大大小和文件增长(可选...
      99+
      2024-05-14
    • sql怎么用身份证提取年龄
      sql 中提取身份证号码中的年龄的方法:提取出生日期部分(身份证号码中第 7-14 位);使用 to_date 函数转换为日期格式;使用 extract 函数计算与当前日期之间的年差。 ...
      99+
      2024-05-14
    • sql怎么看字段长度
      有两种方法可查看 sql 中的字段长度:使用 information_schema 架构,其中包含元数据信息,可用于查询字段长度。使用内建函数,如 length(),其适用于字符串数据类...
      99+
      2024-05-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作