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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

 

定时计划任务


1、概论


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


2、配置


  • 开启计划任务


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

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


永久生效


 

可见已经开启


3、语法体



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



  • 临时关闭事件

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,..] 将表分三个区



对已有的表创建分区


   


  • 可能遇到的错误



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


  • 查看现在数据库文件


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



  • 插入数据测试




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


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



3、基于list分区


  • 分区语句


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


 


  • 表文件



4、基于hash分区


常用于对主键的快速分区


  • 分区语句


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


 


  • 表文件



5、基于key分区


  • 建表分区


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



  • 添加分区



  • 表文件



6、对于Innodb引擎表的分区


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


默认my.cnf文件



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


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


cd usr/local/mysql/var/smudge



只有一个文件 shop.frm



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


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


  • 设置成独立表空间


添加一行 innodb_file_per_table



service mysql restart 重启mysql服务


  • 添加表分区



  • 查看表文件



可见分区成功了。


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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
5月前
|
人工智能 监控 前端开发
支付宝 AI 出行助手高效研发指南:4 人团队的架构迁移与提效实战
支付宝「AI 出行助手」是一款集成公交、地铁、火车票、机票、打车等多项功能的智能出行产品。
857 21
支付宝 AI 出行助手高效研发指南:4 人团队的架构迁移与提效实战
|
5月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
291 7
|
5月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
956 3
|
5月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
1001 0
|
6月前
|
存储 设计模式 人工智能
AI Agent安全架构实战:基于LangGraph的Human-in-the-Loop系统设计​
本文深入解析Human-in-the-Loop(HIL)架构在AI Agent中的核心应用,探讨其在高风险场景下的断点控制、状态恢复与安全管控机制,并结合LangGraph的创新设计与金融交易实战案例,展示如何实现效率与安全的平衡。
1083 0
|
3月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
3月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
4月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
518 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
4月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
606 7

推荐镜像

更多