开发者社区> 努力酱> 正文

MySQL架构优化实战系列3:定时计划任务与表分区

简介:
+关注继续查看

 

定时计划任务


1、概论


mysql计划任务可以定时更新数据库表或者做大文件的汇总表。


2、配置


  • 开启计划任务


SHOW VARIABLES LIKE 'event_scheduler' 查看是否开启 off 表示未开启

set global event_scheduler =1 此次重启之后的mysql器件生效


20160711105135436.jpg

永久生效


20160711105122668.png 

可见已经开启


3、语法体


20160711105152413.jpg


4、周期或者时间点语法


  • 每1秒执行

on schedule every 1 second


  • 10天后执行

on schedule at current_timestamp + interval 10 day


  • 指定日期时间执行

on schedule at timestamp '2016-08-16 00:00:00'


  • 每天凌晨3点执行

on schedule every 1 day 
starts '2016-05-18 03:00:00' (设定从第二天凌晨3点开始)


  • 每天定时执行,5天后停止执行

on schedule every 1 day 
ends current_timestamp + interval 5 day


  • 5天后开启每天定时清空test表,一个月后停止执行

on schedule every 1 day
starts current_timestamp + interval 5 day
ends current_timestamp + interval 1 month


5、高级用法


  • 执行多条sql


20160711105159683.jpg


  • 临时关闭事件

alter event smudge_insert disable;


  • 临时开启事件

alter event smudge_insert enable;


  • 删除计划任务

drop event smudge_insert;


 

表分区


单张表超过1000W行已经算作是大数据存储场景。


常规海量数据优化:大表拆小表、sql语句优化,下面我们重点介绍大表拆小表的优化。


1、拆表方式


  • 水平拆表


将表user中的1000w行数据拆成user1表和user2表,每张表500w行数据
但是这样做法就是导致sql语句需要更改为 select user1,user2 ...
拆的越多,sql语句越长,所以不推荐此法拆表


  • 垂直分表


如将user表100个字段拆成表user_base(30字段)、表user_extend(20字段)

sql语句优化成 ... user_base left join user_extend on user_base.id = user_extend.id..


  • 表分区

对行水平进行分表,物理存储上分区存储,每个分表有独立的文件,应用程序上还是一张表。


Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。


  • Hash(哈希)–这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。

  • Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

  • List(预定义列表)–这种模式允许系统通过预定义的列表的值来对数据进行分割。


2、基于range分区


基于给定连续的区间的值对行进行分区。


  • 新建表user 基于salary区间进行表分区


以字段salary为准 按照区间 [0,1000] [1000,3000] [3000,..] 将表分三个区


20160711105209415.jpg


对已有的表创建分区


   20160711105218112.jpg


  • 可能遇到的错误


20160711105225758.jpg


这里的提示已经很明确了,分区的列必须是个主键列。所以我们给salary添加主键。


  • 查看现在数据库文件


[root@localhost smudge]# cd /usr/local/mysql/var


20160711105232790.jpg


  • 插入数据测试


20160711105238539.jpg


20160711105245431.jpg


可以插入更多的数据,观察分区文件的大小。


使用 watch -n1 ls -lh 每秒监测文件大小的变化:


20160711105254671.jpg


3、基于list分区


  • 分区语句


以area_id列为准, 按照华南和华北 将表分成两个区


 20160711105302973.jpg


  • 表文件


20160711105309222.jpg


4、基于hash分区


常用于对主键的快速分区


  • 分区语句


以主键id为准,hash算法将表平均分成4个区


 20160711105318119.jpg


  • 表文件


20160711105325148.jpg


5、基于key分区


  • 建表分区


和hash分区类似将表分成4个区


20160711105332268.jpg


  • 添加分区


20160711105340511.jpg


  • 表文件


20160711105346723.jpg


6、对于Innodb引擎表的分区


  • Innodb表默认是共享存储空间


默认my.cnf文件


20160711105354506.jpg


默认情况下Innodb是使用的共享表空间


当在库smudge中, 新建一张Innodb引擎的shop表


cd usr/local/mysql/var/smudge


20160711105400582.jpg


只有一个文件 shop.frm


20160711105407404.jpg


shop表的索引和数据都存在ibdata1文件中,共享存储空间的Innodb不可以分区!


所以我们要将Innodb表设置成独立表空间,索引和数据都存放在ibd文件中。


  • 设置成独立表空间


添加一行 innodb_file_per_table


20160711105413267.jpg


service mysql restart 重启mysql服务


  • 添加表分区


20160711105421523.jpg


  • 查看表文件


20160711105426334.jpg


可见分区成功了。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-07-08

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
2022年全新java架构技术框架Quarkus实战神仙文档
Quarkus是一款有别于传统Java架构的新技术框架。它建立在我们熟知的技术栈上,使用了诸多成熟的技术,如JPA、JAX-RS、EclipseVert.x、Eclipse MicroProfile和CDI等,并将这些技术与Kubernetes紧密融合在一起。用户可以借助Kubernetes高效的调度运维能力,最大限度地节约资源。
31 0
分布式系统开发实战:微服务架构,实战:基于CQRS微服务通信
Axon Framework是一个适用于Java的、基于事件驱动的轻量级CQRS框架,既支持直接持久化Aggregate状态,也支持采用EventSourcing。
29 0
分布式系统实战:什么是微服务架构?微服务架构与SOA架构的区别
自2014年业界提出“微服务(Microservices)”的概念以来,微服务架构就不断演进,并且日趋火爆。越来越多的企业拥抱微服务,期望通过微服务的架构来解决大型项目的管理与运维。
41 0
DDD实战之五:战略设计之上下文映射和系统分层架构(下)
DDD实战之五:战略设计之上下文映射和系统分层架构(下)
76 0
DDD实战之五:战略设计之上下文映射和系统分层架构(上)
DDD实战之五:战略设计之上下文映射和系统分层架构(上)
76 0
实战 | 基于 Serverless 技术的视频截帧架构如何实现?
视频直播是一种创新的在线娱乐形式,具有多人实时交互特性,在电商、游戏、在线教育、娱乐等多个行业都有着非常广泛的应用
29 0
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
82 0
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
36 0
【云原生|K8s系列第1篇】:K8s的基础概念、组件架构及实战安装
首先,K8s并不是一个传统意义上的 PaaS平台即服务的工具,它充分给使用者提供了很多很多选择的空间。
115 0
Spring Boot集成Mybatis-Plus多租户架构实战
Spring Boot集成Mybatis-Plus多租户架构实战
140 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于英特尔®架构的阿里云服务网格ASM技术加速应用服务加密通
立即下载
以银行架构视角解读和落实银行数字化转型的两份重磅指导文件
立即下载
云原生架构容器&微服务优秀案例集
立即下载