MySQL架构优化:定时计划任务与表分区
转自:
MySQL架构优化实战系列3:定时计划任务与表分区 - 今日头条(TouTiao.com)
http://toutiao.com/a6304736482361049345/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=4710631352&utm_medium=toutiao_ios
定时计划任务
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@localhostsmudge]# 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服务
添加表分区
查看表文件
可见分区成功了
MySQL架构优化:定时计划任务与表分区的更多相关文章
- MySQL架构优化实战系列3:定时计划任务与表分区
原创 2016-07-08 汤抗 DBAplus社群 一 定时计划任务 1.概论 mysql计划任务可以定时更新数据库表或者做大文件的汇总表. 2.配置 开启计划任务 SHOW VARIABL ...
- MySQL · 性能优化 · 条件下推到物化表
MySQL · 性能优化 · 条件下推到物化表 http://mysql.taobao.org/monthly/2016/07/08/ 背景 MySQL引入了Materialization(物化)这一 ...
- MySQL架构优化实战系列1:数据类型与索引调优全解析
一.数据类型优化 数据类型 整数 数字类型:整数和实数 tinyint(8).smallint(16).mediuint(24).int(32).bigint(64) 数字表示对应最大存储位数,如 ...
- Mysql SQL优化&执行计划
SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...
- MySQL架构优化实战系列2:主从复制同步与查询性能调优
- MySQL架构优化实战系列4:SQL优化步骤与常用管理命令
- Mysql 性能优化教程
Mysql 性能优化教程 目录 目录 1 背景及目标 2 Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 ...
- 转 Mysql性能优化教程
Mysql性能优化教程 背景及目标 厦门游家公司(4399.com)用于员工培训和分享. 针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 针对高并发,海量数据的互联网环境. 本文语言为 ...
- MySQL 执行优化查询
查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.当向MySQL发送一个请求的时候,MySQL执行过程如图1-1所示: 图1-1 查询执 ...
随机推荐
- VS2013程序打包部署详细图解
目录(?)[+] 新建项目 FILE –> New –> Project,如下图所示: 注意:如果 InstallShield Limited Edition Project 显 ...
- php 过滤emoji表情
function yz_expression() { foreach ($_POST as $key => &$value) { $value = preg_replace_callba ...
- 《Think in UML》读后感
- 使用node.js创建第一个应用
node.js应用组成部分 1.引入require模块:我们可以使用require指令来载入Node.js模块. 2.创建服务器:服务器可以监听客户端的请求,类似于Apache,Nninx等HTTP服 ...
- C语言介绍
以下东东转自百度百科 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔实验室的Dennis M. Ritchie于1972年推出,1978年后,C语言已先后被 ...
- 自定义NSOperation
一直在思考,每次异步请求都会创建一个新线程,如果我同时发100个异步请求,这样会导致我的内存爆满,应用程序奔溃,因为iOS对开线程有着约束,不能开很多个线程,这就要求我们必须对异步请求进行控制,我一直 ...
- spark介绍
什么是Spark Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hado ...
- 读书有感——《从毕业生到程序员使用C#开发商业软件》
本来想自己写个读书感悟之类的东西,但是苦于自己语文水平太差,算了,我把里面觉得很赞的内容摘抄下来就好了(学习都是从模仿开始的嘛). 书籍:<从毕业生到程序猿使用C#开发商业软件> 作者:袁 ...
- mongodb常见问题
1.count统计结果错误 这是由于分布式集群正在迁移数据,它导致count结果值错误,需要使用aggregate pipeline来得到正确统计结果,例如: db.collection.aggreg ...
- ibatis resultMap 结果集映射
1.结果集映射 就是将返回的记录,逐个字段映射到java对象上:如果数据库字段与java对象的成员变量名对应的话,则使用resultClas即可 2.实现 结合 ibatis初探这篇文章中提到的pro ...