首页 > 其他分享 >InnoDB-Online_DDL

InnoDB-Online_DDL

时间:2024-08-11 14:57:12浏览次数:15  
标签:文件 临时 LOCK DDL InnoDB Online 操作

InnoDB Online DDL

1.Online DDL的优势

在繁忙的生产环境中提高响应速度和可用性,在这种环境中,使一个表在几分钟或几小时内不可用是不现实的。
对于就地操作,在DDL操作期间使用LOCK子句调整性能和并发性之间的平衡的能力。
比表复制方法占用更少的磁盘空间和I/O开销

2.Online DDL的使用

通常,您不需要做任何特别的事情来启用在线DDL。默认情况下,MySQL会立即执行该操作,或者在允许的情况下就地执行,并且锁的数量尽可能少。
可以使用ALTER TABLE语句的ALGORITHM和LOCK子句控制DDL操作的各个方面。这些子句放在语句的末尾,用逗号与表和列规范分隔。

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

LOCK子句可用于原地执行的操作,用于微调操作期间对表的并发访问程度。对于立即执行的操作,只支持LOCK=DEFAULT。算法子句主要用于性能比较,并在遇到问题时作为旧的表复制行为的备用方案。
LOCK=EXCLUSIVE:阻塞读和写
LOCK=DEFAULT :尽可能的不阻塞读和写
LOCK=NONE :允许读和写
LOCK=SHARED:允许写

ALGORITHM=INSTANT
ALGORITHM=COPY
ALGORITHM=INPLACE.

ONLINE DDL的三个阶段
1.初始化
2.执行
3.提交表定义

3.Online DDL的成本评估

DDL操作的性能在很大程度上取决于该操作是否立即就地执行,以及是否重新构建表。

在对一个大表进行DDL操作之前,需要检查DDL操作的快慢

克隆表结构。
用少量数据填充克隆表
在克隆表上运行DDL操作。

检查“行影响”值是否为零。非零值表示操作复制表数据,这可能需要特殊的规划。例如,您可以在计划的停机期间执行DDL操作,或者在每个复制从服务器上一次执行一个DDL操作。

Query OK, 0 rows affected (21.42 sec) --没有复制数据

Query OK, 1671168 rows affected (1 min 35.54 sec) --复制数据

4.Online DDL的空间要求

(1)临时日志文件
innodb_online_alter_log_max_size参数,默认128M,如果临时日志文件超过此参数值,会抛出DB_ONLINE_LOG_TOO_BIG错误。大的innodb_online_alter_log_max_size参数值允许更多的Online DDL操作,但这也意味着DDL结束时更长的锁表时间。

(2)临时排序文件
重建表的在线DDL操作在创建索引时将临时排序文件写入MySQL临时目录(Unix上为$TMPDIR, Windows上为%TEMP%,或由——TMPDIR指定的目录)。在包含原始表的目录中不会创建临时排序文件。每个临时排序文件都足够容纳一列数据,当数据合并到最终的表或索引时,每个排序文件都会被删除。涉及临时排序文件的操作可能需要相当于表中数据量加上索引的临时空间。如果在线DDL操作使用了数据目录所在文件系统的所有可用磁盘空间,则上报错误。
如果MySQL临时目录不够大,不能容纳排序文件,则将tmpdir设置为其他目录。另外,为在线DDL操作定义一个单独的临时目录 innodb_tmpdir。引入这个选项是为了帮助避免由于大型临时排序文件而可能发生的临时目录溢出。

(3)中间表文件

一些重建表的在线DDL操作在与原始表相同的目录中创建临时中间表文件。中间表文件可能需要与原始表大小相等的空间。中间表文件名以#sql-ib前缀开始,只在在线DDL操作期间短暂出现。

5.Online DDL的限制

在线DDL无法暂停,无法限制IO和CPU的使用

回滚和失败的DDL的代价可能会更高

长时间运行在线DDL操作可能导致复制滞后。在线DDL操作必须在主节点上运行完之后才能在从节点上运行。此外,在主服务器上并发处理的DML,只有在从服务器上的DDL操作完成后,才在从服务器上处理

