摘要: 对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据。 常见的热点数据有“最新的新闻”、“最热门的新闻”、“下载量最大”的电影等。 为了了解MySQL Innodb对热点数据的支持情况,我进行了基准测试,测试环境如下: 【硬件配置】 硬件 配置 ...

对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据。
常见的热点数据有“最新的新闻”、“最热门的新闻”、“下载量最大”的电影等。

为了了解MySQL Innodb对热点数据的支持情况,我进行了基准测试,测试环境如下:

【硬件配置】

硬件

配置

CPU

Intel(R) Xeon(R) CPU E5620 主频2.40GHz, 物理CPU 2个,逻辑CPU 16个

内存

24G(6块 * 4G  DDR3 1333 REG)

硬盘

300G * 3个,SAS硬盘 15000转,无RAID,有RAID卡,且开了回写功能

OS

RHEL5

MySQL

5.1.49/5.1.54

【MySQL配置】

配置项

配置

innodb_buffer_pool_size

4G

innodb_log_file_size

200M

innodb_log_files_in_group

3

sync_binlog

100

innodb_flush_log_at_trx_commit

2

【热点数据模型】
为了模拟热点数据主要存储在内存中的情况,使用范围查询将前20%数据作为热点数据加载到内存,例如:SELECT COUNT(*) FROM BT_KV_SHORT_INT_CHAR_10KW WHERE col1 < 20000000

项目

模型

表记录数

1KW(3G),2KW(6G),5KW(15G),10KW(30G)

Key

INT

Value

CHAR(250)

热点数据

占总数据20%

性能测试结果如下:

【查询】

详细分析如下:

==>当热点数据小于Innodb buffer pool时(1KW/2KW/5KW),查询操作的性能很高,和表数据小于Innodb buffer pool时的性能相近;

==> 当热点数据大于Innodb buffer pool时(10KW),查询的性能下降明显;

==> 热点数据访问的总体性能优于随机访问;

【插入】

详细分析如下:

==>当热点数据小于Innodb buffer pool时(1KW/2KW/5KW),性能随着热点数据的增长而逐渐下降,原因是当Innodb buffer pool接近饱和时,buffer管理需要进行更多的操作;

==>当热点数据超过Innodb buffer pool后(10KW),性能急剧下降,原因是磁盘IO已经成为性能瓶颈;

【更新】

分析同INSERT。

【删除】

分析如下:

==>和INSERT/UPDATE表现略微不同,当热点数据小于Innodb buffer pool时,性能变化不大,因为DELETE操作不需要生成新的Page,节省了buffer管理的操作;

==> 当热点数据大于Innodb buffer pool时,性能下降较大,原因是此时磁盘IO已经成为性能瓶颈。

【总结】
Innodb buffer pool采用LRU的方式管理和淘汰数据,根据LRU算法,热点数据都会优先放入内存,因此热点数据的测试性能比随机访问的要高出不少。
但热点数据超出Innodb buffer pool后,磁盘IO成为性能主要瓶颈,性能会急剧下降。

【应用建议】
实际应用中涉及热点数据访问时,Innodb是一个高性能的较好的选择,但前提是要能够预估热点数据的大小,只有当热点数据小于Innodb buffer pool(即热点数据全部能够放入内存)时,才能够获得高性能。

注:
测试数据只为对比用,不代表一般情况下MySQL的性能就这么高,因为为了能够对比,测试时做了很多准备工作,测试操作也是比较特殊的

