MySQL 存储引擎
- InnoDB:是 MySQL 默认的存储引擎,支持事务、外键、行级锁等特性,适合处理高并发、数据完整性要求高的场景。
- MyISAM:不支持事务和外键,只支持表级锁,读写性能较高,但在数据完整性和并发处理方面不如 InnoDB,常用于只读或插入为主的应用场景。
- Memory:将数据存储在内存中,读写速度极快,但数据在服务器重启后会丢失,适用于临时数据存储和缓存。
- Archive:对于只有INSERT和SELECT操作的场景,如日志记录,可以考虑使用Archive引擎,它支持高并发的插入操作,但不是事务安全的。
行级锁
基本概念
行级锁是一种锁定粒度最小的锁机制,它只对当前操作的数据行进行加锁。当一个事务对某一行数据加锁后,其他事务可以同时对其他行数据进行读写操作,只有当其他事务也需要访问被锁定的这一行数据时,才会受到锁的限制。
特点
- 并发度高:由于只锁定当前操作的行,所以不同事务可以同时操作不同的行,大大提高了数据库的并发处理能力。
- 开销大:行级锁需要维护更多的锁信息,因此加锁和解锁的开销相对较大。
- 死锁风险:因为行级锁的使用更加灵活,多个事务之间可能会因为相互等待对方释放锁而导致死锁。
适用场景
- 适用于对数据的并发访问要求较高,且对特定行数据进行频繁更新、删除操作的场景,例如在线交易系统中对订单记录的处理。
表级锁
基本概念
表级锁是一种锁定粒度最大的锁机制,它对整个表进行加锁。当一个事务对某个表加锁后,其他事务无法对该表进行任何读写操作,直到锁被释放。
特点
- 并发度低:由于锁定了整个表,同一时间只能有一个事务对该表进行操作,因此并发处理能力较差。
- 开销小:表级锁只需要维护一个锁信息,加锁和解锁的开销相对较小。
- 死锁风险低:因为同一时间只有一个事务可以对表进行操作,所以死锁的风险相对较低。
适用场景
- 适用于对数据的一致性要求较高,但对并发访问要求较低的场景,例如数据仓库中的批量数据更新操作。
InnoDB
默认存储引擎
先加索引才能加外键约束
外键约束后,只能新增另一张表已有的k值
MyISAM
不支持事务
START TRANSACTION;
-- 执行一系列数据库操作
UPDATE myisamtest SET v = v - 100 WHERE k = 1;
-- 回滚事务
ROLLBACK;
START TRANSACTION;
-- 执行一系列数据库操作
UPDATE innodbtest SET v = v - 100 WHERE k = 1;
-- 回滚事务
ROLLBACK;
回滚后,innodbtest id=1的value不变,而myisamtest减少了100,因为不支持事务,无法回滚
Memory
存储在内存中,关机重启数据丢失
Archive
Archive无法修改,删除
并发量估计
硬件影响
- 低配置硬件
- 当服务器硬件为普通的家用级配置,如 1 - 2 核 CPU、4 - 8GB 内存和机械硬盘时,并发连接数达到 100 - 200 左右,MySQL 可能就会出现性能问题。因为在这种情况下,CPU 处理能力有限,内存不足以缓存大量数据和索引,机械硬盘的读写速度慢,会导致查询响应时间变长,甚至出现卡顿。
- 中等配置硬件
- 对于采用 4 - 8 核 CPU、16 - 32GB 内存以及 SSD 硬盘的服务器,在并发连接数达到 500 - 1000 时,可能会接近性能瓶颈。此时,虽然硬件性能有所提升,但随着并发连接数的增加,CPU 可能会出现较高的使用率,内存也可能会出现紧张的情况,SSD 的读写性能也可能无法满足高并发的需求。
- 高配置硬件
- 即便使用了高端的 16 核以上 CPU、64GB 以上内存和高性能的 SSD 阵列,当并发连接数达到 2000 - 5000 甚至更高时,单台 MySQL 也可能会面临较大的压力。因为在高并发场景下,除了硬件资源的消耗,还会涉及到锁竞争、事务冲突等问题,进一步影响数据库的性能。
业务类型影响
- 读多写少业务