标签:文件,临时,LOCK,DDL,InnoDB,Online,操作
From: https://blog.csdn.net/qq_29431123/article/details/141105878

相关文章

  • 搜索之meet in middle(有效的小方法)
    题目:[https://www.luogu.com.cn/problem/P2962](P2962[USACO09NOV]LightsG)算法:meetinmiddle(折半搜索)思路:有\(35\)个点,总共的操作状态有\(2^{35}\)种情况。如果我们采用一般的搜索方式,时间上会毫不犹豫得爆掉。所以,我们要用折半搜索的方式。将所有的点拆分成两个集合,对......
  • 基于paddlehub 未戴口罩检测算法
    一、简介以前大夏天戴着口罩别人觉得你不正常,现在上街不戴口罩你不正常。本文要讲的未戴口罩算法是基于paddlehub提供的模型,paddlehub是百度飞浆(PaddlePaddle)下的深度学习模型开发工具。PaddleHub旨在为开发者提供丰富的、高质量的、直接可用的预训练模,先看实际效果图......
  • DPDI online在线调度系统介绍
    DPDIonline产品简介DPDIOnline是一款基于Kettle的强大在线任务调度平台,凭借其高效与灵活性,专为调度和监控Kettle客户端生成的ETL任务而设计DPDIOnline功能特性多服务器多版本支持:无缝整合不同服务器和Kettle版本,确保任务执行兼容性和一致性联合开发:由三倍镜成员......
  • 使用触发器来审计表的DML、DDL操作
    最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计。原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表。--启用对表DEPT的插入、更新和删除操作的审计AUDITINSERT,UPDATE,DELETEONDEPTBYACCE......
  • 使用触发器来审计表的DML、DDL操作
    最近帮客户排查某问题时,因为怀疑应用对某张配置表有变更,所以需要对这张表的所有操作进行审计。原本Oracle对某张表的审计是非常方便的,一条命令就可以实现,也不需要费心自定义审计表。--启用对表DEPT的插入、更新和删除操作的审计AUDITINSERT,UPDATE,DELETEONDEPTBYACCE......
  • fiddler - 对模拟器app抓包配置
    1.fiddler部分tools》options中, 这几个配置勾选跟我的一致,端口使用8888 然后导出证书 会导出到桌面 然后pc授信证书 然后重启fiddler 2.模拟器部分将证书拉入模拟器,然后点击证书安装,输入的名称可以随便写然后打开wlan,对wifi的修改代理为手动【模拟器有些......
  • Fiddler启动弹框
    1、首次使用Fiddler时,关于AppContainer隔离技术弹框警告提示双击Fiddler.exe,启动Fiddler时弹出“AppContainerConfiguration”对话框,点击“cancel”就行。(弹框界面点击“Yes”进入Windows官网详细了解,点击“No”关闭窗口,点击“Cancel"禁用这个警告)弹框翻译如下↓......
  • 百度飞桨paddle提供李宏毅的《机器学习》课程、可以使用免费算力一键运行项目,快来一起
    李宏毅的课程《机器学习》是一门深入浅出、内容丰富的在线课程,由台湾大学李宏毅教授主讲。我正在AIStudio学习『李宏毅课程-机器学习』,还可以使用免费算力一键运行项目,快来一起学习吧。点击进入一、课程概述李宏毅的《机器学习》课程旨在通过生动的讲解和丰富的实例,帮助......
  • 使用 addRouteMiddleware 动态添加中间
    title:使用addRouteMiddleware动态添加中间date:2024/8/4updated:2024/8/4author:cmdragonexcerpt:摘要:文章介绍了Nuxt3中addRouteMiddleware的使用方法,该功能允许开发者动态添加路由中间件,以实现诸如权限检查、动态重定向及路由变化时的特定操作。内容涵盖路由中间......
  • FastAPI Starlette Middleware 会话 - 重定向后无法访问会话数据
    我正在使用FastAPI作为后端编写一个简单的Web应用程序,并且我希望通过AzureB2C实现身份验证。这一切的逻辑现在并不重要,我只是想能够测试一下我是否可以使用不同的方法成功登录。但是,在尝试了很长一段时间之后,我不明白,为什么我可以重定向后不会从会话中检索用户的数据......