为什么阿里不推荐使用MySQL分区表?(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 分区表:在示例表插入两条记录,按分区规则,记录分别落在p_2018和p_2019分区。可见,该表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件:对于引擎层,这是4个表对于Server层,这是1个表

分区表有什么问题,为什么公司规范不让使用分区表呢?

什么是分区表

image.png

在示例表插入两条记录,按分区规则,记录分别落在p_2018p_2019分区。

可见,该表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件:

  • 对于引擎层,这是4个表
  • 对于Server层,这是1个表

分区表的引擎层行为

举个在分区表加间隙锁的例子,目的是说明对于InnoDB来说,这是4个表。

  • 分区表间隙锁


session_1 session_2
T1 begin;
select * from tt
where ftime=‘2017-5-1’
for update;


T2 insert into tt values (‘2018-2-1’, 1); (Query OK)
insert into tt values (‘2017-12-1’, 1); (阻塞)

初始化表tt时,只插入两行数据。session1的select语句对索引ftime上这两个记录之间的间隙加了锁。如果是一个普通表的话,T1时刻,在表t的ftime索引上,间隙和加锁状态应该如下

  • 普通表的加锁范围
  • image.png

即‘2017-4-1’ 和’2018-4-1’ 这两个记录之间的间隙会被锁住。

那sesion2的两条插入语句应该都要进入锁等待状态。


但session2的第一个insert成功。因为对于引擎,p_2018和p_2019是两个不同表,即2017-4-1的下一个记录并不是2018-4-1,而是p_2018分区的supremum。

所以T1,在表t的ftime索引上,间隙和加锁的状态其实:

  • 分区表tt的加锁范围

image.png

由于分区表规则,session1的select只操作了分区p_2018,因此加锁范围就是上图绿色。

所以,session2写2018-2-1成功,而要写2017-12-1,就要等session1的间隙锁。

这时show engine innodb status的部分结果:

  • session2被锁住信息

image.png

MyISAM分区表

# 把表tt改成MyISAM表
alter table t engine=myisam

对于MyISAM引擎来说,这是4个表。

  • 用MyISAM表锁验证
session_1 session_2
alter table t engine=myisam;
update tt set c=sleep(100)
where ftime=‘2017-4-1’;



select * from tt where ftime=‘2018-4-1’;
(Query OK)
select * from tt where ftime=‘2017-5-1’;
(阻塞)

在session1,sleep(100)将该语句的执行时间设为100s。由于MyISAM引擎只支持表锁,所以这条update语句会锁住整个表tt上的读。


但session2的第一条查询语句可以正常执行,第二条语句才进入锁等待。


因为MyISAM的表锁实现在引擎层,session1加的表锁,其实是锁在分区p_2018。因此,只会堵住在这个分区上执行的查询,其他分区查询不受影响。


分区表使用起来看来挺好使的呀,为啥禁用?

使用分区表的一个重要原因就是单表过大。那若不使用分区表,就要手动分表。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
23天前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
5月前
|
分布式计算 DataWorks 关系型数据库
实时数仓 Hologres产品使用合集之如何将MySQL数据初始化到分区表中
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
3月前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
715 0
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL场景评测:阿里云数据库服务的新高度
随着企业数字化转型的加速,对数据库的稳定性和性能提出了更高要求。阿里云的PolarDB MySQL应运而生,作为一款高度兼容MySQL协议的云原生数据库,它在性能、扩展性和安全性方面展现出了卓越的能力。本文将基于阿里云PolarDB MySQL的官方评测,深入探讨其在实际应用场景中的表现,以及为用户带来的价值。
152 0
|
4月前
|
存储 关系型数据库 数据库
MySQL设计规约问题之是否可以使用分区表
MySQL设计规约问题之是否可以使用分区表
|
5月前
|
存储 关系型数据库 MySQL
MySQL 分区表
MySQL 分区表
51 4
|
5月前
|
存储 监控 关系型数据库
MySQL普通表转换为分区表实战指南
MySQL普通表转换为分区表实战指南
|
5月前
|
存储 关系型数据库 MySQL
MySQL分区表:万字详解与实践指南
MySQL分区表:万字详解与实践指南
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.8-分区表
【MySQL技术内幕】4.8-分区表
101 0
下一篇
无影云桌面