MySQL中ALTER LOGFILE GROUP 语句详解

在 MySQL 的 InnoDB 存储引擎中,ALTER LOGFILE GROUP 语句用于修改重做日志组(redo log group)的配置。重做日志是 InnoDB 用来保证事务持久性的一个关键组件,它们用于在系统崩溃后恢复数据。

InnoDB 支持多个重做日志组,每个组可以有多个重做日志文件。在大多数情况下,InnoDB 会自动管理这些日志文件,但在某些高级配置中,管理员可能需要手动干预。

ALTER LOGFILE GROUP 语句的基本语法如下:

ALTER LOGFILE GROUP logfile_groupADD UNDOFILE 'file_name'[INITIAL_SIZE [=] size][WAIT]ENGINE [=] engine_name

ALTER LOGFILE GROUP ... ADD UNDOFILE 语句实际上是针对 InnoDB 的撤销表空间(undo tablespace)而不是重做日志组的。在 MySQL 8.0 及之后的版本中,InnoDB 引入了独立的撤销表空间来替代早期的系统表空间(system tablespace)中的撤销段(undo segments)。

ALTER LOGFILE GROUP ... ADD UNDOFILE 语句允许您向现有的撤销表空间组中添加一个新的撤销文件(undo file)。但是,请注意,此语句是特定于撤销表空间,而不是重做日志组。

注意:

NDB Cluster(Network DataBase Cluster)是 MySQL Cluster 的一部分,它是一个高度可用的、分布式的数据库系统,旨在提供实时的、高吞吐量的数据访问。在 NDB Cluster 中,Disk Data 对象(如表空间、撤销日志文件、数据文件等)共享相同的命名空间,这意味着每个 Disk Data 对象都必须具有唯一的名称。

具体来说,NDB Cluster 不允许具有相同名称的不同类型的 Disk Data 对象存在。例如,您不能有一个名为 "my_data" 的表空间和另一个同样名为 "my_data" 的撤销日志文件,或者一个名为 "my_undo" 的撤销日志文件和另一个名为 "my_undo" 的数据文件。这是为了确保在 NDB Cluster 内部可以准确地识别和引用每个 Disk Data 对象。

INITIAL_SIZE 参数是用于设置 InnoDB 撤销表空间或撤销日志文件(undo log file,在某些上下文中)的初始大小的。如果未指定此参数,则撤销文件的初始大小默认为 134217728 字节(即 128 MB)。

在指定 INITIAL_SIZE 时,您可以在大小值后面跟随一个单字母的缩写来表示数量级,这与在 my.cnf(或 my.ini,取决于操作系统和 MySQL 版本)配置文件中使用的缩写类似。常见的缩写包括:

  • M:表示兆字节(megabytes)
  • G:表示吉字节(gigabytes)

在 32 位系统上,由于内存地址空间的限制,INITIAL_SIZE 参数的最大值通常是 4294967296 字节,即 4 GB(因为 2^32 字节等于 4 GB,但实际的可用空间可能会因系统和其他因素而有所减少)。

对于 INITIAL_SIZE 的最小值,官方文档或相关 Bug 报告通常建议至少为 1048576 字节,即 1 MB。这是因为过小的初始大小可能会导致频繁的文件扩展操作,这可能会影响性能。

注意:WAIT被解析,但在其他情况下被忽略。该关键字目前没有任何效果,用于将来的扩展。

ENGINE 子句是在定义或修改 NDB Cluster 相关的表或表组时使用的,用于指定所使用的存储引擎。在 NDB Cluster 中,ENGINE 子句是必需的,因为它决定了表或表组将使用哪种存储引擎。

对于 NDB Cluster,目前接受的 engine_name 值只有“NDBCLUSTER”和“NDB”。这两个值实际上是等效的,都表示使用 NDB Cluster 存储引擎。尽管“NDB”是一个较旧的名称,但在 MySQL NDB Cluster 中,这两个名称都仍然有效,并且通常都可以使用。

下面是一个示例,假设日志文件组lg_3已经使用CREATE LOGFILE group创建:

ALTER LOGFILE GROUP lg_3ADD UNDOFILE 'undo_10.dat'INITIAL_SIZE=32MENGINE=NDBCLUSTER;