MySQL Innodb数据库性能实践——热点数据性能的更多相关文章

  1. MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

      上周,以前公司的同事朋友找我帮忙,看看能否帮忙恢复一个MySQL 数据库,具体情况为:数据库版本为MySQL 5.6(具体版本不清楚),也不清楚具体的数据库引擎; 没有数据库备份,只剩下数据库下面 ...

  2. mysql innodb数据库损坏导致无法启动

    生产环境中的mysql突然启动不了,查了原因是innodb库错误,以前就遇到过这个问题,稀里糊涂的没解决,结果导致大量数据丢失.这些又遇到这个问题,果断把那个有问题的数据库移动了别的地方,启动了mys ...

  3. mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。

    今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increme ...

  4. MySQL InnoDB数据库备份与还原

    备份 进入cm黑窗口 输入下列命令 mysqldump -u 用户名 -p 数据库名称> c:\11.sql 回车执行 恢复 进入cm黑窗口 输入下列命令 mysql>use dbtest ...

  5. mysql导出数据库某些表的数据

    # 导出数据,一般从从库导出,减少主库的压力.mysqldump -hhostname -P3306 --single-transaction --master-data= database_name ...

  6. MySQL 性能优化--优化数据库结构之优化数据大小

    MySQL性能优化--优化数据库结构之优化数据大小   By:授客  QQ:1033553122 尽量减少表占用的磁盘空间.通常,执行查询期间处理表数据时,小表占用更少的内存. 表列 l   尽可能使 ...

  7. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  8. mysql innodb 性能优化

    建议参数: max_connections=800 key_buffer_size=512M query_cache_size=128M sort_buffer_size=64M table_open ...

  9. (转)Mysql技术内幕InnoDB存储引擎-事务&备份&性能调优

    事务 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC ...

随机推荐

  1. Android测试关注点

    Android系统app测试,一般有native app原生,web app网页, hybird app混合 1.功能测试,考虑业务逻辑,主要手机和APP交互功能,来电,短信,闹钟可能对app造成的影 ...

  2. Log4j简介

    Log4J日志配置详解   一.Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和 ...

  3. 【转载】ACM总结

    转自亲学长的总结 声明:本文是写给弱校ACM新手的一点总结,受自身水平和眼界所限,难免会有一些个人主观色彩,希望大牛指正 感谢@Wackysoft .@哇晴天 . @ 一切皆有可能1 的指教,现根据这 ...

  4. Android ——单元测试

    什么是单元测试 首先需要介绍一下什么是单元测试.很多人像我一样,本科并不是计算机专业出身的,如果在职的公司不要求做单元测试的话,可能对这个词并没有一个确切的概念.而即使是计算机专业出身,如果毕业以后写 ...

  5. SQLServer数据库转换成MySQL数据库

    由于工作需要,系统原先的SQLServer数据库要转换成MYSQL数据库,所以这两天就一直在查阅这方面的资料.最开始,我尝试从SQLServer中导出SQL文件,然后导入到MYSQL数据库中,发现报错 ...

  6. Javascript 事件对象进阶(一)拖拽的原理

    拖拽原理 鼠标和Div的相对距离不变 三大事件 把拖拽加到document上 拖拽简单点来说就是不停的更改物体到页面左边&顶部的距离! 那么如何计算出物体到页面左端的距离呢? 当鼠标按下的时候 ...

  7. [转] 使用 MYSQLBINLOG 来恢复数据

     使用 MYSQLBINLOG 来恢复数据 2009-04-05 12:47:05 标签:mysql mysqlbinlog 恢复 数据库 数据 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  8. REDIS fdatasync技术问题和BIO技术的引入

    http://oldblog.antirez.com/post/fsync-different-thread-useless.html 这是原文作者的博客 把他翻译下 带上自己的一些理解 看看作者引入 ...

  9. 使用SqlLocalDB命令行管理LocalDB

    SqlLocalDB.exe start v11.0 SqlLocalDB.exe info v11.0 SQL Server Management Stdio添加管道连接实例 默认实例名(local ...

  10. 《深入浅出Node.js》第5章 内存控制(未完)

    @by Ruth92(转载请注明出处) 第5章 内存控制 基于无阻塞.事件驱动建立的 Node 服务,具有内存消耗低的优点,非常适合处理海量的网络请求. 内存控制正是在海量请求和长时间运行的前提下进行 ...