1、最大数据量
抛开数据量和并发数,谈性能都是耍流氓。MySQL 没有限制单表最大记录数,它取决于操作系统对文件大小的限制。
文件系统 |
单文件大小限制 |
FAT32 |
最大 4G |
NTFS |
最大 64GB |
NTFS5.0 |
最大 2TB |
EXT2 |
块大小为 1024 字节,文件最大容量 16GB;块大小为 4096 字节,文件最大容量 2TB |
EXT3 |
块大小为 4KB,文件最大容量为 4TB |
EXT4 |
理论可以大于 16TB |
《阿里巴巴 Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL 配置、数据表设计、索引优化。500 万这个值仅供参考,并非铁律。博主曾经操作过超过 4 亿行数据的单表,分页查询最新的 20 条记录耗时 0.6 秒,SQL 语句大致是select field_1,field_2 from table where id < #{prePageMinId} order by id desc limit 20,prePageMinId 是上一页数据记录的最小 ID。虽然当时查询速度还凑合,随着数据不断增长,有朝一日必定不堪重负。分库分表是个周期长而风险高的大活儿,应该尽可能在当前结构上优化,比如升级硬件、迁移历史数据等等,实在没辙了再分。
2、最大并发数
并发数是指同一时刻数据库能处理多少个请求,由 max_connections 和 max_user_connections 决定。max_connections 是指 MySQL 实例的最大连接数,上限值是 16384,max_user_connections 是指每个数据库用户的最大连接数。MySQL 会为每个连接提供缓冲区,意味着消耗更多的内存。如果连接数设置太高硬件吃不消,太低又不能充分利用硬件。一般要求两者比值超过 10%,计算方法如下:
max_used_connections / max_connections * 100% = 3/100 *100% ≈ 3%
查看最大连接数与响应最大连接数:
show variables like '%max_connections%';
show variables like '%max_user_connections%';
在配置文件 my.cnf 中修改最大连接数
[mysqld]
max_connections = 100
max_used_connections = 20
3、查询耗时 0.5 秒