当您使用 ALTER LOGFILE GROUP 语句并指定 ENGINE = NDBCLUSTER(或者等效的 ENGINE = NDB)时,您会在 NDB Cluster 的每个数据节点上创建一个撤销日志文件(undo log file)。要验证这些撤销文件是否已创建并获取有关它们的信息,您可以查询 Information Schema 的 FILES 表。

以下是一个示例查询,展示了如何检查 NDB Cluster 中的撤销日志文件:

mysql> SELECT FILE_NAME, LOGFILE_GROUP_NUMBER, EXTRA-> FROM INFORMATION_SCHEMA.FILES-> WHERE LOGFILE_GROUP_NAME = 'lg_3';
+-------------+----------------------+----------------+
| FILE_NAME   | LOGFILE_GROUP_NUMBER | EXTRA          |
+-------------+----------------------+----------------+
| newdata.dat |                    0 | CLUSTER_NODE=3 |
| newdata.dat |                    0 | CLUSTER_NODE=4 |
| undo_10.dat |                   11 | CLUSTER_NODE=3 |
| undo_10.dat |                   11 | CLUSTER_NODE=4 |
+-------------+----------------------+----------------+
4 rows in set (0.01 sec)

在 NDB Cluster 中,UNDO_BUFFER_SIZE 指定的内存是从全局内存池中分配的,这个全局内存池的大小由 SharedGlobalMemory 数据节点配置参数的值确定。此外,InitialLogFileGroup 数据节点配置参数的设置也可能为 UNDO_BUFFER_SIZE 隐式指定一个默认值。

其中:

  • UNDO_BUFFER_SIZE:指定了用于存储撤销日志条目(这些条目在事务被回滚或用于 MVCC 操作时可能需要)的内存大小。这个值通常根据系统的工作负载和性能需求来设置。

  • SharedGlobalMemory:定义了 NDB Cluster 中所有节点共享的全局内存池的大小。这个内存池用于存储各种数据结构和缓存,包括撤销日志缓冲区。增加这个值可能会提高性能,但也会增加内存使用。

  • InitialLogFileGroup:通常用于定义日志文件组的初始大小和配置。在某些 NDB Cluster 版本和配置中,这个参数的设置可能会隐式地影响 UNDO_BUFFER_SIZE 的默认值,尽管这不是一个直接的关联。具体的行为取决于 NDB Cluster 的版本和配置。

当调整这些参数时,需要确保全局内存池的大小足够大,以容纳所有必要的内存需求,包括撤销日志缓冲区、数据缓存、索引缓存等。如果全局内存池太小,可能会导致性能下降或系统不稳定。

实际上,ALTER LOGFILE GROUP 语句在 NDB Cluster 中主要与磁盘数据(Disk Data)存储引擎相关,但需要注意的是,NDB Cluster 本身是一个内存数据库集群,其主要数据存储是在内存中完成的。然而,NDB Cluster 也支持将某些数据或日志存储在磁盘上,以提高持久性和恢复能力。

在 NDB Cluster 中,当您使用磁盘数据表(Disk Data tables)时,这些表的数据实际上是在内存中处理的,但它们的某些部分(如数据和索引的镜像)可以被配置为存储在磁盘上。这些磁盘数据表使用了一种称为 DiskData 的存储引擎,而不是 NDB Cluster 的主内存存储引擎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周转车配料拣货方案

根据周转车安装的电子标签,被悬挂的扫码器扫到墨水屏显示的二维码,投屏发送配料拣货的数据。 方便快捷分拣物料

20240625(周二)欧美股市总结:标普纳指止步三日连跌,英伟达反弹6.8%,谷歌微软新高,油价跌1%

美联储理事鲍曼鹰派发声,若通胀没有持续改善将支持加息,加拿大5月CPI重新加速,对加拿大央行7月降息构成阻碍。美股走势分化,道指收跌近300点且六日里首跌,英伟达市值重上3.10万亿美元,芯片股指显著反弹1.8%…

想要用tween实现相机的移动,three.js渲染的canvas画布上相机位置一点没动,如何解决??

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

linux 批量mv批量cp | 批量复制粘贴剪切

