转自:

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架构优化:定时计划任务与表分区的更多相关文章

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

    原创 2016-07-08 汤抗 DBAplus社群 一 定时计划任务 1.概论   mysql计划任务可以定时更新数据库表或者做大文件的汇总表.   2.配置 开启计划任务 SHOW VARIABL ...

  2. MySQL · 性能优化 · 条件下推到物化表

    MySQL · 性能优化 · 条件下推到物化表 http://mysql.taobao.org/monthly/2016/07/08/ 背景 MySQL引入了Materialization(物化)这一 ...

  3. MySQL架构优化实战系列1:数据类型与索引调优全解析

    一.数据类型优化 数据类型 整数   数字类型:整数和实数 tinyint(8).smallint(16).mediuint(24).int(32).bigint(64) 数字表示对应最大存储位数,如 ...

  4. Mysql SQL优化&执行计划

    SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...

  5. MySQL架构优化实战系列2:主从复制同步与查询性能调优

  6. MySQL架构优化实战系列4:SQL优化步骤与常用管理命令

  7. Mysql 性能优化教程

    Mysql 性能优化教程 目录 目录 1 背景及目标 2 Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 ...

  8. 转 Mysql性能优化教程

    Mysql性能优化教程 背景及目标 厦门游家公司(4399.com)用于员工培训和分享. 针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 针对高并发,海量数据的互联网环境. 本文语言为 ...

  9. MySQL 执行优化查询

    查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.当向MySQL发送一个请求的时候,MySQL执行过程如图1-1所示: 图1-1 查询执 ...

随机推荐

  1. Python笔记3-20151027

    函数的参数 Python的函数定义非常简单,但是灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码 ...

  2. mongoDB3--mongoDB的基本操作。

    [MongoDb探究]03-mongodb基本操作语句 标签: mongodbdb.createCollectiondb.collectionName.indb.dropDatabasedb.coll ...

  3. 三个JS函数闭包(closure)例子

    闭包是JS较难分辨的一个概念,我只是按自己的理解写下来,如有不对还请指出. 函数闭包是指当一个函数被定义在另一个函数内部时,这个内部函数使用到的变量会被封闭起来形成一个闭包,这些变量会保持形成闭包时设 ...

  4. mysql读写分离配置,利用mybatis实现,解释为什么dynamicDataSource不行

    之前发布了mysql主从配置的博客,配置完成之后,那么我们肯定要拿主从来做点什么. 我第一想到的就是mysql的读写分离,让读写分离之后可以大大的提供mysql的性能,比单纯用mysql主从做备份好很 ...

  5. Floodfill算法——求独立子图个数

    Floodfill--漫水填充法(也称种子填充法)简单来说就是求一个图中独立子图的个数并将其描述出不同的状态.Floodfill在计算机图形学有着非常广泛的运用,比如图像分割.物体识别之类.基于Flo ...

  6. 解决win7和ubuntu双系统ubuntu不能上网的问题

    1.电脑基本配置如下. 我的电脑 戴尔 OptiPlex 9020 Mini Tower操作系统 Windows 7 专业版 64位 SP1 Ubuntu 14.04 2.装系统的过程不再赘述. 可以 ...

  7. SQL 查询时间段内的时间

    declare @dt1 as datetime declare @dt2 as datetime set @dt1 = '2008-01-01' set @dt2 = '2009-01-01' ;w ...

  8. git 提高下载速度

    1.  直接下载分支,就不用下载不需要的源码了. git clone --depth 1 git://github.com/TI-OpenLink/wl18xx.git  --branch ol_r8 ...

  9. iptables-1.4.19 移植到linux

    ------------------------------------------------------------------------------------------ https://g ...

  10. ubuntu 设置vpn

    百度了资料 http://jingyan.baidu.com/article/fa4125aca7f1b628ad709271.html 1. 设置 VPN CONNECTION 2.configur ...