在实际工作中,经常有同事问道: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的性能就这么高,因为为了能够对比,测试时做了很多准备工作,测试操作也是比较特殊的
相关推荐
1.3.1.InnoDB磁盘结构——表.md 1.3.2.InnoDB磁盘结构——索引.md 1.3.3.InnoDB磁盘结构——表空间.md 1.4.0.Mysql文件——参数文件.md 1.4.1.0.Mysql文件——日志文件.md 1.4.2.Mysql文件——socket文件.md 1.4.3....
MySQL是一种广泛使用的开源关系型...以上是对MySQL数据库表的一些基础知识点的概述,实际应用中还有更多高级特性和策略,如复制、主从同步、分区策略、存储引擎选择等,都需要根据具体应用场景进行深入学习和实践。
为了生成您所需的关于"高性能mysql——高清版"的知识点,我将依赖标题和描述部分提供的信息,以及对MySQL数据库性能优化的普遍知识来进行回答。 1. MySQL概述 MySQL是一个多用户、多线程的SQL数据库管理系统,使用...
《MySQL内核:InnoDB存储引擎 卷1》是一本深度探讨MySQL数据库系统核心部分——InnoDB存储引擎的专业书籍。这本书以超高清的PDF格式呈现,包含详细的书签,便于读者快速定位和查阅相关内容。InnoDB作为MySQL中最常用...
"MySQL数据库教学难点分析" 本文主要讨论了 MySQL 数据库教学中的难点和解决方案,以数据库设计为例,探讨了 MySQL 数据库教学中存在的问题和挑战,旨在提高教学效率和学生学习兴趣。 一、 MySQL 服务器环境配置 ...
通过深入学习和实践MySQL的代码,你可以掌握如何有效地管理数据库、编写高效的SQL语句,并了解如何进行数据库设计和优化,从而在项目开发中发挥重要作用。在实际工作中,结合实际场景灵活应用这些知识,将使你成为一...
在实际中,解决MySQL(InnoDB)的死锁问题需要深入了解死锁产生的原因、锁的类型以及加锁策略,进而对业务逻辑进行优化或调整数据库配置和代码逻辑以减少死锁的可能性。 ### 个人简介 何登成作为阿里巴巴DBA团队的...
MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何被存储、检索和管理。在MySQL中,不同的存储引擎提供了不同...在实际应用中,也可以根据不同的表和业务需求,选择合适的存储引擎,以实现最优的数据库性能。
MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其工作流程涉及多个步骤,这些步骤在处理SQL语句时至关重要。以下是对这些步骤的详细说明: 首先,客户端通过连接器与MySQL服务器建立连接。连接器负责...
《MySQL技术内幕_InnoDB存储引擎_姜承尧_第2版》是一本深入探讨MySQL数据库中InnoDB存储引擎的专业书籍。作者姜承尧是数据库领域的知名专家,他的这部著作详细阐述了InnoDB引擎的核心概念、设计原理以及实际操作技巧...
MySQL 5.6是MySQL数据库的一个重要版本,它在InnoDB引擎和MySQL Server层面都引入了大量改进,旨在提升性能并增强功能。InnoDB引擎作为MySQL的核心存储引擎,尤其值得关注,因为它直接影响到数据库的稳定性和处理...
MySQL的InnoDB引擎是数据库管理的核心组件,尤其在处理事务处理和行级锁定方面表现出色。以下是关于MySQL InnoDB引擎的一些关键知识点: 1. **事务处理**:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,...
【金融行业数据库技术实践——从Oracle到MySQL的转型】 随着云计算的发展,金融行业正在经历从传统的Oracle数据库向云时代的MySQL数据库转型的过程。这一转型的主要驱动因素包括技术生态的成熟、人才储备、成本效益...
在探讨InnoDB记录结构之前,我们首先需要了解MySQL数据库的基本运行机制,尤其是其存储引擎的概念。在MySQL中,存储引擎负责对表中数据的读取和写入工作,不同的存储引擎设计用于提供不同的特性,它们所使用存储数据...
本文将通过一个具体的业务场景——优惠券系统的并发问题来探讨MySQL Innodb中的锁机制,并提供解决方案。 **业务场景:** 假设有一个优惠券系统,其中包含两种主要的表:活动表(`coupon_activity`)和优惠券明细...
**phpMyAdmin——MySQL数据库图形化界面** phpMyAdmin是一款非常流行的开源软件,它为MySQL数据库提供了一个直观且功能丰富的图形用户界面。通过这个界面,用户可以轻松地执行各种数据库管理任务,包括创建、修改和...
1. **MySQL简介**:MySQL 是一个开源的关系型数据库管理系统,广泛应用于Web应用程序,因为它具有高性能、高可靠性、易于使用和免费等优点。MySQL 5.7 版本引入了许多增强功能,如性能优化、新的JSON数据类型、改进...