一、【问题描述】 cp 和 mv这种基本命令,多对一是可以做的 比如 cp /conf/* /despath mv /conf/* /path/bak/ 但是一对多会报错,加-r参数也会报错,而且会有问题,不建议这么做,找一台测试机器你会发现加了-r甚至复制…

每日新闻掌握【2024年6月26日 星期三】

2024年6月26日 星期三 农历五月廿一 大公司/大事件 OpenAI将终止对中国提供API服务 从6月24日晚间开始,已有多名用户收到了来自OpenAI的邮件。该邮件表示,“我们的数据显示您的组织来自OpenAI目前不支持的地区的API流量。”邮件进一步表示,…

高内聚低耦合【代码:ShoppingCart(一个类中提供多种操作购物车的方法体现高内聚)支付方式接口(信用卡类、微信支付类实现支付接口 体现低耦合)】

高内聚低耦合 ⾼内聚指的是:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越⾼,则内聚性越⾼,即 “⾼内聚”。 低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。修…

第1章 物联网模式简介---独特要求和体系结构原则

物联网用例的独特要求 物联网用例往往在功耗、带宽、分析等方面具有非常独特的要求。此外,物联网实施的固有复杂性(一端的现场设备在计算上受到挑战,另一端的云容量几乎无限)迫使架构师做出艰难的架构决策和实施选择。可用实现技…

【自动调参】年化29.3%,最大回撤18.5%​:lightGBM的参数优化

原创文章第570篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 研报复现继续:【研报复现】年化27.1%,人工智能多因子大类资产配置策略之benchmark 昨天调了一版参数,主要是lambda_l1, lambda_l2,防…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

使用Python实现网页数据获取与处理:以财经新闻为例

在现代数据驱动的世界中,获取并处理丰富的网页数据是非常重要的技能。本文将介绍如何使用Python编写一个程序,自动获取财经新闻数据并进行处理。这不仅可以帮助我们快速获取最新的财经信息,还可以为后续的数据分析和研究提供支持。 环境准备…

宝兰德受邀出席华为开发者大会2024,携手共绘基础软件新篇章

6月21日-23日,华为开发者大会(HDC 2024)在东莞松山湖举行,作为全球开发者的年度盛会,本次大会汇聚了众多业界精英与前沿技术。华为分享了HarmonyOS、盘古大模型、昇腾AI云服务、GaussDB数据库、自研仓颉编程语言等最新…

微信小程序录音

微信小程序的录音功能通过一组API来实现,主要涉及录音管理器(RecorderManager)的使用。下面是详细的实现步骤和代码示例: 初始化录音管理器 首先需要获取录音管理器的实例,可以通过 wx.getRecorderManager() 方法来获…

【IM即时通信 功能介绍】客户端用户在线状态订阅

本文档旨在介绍客户端用户在线状态订阅功能,该功能允许开发者通过 SDK 接口实时监控和接收指定用户的在线或离线状态变更通知。这一功能对于需要实时交流、状态同步或用户活动监控的应用场景至关重要。 功能特点 实时状态通知 跨平台通知:订阅成功后&…

使用 MediaPipe 实现实时手部追踪和手势识别 | Rerun展示

点击下方卡片,关注“小白玩转Python”公众号 在本文中,我将展示一个使用 MediaPipe Python 和 Rerun SDK 进行手部追踪和手势识别的示例。如果您有兴趣深入了解并扩展您的知识,我将指导您如何安装 MediaPipe Python 和 Rerun SDK 来进行手部追…

深入Scala的变量声明与类型推断:语法糖下的智能推导

Scala是一种静态类型语言,以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念,它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…

深入理解Python中的*和**在函数参数与调用中的奥秘

深入理解Python中的*和**在函数参数与调用中的奥秘 在Python编程中,*和**这两个操作符在函数参数和函数调用中扮演着特殊的角色。它们分别用于处理位置参数(positional arguments)和关键字参数(keyword arguments)&am…

Linux部署SVN

一.下载与安装 (1)yum安装 yum install subversion (2)源文件编译安装 ①下载svn源文件 subversion-xxx.tar.gz(subversion 源文件) subversion-deps-xxx.tar.gz(subversion依赖文件&…

RAG项目工期

工期 第一期,基于term的检索,大模型生成 第二期,搭建前端界面,落地 上传pdf,一键解析,上传多个pdf 提问 第三期,使用向量检索,向量数据库选型 第四期,优化排序。 te…

BatchNorm和LayerNorm

参考链接 参考链接 参考链接

项目四 OpenStack身份管理

任务一 理解身份服务 1.1 •Keystone的基本概念 • 认证 ( Authentication ) —— 确认用户身份的过程 ,又称身份验证 。 • 凭证 ( Credentials ) —— 又 称凭据,是用于 确认用户身份的数据 。 • 令牌…