zoukankan      html  css  js  c++  java
  • MySQL Innodb数据库性能实践

    在实际工作中,经常有同事问道:MySQL Innodb表记录数多大是合适的?
    一般的理解肯定是表越大性能越低,但具体低多少呢,是缓慢下降还是急剧下降,是1000万就下降还是1亿才下降呢?

    针对这些问题,我做了一下基准测试,基准测试环境如下:
    【硬件配置】
    硬件
    配置
    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
    18G
    innodb_log_file_size
    200M
    innodb_log_files_in_group
    3
    sync_binlog
    100
    innodb_flush_log_at_trx_commit
    2
    【表配置】

    配置项
    配置
    记录数
    1000万,2000万,5000万,1亿
    存储引擎
    Innodb
    行格式
    compact
    性能测试结果如下:
    1)同一张表,不同记录数,测试结果如下:


    分析如下:
    (1)当表大小小于Inndob buffer pool时,整体性能会随着表记录数的增加而略微降低,但各种操作的性能差别总体不大(例如1KW/2KW是12000TPS,5KW是10000TPS,相差16%)。
    (2)当表大小大于Innodb buffer pool(10KW)时,性能急剧下降(从12000降到1000),性能接近高安全性配置的性能,因为此时磁盘IO成为了性能的主要影响因素。
    因此,表记录数本身对性能影响不大,关键是表的大小是否小于Innodb buffer pool。

    2)不同的表,不同的记录数
    为了进一步验证表记录对性能的影响,还验证了另外一种情况:记录数很大但每条记录较短,和记录数较少但每条记录很长两种表对比。
    主要对比了Value长度为10(以下简称Value10)和Value长度为250(以下简称Value250)的表的性能。由于Innodb只有在buffer pool大于表大小的时候性能才最高,因此测试对比时为了满足这个条件,Value10的表记录数是10KW,而Value250的表记录数是2KW。


    从上图可以看出,即使Value10的表记录数是Value250的表记录数的5倍,但性能反而高出16%左右,由此可以看出,相比表记录数来说,行长度对性能影响更大,行越长性能越低。

    【应用建议】
    基于以上分析,对于表记录数需要考虑的是记录数的临界点,即:表达到这个记录数后,表大小(数据和索引)超过了Innodb buffer pool的大小;而设计时推荐尽量设计和试用行长度小而精的表。
  • 相关阅读:
    action里设置session
    用Eclipse导出能直接运行的jar包
    linux下命令行运行jar文件出错
    扫描对方主机端口
    调用Axis Webservice异常: java.net.ConnectException: Connection timed out: connect
    PL/SQL 安装出现的一些问题
    调用Axis WebService异常:org.xml.sax.SAXException: Bad envelope tag: definitions
    开通博客第一天
    正则表达式
    匿名函数
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314559.html
Copyright © 2011-2022 走看看