MySQL Innodb数据库性能实践——合适的表记录数
来源:互联网 发布:网络结构图图标 编辑:程序博客网 时间:2024/06/05 08:12
http://blog.csdn.net/yunhua_lee/article/details/7082772
MySQL Innodb数据库性能实践——合适的表记录数
版权声明:尊重博主劳动成果,欢迎转载,转载请注明出处 --爱技术的华仔(http://blog.csdn.net/yunhua_lee)
在实际工作中,经常有同事问道: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的大小;而设计时推荐尽量设计和试用行长度小而精的表。
注:
测试数据只为对比用,不代表一般情况下MySQL的性能就这么高,因为为了能够对比,测试时做了很多准备工作,测试操作也是比较特殊的
- MySQL Innodb数据库性能实践——合适的表记录数
- MySQL Innodb数据库性能实践——合适的表记录数
- MySQL Innodb数据库性能实践——合适的表记录数
- MySQL Innodb数据库性能实践——合适的表记录数
- mysql数据库表记录数
- 怎样快速获取innodb的表记录数
- MySQL Innodb数据库性能实践——热点数据性能
- 查看数据库表记录数
- MySQL Innodb数据库性能实践——VARCHAR vs CHAR
- MySQL Innodb数据库性能实践——VARCHAR vs CHAR
- MySQL Innodb数据库性能实践——VARCHAR vs CHAR
- MySQL Innodb数据库性能实践
- 【数据库】MYSQL查看所有表记录数命令
- sql server 获取数据库所有表记录数的方法
- 查询数据库表记录数的最快方法
- MySQL数据库占用的空间、表记录的行数
- 查看指定数据库各表记录数
- PHP操作MySql数据库表记录
- 0013、node 之网址处理
- macbook pro外界键盘更换command与ctrl键功能
- 深入理解String类型、StringBuilder、StringBuffer的区别与使用
- Android实现推送方式解决方案
- Spark中决策树源码分析
- MySQL Innodb数据库性能实践——合适的表记录数
- 数据结构与算法开篇
- Android备忘录 -- 自定义控件
- strstream 与 backward_warning.h 的警告问题
- 关于msql下,使用NOT IN/IN 出现包含NULL值导致查询结果出错
- Shell变量
- 常见的相似或相异程度计算方法
- Java内存模型与线程01:概述
- 画虚线