这些术语通常用于有关MySQL数据库服务器的信息中。 该词汇表起源于关于InnoDB存储引擎的术语的参考,并且大多数定义与InnoDB相关。
ARCHIVE
表格的
元
数据。
与
.ARZ文件
对比
。
具有此扩展名的文件始终包含在由
MySQL Enterprise Backup
产品
的
mysqlbackup
命令生成的
备份中
。
另请参阅 .ARZ文件 , MySQL Enterprise Backup , mysqlbackup命令 。
ARCHIVE表的数据。
与
.ARM文件
对比
。
具有此扩展名的文件始终包含在由
MySQL Enterprise Backup
产品
的
mysqlbackup
命令生成的
备份中
。
另请参见 .ARM文件 , MySQL Enterprise Backup , mysqlbackup命令 。
代表原子性,一致性,隔离性和耐久性的首字母缩略词。
这些属性在数据库系统中都是可取的,并且都与
事务
的概念密切相关
。
InnoDB
遵守ACID原则
的交易特征
。
事务是 可以 提交 或 回滚的 原子 工作单元 。 当事务对数据库进行多次更改时,要么在提交事务时所有更改都成功,要么在事务回滚时撤消所有更改。
数据库始终保持一致状态 - 每次提交或回滚后,以及事务正在进行中。 如果跨多个表更新相关数据,查询将查看所有旧值或所有新值,而不是旧值和新值的混合。
交易在进行过程中受到保护(隔离); 他们不能互相干扰或看到彼此未提交的数据。 这种隔离是通过 锁定 机制 实现的 。 经验丰富的用户可以调整 隔离级别 ,在 保证事务确实不会相互干扰的情况下, 减少保护以支持提高性能和 并发性 。
事务的结果是持久的:一旦提交操作成功,该事务所做的更改就可以避免电源故障,系统崩溃,竞争条件或许多非数据库应用程序易受攻击的其他潜在危险。
耐用性通常涉及写入磁盘存储,具有一定的冗余以防止写入操作期间的电源故障或软件崩溃。
(在
InnoDB
,
双重写入缓冲区
有助于提高耐用性。)
InnoDB 表 的算法, 可以平滑 检查点 引入的I / O开销 。 取而代之的 冲洗 所有已修改 页面 从 缓冲池 的 数据文件 一次,MySQL的定期刷新小套修改页面。 自适应刷新算法通过基于刷新率和 生成 重做 信息的 速度来估计执行这些周期性刷新的最佳速率来扩展该过程 。
通过
在内存中
构造
哈希索引
InnoDB
,可以使用
=
和
IN
运算符
加速查找的表
的优化
。
MySQL监视
表的
索引搜索
,如果查询可以从哈希索引中受益,它会自动为
经常访问的
索引
页
构建一个
。
从某种意义上说,自适应哈希索引在运行时配置MySQL以利用充足的主内存,更接近主内存数据库的体系结构。
此功能由
InnoDB
innodb_adaptive_hash_index
配置选项。
由于此功能有利于某些工作负载而非其他工作负载,并且用于哈希索引的内存在
缓冲池中
保留,因此
通常您应该使用此功能进行基准测试,无论是启用还是禁用。
哈希索引始终基于表上的现有 B树 索引 构建 。 MySQL可以在为B树定义的任意长度的密钥的前缀上构建哈希索引,具体取决于针对索引的搜索模式。 哈希索引可以是部分的; 整个B树索引不需要缓存在缓冲池中。
在MySQL 5.6及更高版本中,利用表的快速单值查找的另一种方法
InnoDB
是使用
InnoDB
memcached
插件。
有关
详细信息
,
请参见
第15.19节“InnoDB memcached插件”
。
异步I / O的
缩写
。
您可能会在
InnoDB
消息或关键字中
看到此首字母缩略词
。
另请参见 异步I / O 。
当
MySQL Enterprise Backup
产品
生成的
备份
不包括备份进行时发生的最新更改时,更新备份文件以包含这些更改的过程称为
应用
步骤。
它由
命令
apply-log
选项
指定
mysqlbackup
。
在应用更改之前,我们将文件称为 原始备份 。 应用更改后,我们将这些文件称为 准备备份 。 更改记录在 ibbackup_logfile 文件中; 完成应用步骤后,不再需要此文件。
另请参阅 热备份 , ibbackup_logfile , MySQL Enterprise Backup , 准备备份 , 原始备份 。
一种I / O操作,允许在I / O完成之前继续进行其他处理。
也称为
非阻塞I / O
,缩写为
AIO
。
InnoDB
对于可以并行运行而不影响数据库可靠性的某些操作,使用这种类型的I / O,例如将页面读入
尚未实际请求
的
缓冲池
,但可能很快就需要。
过去,
InnoDB
仅在Windows系统上使用异步I / O.
从InnoDB Plugin 1.1和MySQL 5.5开始,
InnoDB
在Linux系统上使用异步I / O.
此更改引入了依赖性
libaio
。
Linux系统上的异步I / O使用
innodb_use_native_aio
默认启用
的
选项进行
配置
。
在其他类Unix系统上,InnoDB仅使用同步I / O.
在SQL上下文中, 事务 是完全成功( 提交时 )或完全没有效果( 回滚时 )的工作单元。 事务的不可分割(“原子”)属性是 首字母缩写词 ACID中 的 “ A ” 。
原子 DDL 语句将 数据字典 更新, 存储引擎 操作和 与DDL操作关联的 二进制日志 写入组合到单个原子事务中。 即使服务器在操作期间暂停,事务也可以完全提交或回滚。 MySQL 8.0中添加了Atomic DDL支持。 有关更多信息,请参见 第13.1.1节“原子数据定义语句支持” 。
表列的属性(由
AUTO_INCREMENT
关键字
指定
),可在列中自动添加值的升序。
它为开发人员节省了工作,而不必在插入新行时生成新的唯一值。 它为查询优化器提供了有用的信息,因为已知该列不为null且具有唯一值。 来自这样一列的值可以在各种上下文中用作查找键,并且因为它们是自动生成的,所以没有理由改变它们。 因此,主键列通常被指定为自动递增。
使用基于语句的复制可能会出现自动增量列的问题,因为由于计时问题,重播从站上的语句可能不会产生与主服务器上相同的列值集。
如果有自动递增主键,则只能使用基于语句的复制设置
innodb_autoinc_lock_mode=1
。
如果您具有
innodb_autoinc_lock_mode=2
允许插入操作的更高并发性,则使用
基于行的复制
而不是
基于语句的复制
。
innodb_autoinc_lock_mode=0
除兼容性目的外,不应使用
该设置
。
连续锁定模式(
innodb_autoinc_lock_mode=1
)是MySQL 8.0.3之前的默认设置。
从MySQL 8.0.3开始,交错锁定模式(
innodb_autoinc_lock_mode=2
)是默认值,它反映了从基于语句的复制到基于行的复制的更改作为默认复制类型。
另请参见 自动增量锁定 , innodb_autoinc_lock_mode , 主键 , 基于行的复制 , 基于语句的复制 。
自动增量
主键
的便利性
涉及一些与并发的权衡。
在最简单的情况下,如果一个事务正在向表中插入值,则任何其他事务必须等待对该表执行自己的插入,以便第一个事务插入的行接收连续的主键值。
InnoDB
包括优化和
innodb_autoinc_lock_mode
选项,以便您可以在可预测的自动增量值序列和
插入操作的
最大
并发
之间配置和实现最佳平衡
。
另请参见 auto-increment , concurrency , innodb_autoinc_lock_mode 。
在每个
SQL
语句
之后
导致
提交
操作的
设置
。
不建议使用这种工作模式
表与
交易
跨越几个语句。
它可以帮助表现为
只读事务
上
的表,它从开销减少
锁定
和生成的
撤销
数据,尤其是在MySQL 5.6.4及以上。
它也适用于处理
不适用交易的表格。
InnoDB
InnoDB
MyISAM
能够应对主机上的故障,并在必要时从中恢复故障,包括MySQL,操作系统或可能导致停机的硬件和维护活动的故障。 通常将 可伸缩性 与大规模部署的关键方面相结合。
另请参见 可伸缩性 。
一种在数据库索引中很常用的树数据结构。
结构始终保持排序,从而能够快速查找完全匹配(等于运算符)和范围(例如,大于,小于和
BETWEEN
运算符)。
这种类型的索引可用于大多数存储引擎,例如
InnoDB
和
MyISAM
。
因为B树节点可以有许多子节点,所以B树与二叉树不同,二叉树每个节点限制为2个子节点。
与
哈希索引
形成
对比,
哈希索引
仅在
MEMORY
存储引擎中
可用
。
该
MEMORY
存储引擎也可以用B-tree索引,你应该选择B树索引
MEMORY
的表,如果某些查询使用范围经营。
术语B树的使用旨在作为一般索引设计类的参考。
由于经典B树设计中不存在的复杂性,MySQL存储引擎使用的B树结构可以被视为变体。
有关相关信息,请参阅
MySQL Internals Manual
的
InnoDB
页面结构
Fil Header
部分
。
另请参见 哈希索引 。
如果MySQL SQL语句中的标识符
`
包含特殊字符或保留字,则
必须使用反引号字符(
)
来引用
它们。
例如,要引用名为table的表
FOO#BAR
或
命名
的列
SELECT
,您可以将标识符指定为
`FOO#BAR`
和
`SELECT`
。
由于反引号提供了额外的安全级别,因此它们广泛用于程序生成的SQL语句中,其中标识符名称可能事先不知道。
许多其他数据库系统
"
在这些特殊名称周围
使用双引号(
)。
为了便于移植,您可以
ANSI_QUOTES
在MySQL中
启用
模式并使用双引号而不是反引号来限定标识符名称。
另请参见 SQL 。
从MySQL实例复制部分或全部表数据和元数据的过程,以便妥善保管。 也可以参考复制文件集。 这对DBA来说是一项至关重要的任务。 此过程的反向是 还原 操作。
使用MySQL,
物理备份
由
MySQL Enterprise Backup
产品执行,
逻辑备份
由
mysqldump
命令执行。
这些技术在备份数据的大小和表示以及速度(尤其是恢复操作的速度)方面具有不同的特征。
备份进一步分为 热 , 暖 或 冷, 具体取决于它们对正常数据库操作的干扰程度。 (热备份干扰最小,冷备份最多。)
另请参阅 冷备份 , 热备份 , 逻辑备份 , MySQL企业备份 , mysqldump , 物理备份 , 热备份 。
软件产品生命周期的早期阶段,当它仅用于评估时,通常没有明确的版本号或小于1的数字。
InnoDB
不使用beta标识,更喜欢
可以延伸到几个点
的
早期采用者
阶段发布,导致
GA
发布。
包含尝试更改表数据的所有语句的记录的文件。 可以重播这些语句,以便在 复制 方案 中使从属服务器保持最新 ,或者在从备份还原表数据后使数据库保持最新。 可以打开和关闭二进制日志记录功能,但如果您使用复制或执行备份,Oracle建议始终启用它。
您可以使用 mysqlbinlog 命令 检查二进制日志的内容,或在复制或恢复期间重播这些语句 。 有关二进制日志的完整信息,请参见 第5.4.4节“二进制日志” 。 有关与二进制日志相关的MySQL配置选项,请参见 第17.1.6.4节“二进制日志记录选项和变量” 。
对于
MySQL Enterprise Backup
产品,二进制日志的文件名和文件中的当前位置是重要的详细信息。
要在复制上下文中进行备份时记录主服务器的此信息,可以指定该
--slave-info
选项。
在MySQL 5.0之前,可以使用类似的功能,称为更新日志。 在MySQL 5.0及更高版本中,二进制日志替换了更新日志。
另请参阅 binlog , MySQL Enterprise Backup , 复制 。
二进制日志 文件 的非正式名称 。 例如,您可能会在电子邮件或论坛讨论中看到此缩写。
另请参见 二进制日志 。
由
子句
启用的
特殊
全文搜索
模式
WITH QUERY
EXPANSION
。
它执行两次搜索,其中第二次搜索的搜索短语是与来自第一次搜索的少数最高度相关的文档连接的原始搜索短语。
该技术主要适用于短搜索短语,可能只有一个单词。
它可以发现文档中未出现精确搜索词的相关匹配。
另请参见 全文搜索 。
系统的一部分,其大小或容量受到限制,具有限制总吞吐量的效果。
例如,内存区域可能小于必要的内存区域;
访问单个所需资源可能会阻止多个CPU核心同时运行;
或等待磁盘I / O完成可能会阻止CPU以满容量运行。
消除瓶颈往往会提高
并发性
。
例如,
当多个会话同时读取和写入缓冲池时
,具有多个
InnoDB
缓冲池
实例
的能力可以
减少争用。
一个 关机 操作,紧接着将进行重新启动。 理想情况下, 预热 时间 相对较短, 因此性能和吞吐量很快就会恢复到较高水平。
另见 shutdown 。
用于临时存储的内存或磁盘区域。 数据缓冲在内存中,因此可以通过一些大的I / O操作而不是许多小的I / O操作有效地写入磁盘。 数据在磁盘上缓冲以获得更高的可靠性,因此即使 在最糟糕的时间发生 崩溃 或其他故障 ,也可以恢复数据 。 InnoDB使用的主要缓冲区类型是 缓冲池 , 双写缓冲区 和 更改缓冲区 。
保存
InnoDB
表和索引的
高速缓存
数据
的内存区域
。
为了提高大容量读取操作的效率,缓冲池被分成
可以容纳多行的
页面
。
为了提高缓存管理的效率,缓冲池被实现为链接的页面列表;
使用
LRU
算法
的变体,很少使用的数据在缓存中老化
。
在具有大内存的系统上,可以通过将缓冲池划分为多个
缓冲池实例
来提高并发性
。
多个
InnoDB
状态变量,
INFORMATION_SCHEMA
表和
performance_schema
表有助于监视缓冲池的内部工作方式。
从MySQL
5.6开始,通过在服务器关闭时保存缓冲池状态并在服务器启动时将缓冲池恢复到相同状态,可以在重新启动服务器后避免冗长的预热期,特别是对于具有大缓冲池的实例。
请参见
第15.8.3.7节“保存和恢复缓冲池状态”
。
缓冲池
可以划分
的多个区域中的任何一个
,由
innodb_buffer_pool_instances
配置选项
控制
。
指定的总内存大小
innodb_buffer_pool_size
在所有缓冲池实例之间划分。
通常,具有多个缓冲池实例适用于为缓冲池分配多个千兆字节的系统,
InnoDB
每个实例为1千兆字节或更大。
在从多个并发会话加载或查找缓冲池中的大量数据的系统上,具有多个缓冲池实例减少了对管理缓冲池的数据结构的独占访问的争用。
另请参见 缓冲池 。
InnoDB
MySQL中
的内置
存储引擎是存储引擎的原始分发形式。
与
InnoDB插件
对比
。
从MySQL 5.5开始,InnoDB插件作为内置
InnoDB
存储引擎(称为InnoDB 1.1)
合并回MySQL代码库
。
这种区别主要在MySQL 5.1中很重要,其中功能或错误修复可能适用于InnoDB插件但不适用于内置
InnoDB
,反之亦然。
另请参见 InnoDB 。
构成商业软件基础的行为的关系和顺序,用于经营商业公司。 有时这些规则由法律规定,有时则由公司政策规定。 仔细规划可确保数据库编码和实施的关系以及通过应用程序逻辑执行的操作能够准确反映公司的实际策略并能够处理实际情况。
例如,离开公司的员工可能会触发人力资源部门的一系列操作。 人力资源数据库可能还需要灵活地表示有关已被雇用但尚未开始工作的人的数据。 关闭在线服务的帐户可能会导致数据从数据库中删除,或者数据可能会被移动或标记,以便在重新打开帐户时可以恢复数据。 除了基本的健全性检查(例如工资不是负数)之外,公司可能会制定有关最高工资,最低工资和调整的政策。 零售数据库可能不允许使用相同序列号的购买多次返回,
另请参阅 关系 。
与可
InnoDB
传输表空间
功能
一起使用的元数据文件
。
它由命令生成
FLUSH TABLES ...
FOR EXPORT
,将一个或多个表置于可以复制到另一个服务器的一致状态。
该
.cfg
文件与相应的
.ibd文件
一起复制
,并用于
在
步骤
期间
调整
.ibd
文件
的内部值
,例如
空间ID
ALTER TABLE ... IMPORT TABLESPACE
。
存储区域的通用术语,用于存储频繁或高速检索的数据副本。
在
InnoDB
,缓存
池
的主要类型是
缓冲池
。
另请参见 buffer , buffer pool 。
表
列中
的不同值的数量
。
当查询引用具有关联
索引
的列时,每列的基数会影响哪种访问方法最有效。
例如,对于具有
唯一约束
的列
,不同值的数量等于表中的行数。
如果一个表有一百万行但只有一个特定列的10个不同值,则每个值(平均)发生100,000次。
SELECT c1 FROM t1 WHERE c1 = 50;
因此,
诸如此类的查询
可能返回1行或大量行,并且数据库服务器可能会根据基数来不同地处理查询
c1
。
如果列中的值具有非常不均匀的分布,则基数可能不是确定最佳查询计划的好方法。
例如,
SELECT c1 FROM t1 WHERE c1 =
x;
可能会返回1行时
x=50
和100万行时
x=30
。
在这种情况下,您可能需要使用
索引提示
来传递有关哪种查找方法对特定查询更有效的建议。
基数也可以应用于多列中存在的不同值的数量,如在 复合索引中 。
一个特殊的数据结构,记录更改
网页
中
的辅助索引
。
这些值可能会导致从SQL
INSERT
,
UPDATE
或
DELETE
语句(
DML
)。
涉及更改缓冲区的一组功能统称为
更改缓冲
,包括
插入缓冲
,
删除缓冲
和
清除缓冲
。
当二级索引中的相关页面不在 缓冲池中 时,更改仅记录在更改缓冲区中 。 当相关索引页面进入缓冲池而关联更改仍在更改缓冲区中时,该页面的更改 将 使用更改缓冲区中的数据 应用于缓冲池( 合并 )。 在系统大部分空闲时或在慢速关闭期间运行 的 清除 操作会 定期 将新索引页写入磁盘。 与每个值立即写入磁盘的情况相比,清除操作可以更有效地写入一系列索引值的磁盘块。
物理上,更改缓冲区是 系统表空间的 一部分 ,因此索引更改在数据库重新启动时保持缓冲。 由于某些其他读取操作,当页面进入缓冲池时, 仅应用( 合并 ) 更改 。
存储在更改缓冲区中的数据种类和数量由
innodb_change_buffering
和
innodb_change_buffer_max_size
配置选项控制。
要查看有关更改缓冲区中当前数据的信息,请发出
SHOW
ENGINE INNODB
STATUS
命令。
以前称为 插入缓冲区 。
另请参阅 缓冲池 , 更改缓冲 , 删除缓冲 , DML , 插入缓冲区 , 插入缓冲 , 合并 , 页面 , 清除 , 清除缓冲 , 二级索引 , 系统表空间 。
涉及
更改缓冲区
的功能的通用术语
,包括
插入缓冲
,
删除缓冲
和
清除缓冲
。
SQL语句导致的索引更改(通常可能涉及随机I / O操作)会被后台
线程
保留并定期执行
。
与将每个值立即写入磁盘的情况相比,这一系列操作可以更有效地为一系列索引值写入磁盘块。
由控制
innodb_change_buffering
和
innodb_change_buffer_max_size
配置选项。
当对 缓存池中 缓存的数据页进行 更改时,这些更改将在 稍后的某个时间 写入 数据文件 ,这一过程称为 刷新 。 检查点是 已成功写入数据文件 的最新更改(由 LSN 值 表示)的记录 。
In
InnoDB
,一种验证机制,用于
在将
表空间中
的
页面
从磁盘读入
缓冲池
时检测损坏
。
此功能由
MySQL 5.5中
的
配置选项
控制
。
在MySQL 5.6.3中被弃用,取而代之的是
。
InnoDB
innodb_checksums
innodb_checksums
innodb_checksum_algorithm
该 innochecksum 命令有助于为指定的测试校验值诊断腐败问题 的表空间 ,而MySQL服务器关闭文件。
MySQL还使用校验和进行复制。
有关详细信息,请参阅配置选项
binlog_checksum
,
master_verify_checksum
和
slave_sql_verify_checksum
。
在一个
外键
关系,一个子表是其行参考(或点)的行与另一个表中与一个特定的列相同的值。
这是包含
FOREIGN KEY ...
REFERENCES
子句和可选
ON
UPDATE
和
ON DELETE
子句的表。
在
可以在子表中创建行之前
,
父表中
的相应行
必须存在。
子表中的值可以阻止对父表执行删除或更新操作,或者可以根据
ON
CASCADE
创建外键时使用
的
选项
在子表中导致自动删除或更新
。
缓冲池中的
一个
页面
,
其中所有在内存中进行的更改也已写入(
刷新
)到
数据文件中
。
脏页面
的反面
。
InnoDB
一
关机
即完成,没有错误,适用所有更改
InnoDB
完成之前的表,而不是一个
崩溃
或
快速关机
。
慢关机的
同义词
。
一种程序,用于将请求发送到 服务器 ,并解释或处理结果。 客户端软件可能只在某些时候运行(例如邮件或聊天程序),并且可能以交互方式运行(例如 mysql 命令处理器)。
主键
索引
的
InnoDB
术语
。
表存储是根据主键列的值组织的,以加快涉及主键列的查询和排序。
为获得最佳性能,请根据性能最关键的查询仔细选择主键列。
因为修改聚簇索引的列是一项昂贵的操作,所以选择很少或从不更新的主列。
InnoDB
在Oracle数据库产品中,此类表称为 索引组织表 。
一个内的数据项 的行 ,其存储和语义由数据类型进行定义。 每个 表 和 索引 主要由它包含的列集定义。
每列都有一个 基数 值。 列可以是 其表 的 主键 , 也可以是 主键 的一部分。 列可以受 唯一约束 , NOT NULL约束 或两者 约束 。 不同列中的值(甚至跨不同的表)可以通过 外键 关系 链接 。
在讨论MySQL内部操作时,有时将 字段 用作同义词。
当一个
索引
与一个长度规范,诸如创建
CREATE INDEX idx ON t1
(c1(N))
,仅列值的所述第一N个字符被存储在索引中。
保持索引前缀较小使索引紧凑,内存和磁盘I / O节省有助于提高性能。
(虽然使索引前缀太小可能会阻碍查询优化,因为查询优化器会使重复的行具有不同的值。)
对于包含二进制值或长文本字符串的列,其中排序不是主要考虑因素并且将整个值存储在索引中会浪费空间,索引会自动使用值的前N个(通常为768个)字符进行查找和排序。
另见 索引 。
一个 SQL 语句结束的 交易 ,使得永久事务中做任何更改。 它与 回滚 相反 ,它撤消了在事务中所做的任何更改。
InnoDB
使用
乐观
机制进行提交,以便在提交实际发生之前将更改写入数据文件。
这种技术使提交本身更快,并且在回滚的情况下需要做更多的工作。
默认情况下,MySQL使用 自动提交 设置,该设置会在每个SQL语句后自动发出提交。
另请参见 autocommit , optimistic , rollback , SQL , transaction 。
一个
行格式
的InnoDB表。
这是从MySQL 5.0.3到MySQL 5.7.8的默认行格式。
在MySQL 8.0中,默认行格式由
innodb_default_row_format
配置选项
定义
,其默认设置为
DYNAMIC
。
的
COMPACT
行格式提供空值和可变长度列比一个更紧凑的表示
冗余
行格式。
有关
InnoDB
COMPACT
行格式的
其他信息
,请参见
第15.10节“InnoDB行格式”
。
另见 索引 。
MySQL Enterprise Backup
产品
的压缩功能生成
每个表空间的压缩副本,将扩展名更改
.ibd
为
.ibz
。
通过压缩备份数据,您可以保留更多备份,并缩短将备份传输到其他服务器的时间。
在还原操作期间,数据未压缩。
当压缩备份操作处理已经压缩的表时,它会跳过该表的压缩步骤,因为再次压缩会导致很少或没有空间节省。
由
MySQL Enterprise Backup
产品
生成的一组文件
,其中每个
表空间都
被压缩。
压缩文件使用
.ibz
文件扩展名
重命名
。
在备份过程开始时 应用 压缩 有助于避免压缩过程中的存储开销,并避免在将备份文件传输到另一台服务器时的网络开销。 的过程中 应用 的 二进制日志 需要更长的时间,并且需要解压缩备份文件。
另请参阅 应用 , 二进制日志 , 压缩 , 热备份 , MySQL Enterprise Backup , 表空间 。
一种
行格式
,
用于为
表
启用数据和索引
压缩
InnoDB
。
大字段存储在远离保存其余行数据的页面的位置,如
动态行格式
。
索引页面和大字段都被压缩,从而节省了内存和磁盘。
根据数据的结构,内存和磁盘使用量的减少可能会或可能不会超过在使用时解压缩数据的性能开销。
有关
使用详细信息
,
请参见
第15.9节“InnoDB表和页面压缩”
。
有关
InnoDB
COMPRESSED
行格式的
其他信息
,请参阅
DYNAMIC行格式
。
以压缩形式存储数据的表。
因为
InnoDB
,它是一个创建的表
ROW_FORMAT=COMPRESSED
。
有关
更多信息
,
请参见
第15.9节“InnoDB表和页面压缩”
。
具有广泛优势的功能包括使用更少的磁盘空间,执行更少的I / O以及使用更少的内存进行缓存。
InnoDB
支持表级和页级压缩。
InnoDB
页面压缩也称为
透明页面压缩
。
有关
InnoDB
压缩的
更多信息
,请参见
第15.9节“InnoDB表和页面压缩”
。
另一种压缩类型是 MySQL Enterprise Backup 产品 的 压缩备份 功能 。
实际上并不是错误,而是在将
压缩
与
DML
操作
结合使用
时可能发生的昂贵
操作。
它出现在:对压缩
页面的
更新
溢出保留用于记录修改的页面上的区域;
页面再次压缩,所有更改都应用于表格数据;
重新压缩的数据不适合原始页面,要求MySQL将数据拆分为两个新页面并分别压缩每个页面。
要检查此条件的频率,请查询该
INFORMATION_SCHEMA.INNODB_CMP
表并检查
COMPRESS_OPS
列的值超过该值的值
COMPRESS_OPS_OK
柱。
理想情况下,压缩失败不会经常发生;
当他们这样做,你可以调整
innodb_compression_level
,
innodb_compression_failure_threshold_pct
和
innodb_compression_pad_pct_max
配置选项。
另请参见 compression , DML , page 。
请参阅 复合索引 。
多个操作(在数据库术语, 事务中 )同时运行的能力,而不会相互干扰。 并发性还涉及性能,因为理想情况下,使用有效的 锁定 机制,对多个并发事务的保护以最小的性能开销工作 。
包含
MySQL在启动时使用
的
选项
值
的文件
。
传统上,在Linux和Unix上,这个文件被命名
my.cnf
,在Windows上它被命名
my.ini
。
您可以
[mysqld]
在文件部分
下设置与InnoDB相关的许多选项
。
有关 MySQL搜索配置文件的位置的信息 , 请参见 第4.2.2.2节“使用选项文件” 。
当您使用 MySQL Enterprise Backup 产品时,通常使用两个配置文件:一个指定数据的来源以及数据的结构(可能是服务器的原始配置文件),以及仅包含数据的精简配置文件。一小组选项,用于指定备份数据的位置以及结构的方式。 与 MySQL Enterprise Backup 产品 一起使用的配置文件 必须包含通常不在常规配置文件中的某些选项,因此您可能需要向现有配置文件添加选项以与 MySQL Enterprise Backup一起使用 。
另请参阅 my.cnf , MySQL Enterprise Backup , 选项 , 选项文件 。
一种读取操作,它使用 快照 信息基于某个时间点显示查询结果,而不管同时运行的其他事务所执行的更改。 如果查询数据已被另一个事务更改,则基于 撤消日志 的内容重建原始数据 。 此技术 通过强制事务等待其他事务完成 来避免一些 可能降低 并发 性的 锁定 问题 。
使用 REPEATABLE READ 隔离级别 ,快照基于执行第一次读取操作的时间。 使用 READ COMMITTED 隔离级别,快照将重置为每次一致读取操作的时间。
一致性读取是
READ COMMITTED
和
REPEATABLE READ
隔离级别中的
InnoDB
进程
SELECT
语句
的缺省模式
。
由于一致读取不会对其访问的表设置任何锁定,因此在对表执行一致读取时,其他会话可以自由修改这些表。
有关适用隔离级别的技术详细信息,请参见 第15.7.2.3节“一致性非锁定读取” 。
另请参见 并发 , 隔离级别 , 锁定 , READ COMMITTED , REPEATABLE READ , 快照 , 事务 , 撤消日志 。
一种自动测试,可以阻止数据库更改以防止数据变得不一致。 (在计算机科学术语中,一种与不变条件相关的断言。)约束是 ACID 哲学的 一个关键组成部分 ,用于保持数据的一致性。 MySQL支持的约束包括 FOREIGN KEY约束 和 唯一约束 。
由特定类型的
InnoDB
操作
递增的值
。
用于测量服务器的繁忙程度,对性能问题的来源进行故障排除,以及测试更改(例如,配置设置或查询使用的索引)是否具有所需的低级别效果。
通过
Performance Schema
表和
INFORMATION_SCHEMA
表
可以使用不同类型的计数器
INFORMATION_SCHEMA.INNODB_METRICS
。
另请参阅 INFORMATION_SCHEMA , 度量计数器 , 性能架构 。
包含查询检索的所有列
的
索引
。
查询不是使用索引值作为指针来查找完整的表行,而是从索引结构返回值,从而节省磁盘I / O.
InnoDB
可以将此优化技术应用于比MyISAM更多的索引,因为
InnoDB
二级索引
还包括
主键
列。
InnoDB
不能将此技术应用于对事务修改的表的查询,直到该事务结束。
在 给定正确的查询的情况下, 任何 列索引 或 复合索引 都可以充当覆盖索引。 设计索引和查询以尽可能利用此优化技术。
MySQL使用术语 “ 崩溃 ” 来指代 服务器无法正常清理的 任何意外 关机 操作。 例如,由于数据库服务器计算机或存储设备上的硬件故障,可能发生崩溃; 停电; 潜在的数据不匹配导致MySQL服务器停止; 由DBA发起 的 快速关闭 ; 或许多其他原因。 InnoDB 表 的强大自动 崩溃恢复 功能 可确保在重新启动服务器时使数据保持一致,而无需为DBA执行任何额外工作。
崩溃 后再次启动MySQL时发生的清理活动 。 对于 InnoDB 表,使用 重做日志中的 数据重放未完成事务的更改 。 这是变化 致力于 在飞机坠毁前,但尚未写入到 数据文件 ,从重建 双写缓冲 。 当数据库正常关闭时,在 清除 操作 期间执行此类活动 。
在正常操作期间,提交的数据可以在 写入数据文件之前 存储在 更改缓冲区 中一段时间。 在保持数据文件是最新的,在正常操作期间引入性能开销以及缓冲数据之间总是存在权衡,这可能使关闭和崩溃恢复需要更长时间。
“ 创建,读取,更新,删除 ”的 缩写 ,是数据库应用程序中的常见操作序列。 通常表示一类具有相对简单的数据库使用的应用程序( SQL中的 基本 DDL , DML 和 查询 语句 ),可以使用任何语言快速实现。
内部数据结构,用于表示
查询
的结果集
或使用SQL
WHERE
子句
执行搜索的其他操作
。
它的工作方式类似于其他高级语言中的迭代器,根据请求从结果集中生成每个值。
尽管SQL通常会为您处理游标处理,但在处理性能关键代码时,您可能会深入研究内部工作。
请参阅 查询 。
见 DDL 。
跟踪数据库对象(如
表
,
索引
和表
列)的元数据
。
对于MySQL 8.0中引入的MySQL数据字典,元数据实际上位于
数据库目录
中的
InnoDB
每
表文件
表
空间文件中
mysql
。
对于
InnoDB
数据字典,元数据实际位于
InnoDB
系统表空间中
。
由于
MySQL Enterprise Backup
产品始终备份
InnoDB
系统表空间,因此所有备份都包含
InnoDB
数据字典
的内容
。
另请参见 column , table-per-table , .frm文件 , index , MySQL Enterprise Backup , 系统表空间 , 表 。
该目录下的每个MySQL的
情况下
保持
数据文件
的
InnoDB
,并表示各个数据库的目录。
由
datadir
配置选项控制。
的
InnoDB
系统表
,它保存
InnoDB
数据字典
和能够保持数据的多个
InnoDB
表,由一个或多个表示的
.ibdata
数据文件。
保存单个
InnoDB
表的
数据的每表文件表空间
由
.ibd
数据文件
表示
。
可以保存多个
InnoDB
表的
数据的通用表空间(在MySQL 5.7.6中引入)
也由
.ibd
数据文件
表示
。
另请参见 数据字典 , 每表文件 , 通用表空间 , .ibd文件 , ibdata文件 , 索引 , 系统表空间 , 表 , 表空间 。
见 DML 。
主要运行大型 查询的 数据库系统或应用程序 。 可以以 非规范化 形式 组织只读或读取大部分数据 以提高查询效率。 可以从 MySQL 5.6及更高版本中的 只读事务 的优化中受益 。 与 OLTP 对比 。
在MySQL
数据目录中
,每个数据库由一个单独的目录表示。
InnoDB
系统表空间
可以保存MySQL
实例中
多个数据库的表数据
,它保存在
驻留在各个数据库目录之外的
数据文件
中。
当
文件的每个表的
启用模式时,
的.ibd文件
代表个人InnoDB表存储在数据库目录中,除非使用创建别处
DATA
DIRECTORY
条款。
MySQL 5.7.6中引入的常规表空间也在
.ibd文件中
保存表数据
。
与文件每表
.ibd文件不同
,通用表空间
.ibd文件
可以保存MySQL
实例中
多个数据库的表数据
,并且可以分配给相对于MySQL数据目录或独立于MySQL数据目录的目录。
对于长期使用MySQL的用户来说,数据库是一个熟悉的概念。 来自Oracle数据库背景的用户会发现数据库的MySQL含义更接近Oracle数据库调用的 模式 。
数据控制语言,一组
用于管理权限
的
SQL
语句。
在MySQL中,由
GRANT
和
REVOKE
语句组成。
与
DDL
和
DML
对比
。
数据定义语言,一组
用于操作数据库本身而不是单个表行
的
SQL
语句。
包括所有形式的的
CREATE
,
ALTER
和
DROP
语句。
还包括
TRUNCATE
声明,因为它
与
声明的工作方式不同
,即使最终效果相似。
DELETE
FROM
table_name
DDL语句自动 提交 当前 事务 ; 他们无法 回滚 。
该
InnoDB
在线DDL
功能增强了性能
CREATE
INDEX
,
DROP
INDEX
以及多种类型的
ALTER
TABLE
操作。
有关
更多信息
,
请参见
第15.12节“InnoDB和在线DDL”
。
此外,
InnoDB
每表文件
设置可能会影响
DROP
TABLE
和
TRUNCATE
TABLE
操作
的行为
。
与 DML 和 DCL 对比 。
不同 事务 无法继续的情况,因为每个 事务 都持有 另一个需要 的 锁 。 因为两个事务都在等待资源变得可用,所以它们都不会释放它所拥有的锁。
当事务锁定多个表中的行(通过诸如
UPDATE
或之类的
语句
SELECT ... FOR UPDATE
),但顺序相反
时,可能会发生死锁
。
当这样的语句锁定索引记录和
间隙的
范围时,也会发生死锁
,每个事务由于时序问题而获取某些锁而不是其他锁。
有关如何自动检测和处理死锁的背景信息,请参见 第15.7.5.2节“死锁检测和回滚” 。 有关避免和从死锁条件中恢复的提示,请参见 第15.7.5.3节“如何最小化和处理死锁” 。
另见 gap , lock , transaction 。
一种机制,可自动检测何时发生
死锁
,并自动
回滚
其中一个
事务
(
受害者
)。
可以使用
innodb_deadlock_detect
配置选项
禁用死锁检测
。
当
InnoDB
处理一个
DELETE
声明,该行立即被标记为删除并不再被查询返回的。
在称为
清除
操作
的定期垃圾收集期间,稍后将回收存储
。
为了删除大量数据,具有自己的性能特征的相关操作是
TRUNCATE
和
DROP
。
将
DELETE
操作
产生的二级索引页
的
更改存储
在
更改缓冲区中
而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O.
(因为删除操作分为两步,所以此操作会缓冲通常标记为删除索引记录的写入。)它是
更改缓冲
的类型之一
;
其他是
插入缓冲
和
清除缓冲
。
一种数据存储策略,它跨不同的表复制数据,而不是将表与 外键 和 连接 查询相关联。 通常用于 数据仓库 应用程序,其中数据在加载后不会更新。 在此类应用程序中,查询性能比在更新期间维护一致数据更简单更重要。 与 标准化 对比 。
一种
索引
类型,
其中索引存储被优化以处理
子句。
ORDER BY
column
DESC
另见 索引 。
字典对象缓存将先前访问的 数据字典 对象存储在存储器中以使对象重用并最小化磁盘I / O. 基于 LRU 的驱逐策略用于从存储器中驱逐最近最少使用的对象。 缓存由几个存储不同对象类型的分区组成。
有关更多信息,请参见 第14.4节“字典对象高速缓存” 。
一个
页面
的
InnoDB
缓冲池
已在内存中,这里的变化没有写被更新(
刷新
)的
数据文件
。
与
干净页面
相反
。
检索不可靠数据的操作,由另一个事务更新但尚未 提交的数据 。 只有 隔离级别 称为 read uncommitted 才有可能 。
这种操作不符合 ACID 数据库设计原则。 它被认为是非常危险的,因为数据可以 在提交之前 回滚 或更新; 然后,执行脏读的事务将使用从未确认为准确的数据。
它的反面是
一致读取
,
InnoDB
确保事务不会读取由另一个事务更新的信息,即使其他事务同时提交也是如此。
一种主要在磁盘存储上组织数据的数据库(硬盘驱动器或等效驱动器)。
数据在磁盘和存储器之间来回传递以进行操作。
它与
内存数据库
相反
。
虽然它
InnoDB
是基于磁盘的,但它还包含诸如
缓冲池
,多个缓冲池实例和
自适应哈希索引等功能
,这些功能允许某些类型的工作负载主要从内存中工作。
一种 工作负载 ,其主要 瓶颈 是磁盘I / O. (也称为 I / O绑定 。)通常涉及频繁写入磁盘,或随机读取的数据超出 缓冲池的数量 。
数据操纵语言,一组
SQL
执行语句
INSERT
,
UPDATE
和
DELETE
操作。
该
SELECT
声明有时被认为是一个DML语句,因为
SELECT ...
FOR UPDATE
形式是受到了同样的考虑
锁定
为
INSERT
,
UPDATE
和
DELETE
。
InnoDB
表的
DML语句
在
事务
的上下文中操作
,因此它们的效果可以
作为单个单元
提交
或
回滚
。
与 DDL 和 DCL形成 对比 。
在
InnoDB
全文搜索
功能中,表中包含
FULLTEXT索引
的特殊列
,用于唯一标识与每个
ilist
值
关联的文档
。
它的名字是
FTS_DOC_ID
(需要大写)。
列本身必须是
BIGINT UNSIGNED NOT NULL
类型,具有唯一的索引名称
FTS_DOC_ID_INDEX
。
最好在创建表时定义此列。
如果
InnoDB
必须在创建
FULLTEXT
索引
时将列添加到表中
,则索引操作要贵得多。
另请参见 全文搜索 , FULLTEXT索引 , ilist 。
InnoDB
使用称为doublewrite的文件刷新技术。
在写之前
的页面
的
数据文件
,
InnoDB
第一次将它们写入称为双写缓冲区中的连续区域。
只有在写入和刷新到doublewrite缓冲区之后,才会
InnoDB
将页面写入数据文件中的正确位置。
如果
在页面写入过程中
存在操作系统,存储子系统或
mysqld
进程崩溃,则
InnoDB
可以在
崩溃恢复
期间从doublewrite缓冲区中找到该页面的良好副本
。
尽管数据总是写入两次,但双写缓冲区不需要两倍的I / O开销或两倍的I / O操作。
数据作为一个大的顺序块写入缓冲区本身,只需一次
fsync()
调用操作系统。
要关闭doublewrite缓冲区,请指定该选项
innodb_doublewrite=0
。
一种
通过诸如
或之
类的
语句
删除模式对象
的
DDL
操作
。
它在内部映射到一个
语句。
从一个
角度来看,这些操作的性能考虑涉及
数据字典
被锁定
的时间,
以确保相互关联的对象全部更新,以及更新内存结构(如
缓冲池)的时间
。
对于
表
,drop操作与
truncate
操作(
语句)
有一些不同的特性
。
DROP
TABLE
DROP INDEX
ALTER TABLE
InnoDB
TRUNCATE TABLE
一个
InnoDB
行格式。
由于长的可变长度列值存储在保存行数据的页面之外,因此对于包含大对象的行非常有效。
由于通常不访问大字段来评估查询条件,因此它们不会
经常
进入
缓冲池
,从而导致更少的I / O操作和更好的缓存内存利用率。
从MySQL 5.7.9开始,默认行格式由
innodb_default_row_format
,其默认值为
DYNAMIC
。
有关
InnoDB
DYNAMIC
行格式的
其他信息
,请参阅
DYNAMIC行格式
。
类似于 beta的阶段 ,通常在非关键任务设置中评估软件产品的性能,功能和兼容性。
另见 beta 。
一种 日志, 显示有关MySQL启动和关键运行时错误以及 崩溃 信息的信息。 有关详细信息,请参见 第5.4.2节“错误日志” 。
从缓存或其他临时存储区域(例如
InnoDB
缓冲池)
中删除项目的过程
。
通常(但并非总是)使用
LRU
算法来确定要删除的项目。
当
驱逐
脏页时
,其内容将
刷新
到磁盘,并且
也可能刷新
任何脏
邻居页面
。
A类
锁
,以防止任何其他
交易
从锁定同一行。
根据事务
隔离级别
,这种锁可能会阻止其他事务写入同一行,或者也可能阻止其他事务读取同一行。
默认
InnoDB
隔离级别
REPEATABLE READ
通过允许事务读取具有独占锁的行来
实现更高的
并发性
,这种技术称为
一致读取
。
一组
页面
一个内
表
。
对于
16KB
的默认
页面大小
,范围包含64页。
在MySQL 5.6中,
InnoDB
实例
的页面大小
可以是4KB,8KB或16KB,由
innodb_page_size
配置选项
控制
。
对于4KB,8KB和16KB页面大小,扩展区大小始终为1MB(或1048576字节)。
InnoDB
MySQL 5.7.6中增加了
对32KB和64KB
页面大小的
支持
。
对于32KB的页面大小,范围大小为2MB。
对于64KB的页面大小,范围大小为4MB。
InnoDB
功能,如
段
,
预读
请求和
双写缓冲器
使用I / O操作读,写,分配,或在一个时间免费数据的一个程度。
另请参见 doublewrite buffer , page , page size , read-ahead , segment , tablespace 。
包含MySQL表的元数据(如表定义)的文件。
.frm
在MySQL 8.0中删除了文件,但仍在早期的MySQL版本中使用。
在MySQL 8.0中,先前存储在
.frm
文件中的
数据
存储在
数据字典
表中。
另请参见 数据字典 , MySQL Enterprise Backup , 系统表空间 。
InnoDB插件中首次引入的功能,现在是5.5及更高版本的MySQL的一部分,可以
通过避免完全重写相关表
来加速
InnoDB
二级索引
的
创建
。
加速也适用于删除二级索引。
由于索引维护可能会增加许多数据传输操作的性能开销,因此请考虑执行诸如
ALTER TABLE ... ENGINE=INNODB
或
INSERT INTO ... SELECT * FROM ...
不执行任何二级索引的操作,然后再创建索引。
在MySQL 5.6中,此功能变得更加通用。
您可以在创建索引时读取和写入表,并且
ALTER
TABLE
可以在不复制表的情况下执行
更多种类的
操作,而不会阻止
DML
操作,或两者兼而有之。
因此,在MySQL 5.6及更高版本中,这组功能称为
在线DDL,
而不是快速索引创建。
有关相关信息,请参阅 InnoDB快速索引创建 和 第15.12节“InnoDB和在线DDL” 。
默认
关闭
过程
InnoDB
,基于配置设置
innodb_fast_shutdown=1
。
为了节省时间,
跳过
某些
刷新
操作。
这种类型的关闭在正常使用期间是安全的,因为刷新操作在下次启动期间执行,使用与
崩溃恢复中
相同的机制
。
如果数据库正在关闭以进行升级或降级,请执行
慢速关闭,
以确保
在关闭期间对
数据文件
应用所有相关更改
。
另请参见 file-per-table , .ibd文件 , ibdata文件 , 行格式 。
由
innodb_file_per_table
选项
控制的设置的通用名称
,这是影响
InnoDB
文件存储,功能可用性和I / O特性
方面的重要配置选项
。
从MySQL 5.6.7开始,
innodb_file_per_table
默认启用。
innodb_file_per_table
启用
该
选项后,您可以在其自己的
.ibd文件中
创建表,
而不是在
系统表空间
的共享
ibdata文件
中创建
表
。
当表数据存储在单个
.ibd文件中时
,您可以更灵活地选择
数据
压缩
等功能所需的
行格式
。
该
操作也更快,并且回收的空间可以由操作系统使用而不是保持保留
。
TRUNCATE TABLE
InnoDB
在 MySQL企业备份 产品是那些在自己的文件表的更灵活。 例如,可以从备份中排除表,但仅限于它们位于单独的文件中。 因此,此设置适用于较少备份或不同计划的表。
另请参见 压缩行格式 , 压缩 , 文件格式 , .ibd文件 , ibdata文件 , innodb_file_per_table , MySQL Enterprise Backup , 行格式 , 系统表空间 。
在一个
InnoDB
索引
,一个比例
页面
被页面之前采取了由索引数据被分割。
索引数据首先在页面之间划分时未使用的空间允许使用更长的字符串值更新行,而无需昂贵的索引维护操作。
如果填充因子太低,索引会占用比所需更多的空间,从而在读取索引时会产生额外的I / O开销。
如果填充因子太高,任何增加列值长度的更新都可能导致索引维护的额外I / O开销。
有关
更多信息
,
请参见
第15.6.2.2节“InnoDB索引的物理结构”
。
此行格式由
MyISAM
存储引擎使用,而不是由
InnoDB
。
如果
InnoDB
使用
ROW_FORMAT=FIXED
MySQL 5.7.6或更早版本中
的选项
创建
表,则
InnoDB
使用
紧凑行格式
,尽管该
FIXED
值仍可能显示在输出(如
SHOW TABLE STATUS
报表)中。
从MySQL 5.7.7开始,
InnoDB
如果
ROW_FORMAT=FIXED
指定
则返回错误
。
将更改写入已在内存区域或临时磁盘存储区域中缓冲的数据库文件。
InnoDB
定期刷新
的
存储结构包括
重做日志
,
撤消日志
和
缓冲池
。
刷新可能是因为内存区域已满并且系统需要释放一些空间,因为
提交
操作意味着可以最终确定事务的更改,或者因为
慢速关闭
操作意味着应该最终完成所有未完成的工作。
如果一次刷新所有缓冲数据并不重要,
InnoDB
可以使用一种称为
模糊检查点
的技术
来刷新小批量页面以分散I / O开销。
内部
InnoDB
跟踪数据结构
脏页
在
缓冲池
:那就是,
网页
已更改,并需要写回到磁盘。
此数据结构经常由
InnoDB
内部
小型事务
更新
,因此受其自身的
互斥锁
保护,
以允许并发访问缓冲池。
一种指针关系,位于不同
InnoDB
表中的
行之间
。
外键关系在
父表
和
子表中的
一列上定义
。
除了能够快速查找相关信息外,外键还可以 防止这些指针在插入,更新和删除数据时变为无效,从而 有助于强制 引用完整性 。 此强制机制是一种 约束 。 如果另一个表中不存在关联的外键值,则无法插入指向另一个表的行。 如果删除了一行或更改了其外键值,并且另一个表中的行指向该外键值,则可以设置外键以防止删除,从而导致另一个表中的相应列值变为 null ,或自动删除另一个表中的相应行。
设计 规范化 数据库的 一个阶段 是识别复制的数据,将数据分成新表,并设置外键关系,以便可以使用 连接 操作 像单个表一样查询多个表 。
另请参见 子表 , FOREIGN KEY约束 , 连接 , 规范化 , NULL , 父表 , 参照完整性 , 关系 。
通过
外键
关系
维护数据库一致性
的
约束
类型
。
与其他类型的约束一样,如果数据不一致,它可以防止数据被插入或更新;
在这种情况下,防止的不一致是在多个表中的数据之间。
或者,在执行
DML
操作
时
,
约束可以
根据
创建外键时指定
的
选项
,
导致
子行中的
数据
被删除,更改为不同的值或设置为
null
。
FOREIGN KEY
ON
CASCADE
一个 备份 ,包括 每个MySQL 数据库中的 所有 表 ,以及MySQL 实例中的 所有数据库 。 与 部分备份 对比 。
需要读取表的全部内容而不是仅使用 索引 选择的部分的操作 。 通常使用小型查找表执行,或者在具有大型表的数据仓库情况下执行,其中聚合和分析所有可用数据。 这些操作发生的频率以及表相对于可用内存的大小对查询优化和管理 缓冲池中 使用的算法有影响 。
索引的目的是允许在大表中查找特定值或值范围,从而在实际时避免全表扫描。
MySQL功能用于在表数据中查找单词,短语,单词的布尔组合等,比使用SQL
LIKE
运算符或编写自己的应用程序级搜索算法
更快,更方便,更灵活
。
它使用SQL函数
MATCH()
和
FULLTEXT索引
。
另请参见 FULLTEXT索引 。
在MySQL
全文搜索
机制
中保存
搜索索引
的特殊
索引
。
表示列值的单词,省略任何指定为
停用
词的单词
。
最初,仅适用于
桌子。
从MySQL 5.6.4开始,它也可用于
InnoDB
表。
MyISAM
“ 一般可用 ” ,即软件产品出现 测试阶段 并可供销售,官方支持和生产使用的阶段。
另见 beta 。
在A地点
InnoDB
索引
数据结构,其中新值可以被插入。
使用诸如的语句锁定一组行时
SELECT ... FOR UPDATE
,
InnoDB
可以创建应用于间隙的锁以及索引中的实际值。
例如,如果为更新选择了大于10的所有值,则间隙锁定会阻止另一个事务插入大于10的新值。
上级记录
和
下划线记录
表示包含大于或小于所有值的所有值的间隙。当前指数值。
一个
锁
在
缺口
之前的第一间隙或最后索引记录后锁定索引记录之间,或。
例如,
SELECT c1 FROM t WHERE c1 BETWEEN 10 and
20 FOR UPDATE;
阻止其他事务将值15插入列中
t.c1
,无论
列
中是否已存在任何此类值,因为该范围内所有现有值之间的间隙都已锁定。
与
记录锁定
和
下一键锁定
对比
。
差距锁是性能和 并发 之间权衡的一部分, 用于某些事务 隔离级别 而不是其他 级别 。
另请参见 gap , infimum record , lock , next-key lock , record lock , supremum record 。
请参阅 常规查询日志 。
一种
用于诊断和排除MySQL服务器处理的SQL语句
的
日志
。
可以存储在文件或数据库表中。
您必须通过
general_log
配置选项
启用此功能
才能使用它。
您可以通过
sql_log_off
配置选项
为特定连接禁用它
。
记录比
慢查询日志
更广泛的查询
。
与
用于复制
的
二进制日志
不同
,通用查询日志包含
SELECT
语句,并且不保持严格的排序。
有关更多信息,请参见
第5.4.3节“常规查询日志”
。
使用
语法
创建
的共享
InnoDB
表空间
CREATE TABLESPACE
。
一般表空间可以在MySQL数据目录之外创建,能够保存多个
表
,并支持所有行格式的表。
MySQL 5.7.6中引入了一般表空间。
使用
或
语法
将表添加到常规表空间
。
CREATE
TABLE
tbl_name
... TABLESPACE [=]
tablespace_name
ALTER TABLE
tbl_name
TABLESPACE [=]
tablespace_name
与 系统表空间 和 每表文件表 空间 对比 。
有关更多信息,请参见 第15.6.3.3节“常规表空间” 。
另请参见 file-per-table , 系统表空间 , 表 , 表空间 。
请参见 存储生成的列 。
请参见 虚拟生成列 。
一个 临时表空间 ,用于存储 对用户创建的临时表所做更改的 回滚段 。
另请参见 临时表空间 。
XA 操作中 涉及的 一种 事务 。 它由几个本身具有事务性的操作组成,但所有操作必须作为一个组成功完成,或者全部作为一个组回滚。 从本质上讲,这会将 ACID 属性 “ 扩展 到一个级别 ”, 这样多个ACID事务就可以作为具有ACID属性的全局操作的组件一起执行。
一种
索引,
用于使用相等运算符的查询,而不是范围运算符,例如大于或
BETWEEN
。
它适用于
MEMORY
桌子。
尽管
MEMORY
由于历史原因,
哈希索引是
表
的默认值
,但该存储引擎还支持
B树
索引,这对于通用查询来说通常是更好的选择。
MySQL包含此索引类型的变体,即
自适应哈希索引
,
InnoDB
如果需要
,它将
根据运行时条件
自动构建
。
“ 硬盘驱动器 ”的 缩写 。 指使用旋转盘片的存储介质,通常在与 SSD 进行比较和对比时 。 其性能特征可以影响 基于磁盘的 工作负载 的吞吐量 。
发送的周期性消息,指示系统正常运行。 在 复制 上下文中,如果 主服务器 停止发送此类消息,则其中一个 从服务器 可以取代它。 可以在群集环境中的服务器之间使用类似的技术来确认所有这些技术都正常运行。
表示上限的值,可以是运行时不应超过的硬限制,也可以是实际达到的最大值的记录。 与 低水位 对比 。
另见 低水位线 。
具有删除标记记录
的
事务
列表,
计划由
InnoDB
清除
操作处理。
记录在
撤消日志中
。
命令报告历史列表的长度
SHOW ENGINE INNODB STATUS
。
如果历史列表的长度超过
innodb_max_purge_lag
配置选项
的值,则
每个
DML
操作都会稍微延迟,以允许清除操作完成
刷新
已删除的记录。
也称为 吹扫滞后 。
从页面释放空块。
在
InnoDB
透明的页面压缩
功能依赖于打孔支持。
有关更多信息,请参见
第15.9.2节“InnoDB页面压缩”
。
如此频繁地访问行,表或内部数据结构,需要某种形式的锁定或互斥的情况,这会导致性能或可伸缩性问题。
虽然 “ 热 ” 通常表示不良情况,但 热备份 是首选的备份类型。
另请参阅 热备份 。
在数据库运行且应用程序正在读取和写入数据库时进行备份。 备份不仅仅是复制数据文件:它必须包括备份过程中插入或更新的任何数据; 它必须排除备份过程中删除的任何数据; 它必须忽略任何未提交的更改。
执行热备份的Oracle产品,
InnoDB
尤其是表,
MyISAM
以及
来自
其他存储引擎的
表
,称为
MySQL Enterprise Backup
。
热备份过程包括两个阶段。 初始复制数据文件会产生 原始备份 。 该 申请 步整合到同时备份运行所发生的任何改变。 应用更改会生成 准备好的 备份; 这些文件随时可以恢复。
另请参阅 apply , MySQL Enterprise Backup , 准备备份 , 原始备份 。
每个表文件表
空间和一般表空间
的数据文件
。
每个表的
.ibd
文件
表空间
文件包含一个表和关联的索引数据。
常规表空间
.ibd
文件可能包含多个表的表和索引数据。
该
.ibd
文件的扩展名不适用于
系统表空间
,它由一个或多个
ibdata文件
。
如果使用该
DATA DIRECTORY =
子句
创建了每表文件表空间或通用表空间
,则该
.ibd
文件位于正常数据目录之外的指定路径中。
当
MySQL Enterprise Backup
产品
将
.ibd
文件包含在压缩备份中时
,压缩的等效
文件
是一个
文件。
.ibz
另请参见 数据库 , 每个表的文件 , 常规表空间 , ibdata文件 , .ibz文件 , innodb_file_per_table , MySQL Enterprise Backup , 系统表空间 。
当
MySQL企业备份
产品进行
压缩备份
,它把每个
表
正在使用该创建的文件
的文件每个表
从设置
.ibd
扩展到一个
.ibz
扩展。
备份期间应用的压缩不同于 在正常操作期间保持表数据压缩 的 压缩行格式 。 压缩备份操作会跳过已经处于压缩行格式的表空间的压缩步骤,因为第二次压缩会减慢备份速度,但几乎不会节省空间。
请参阅 磁盘绑定 。
由
InnoDB
MySQL数据库
管理的文件集
:
系统表空间
,
每
表文件
表
空间文件和
重做日志
文件。
根据MySQL版本和
InnoDB
配置,还可能包括
常规表空间
,
临时表空间
和
撤消表空间
文件。
该术语有时用于详细讨论
InnoDB
文件结构和格式,以引用
InnoDB
MySQL数据库中
管理的文件集
。
在
热备份
操作
期间
由
MySQL Enterprise Backup
产品
创建的补充备份文件
。
它包含有关备份运行时发生的任何数据更改的信息。
初始备份文件(包括
)称为
原始备份
,因为备份操作期间发生的更改尚未合并。
对原始备份文件
执行
应用
步骤
后
,生成的文件会包含最终的数据更改,并称为
准备备份
。
在此阶段,
不再需要
该
文件。
ibbackup_logfile
ibbackup_logfile
另请参阅 apply , 热备份 , MySQL Enterprise Backup , 准备备份 , 原始备份 。
构成InnoDB
系统表空间的
一组文件,其名称如
ibdata1
,
ibdata2
等等
。
这些文件包含有关
表的
元数据
(
数据字典
),以及一个或多个
撤消日志
,
更改缓冲区
和
双写缓冲区
的存储区域
。
它们还可以包含部分或全部表数据(取决于
创建每个表时每个表
的
文件
模式是否有效)。
当
innodb_file_per_table时
InnoDB
InnoDB
选项已启用,新创建的表的数据和索引存储在单独的
.ibd文件中,
而不是
存储在
系统表空间中。
ibdata
文件
的增长
受
innodb_autoextend_increment
配置选项的
影响
。
另请参阅 更改缓冲区 , 数据字典 , 双写缓存 , 文件的每个表 , 的.ibd文件 , innodb_file_per_table , 系统表空间 , 撤消日志 。
非压缩
临时表
和相关对象
的
InnoDB
临时表空间
数据文件
。
配置文件选项
允许用户定义临时表空间数据文件的相对路径。
如果
未指定,则默认行为是
在数据目录中
创建一个自动扩展的12MB数据文件
。
InnoDB
innodb_temp_data_file_path
innodb_temp_data_file_path
ibtmp1
ibdata1
一组文件,通常命名为
ib_logfile0
和
ib_logfile1
,形成了
重做日志
。
有时也称为
日志组
。
这些文件记录了尝试更改
InnoDB
表中
数据的语句
。
在崩溃后启动时,会自动重播这些语句以更正由不完整事务写入的数据。
此数据不能用于手动恢复; 对于该类型的操作,请使用 二进制日志 。
在
InnoDB
FULLTEXT索引中
,数据结构由文档ID和令牌的位置信息(即特定单词)组成。
另请参见 FULLTEXT索引 。
InnoDB
获取
的行锁,
以确保一致性,而无需您特别请求它。
另请参见 行锁定 。
一种数据库系统,用于维护内存中的数据,以避免因磁盘I / O和磁盘块与内存区域之间的转换而产生的开销。 一些内存数据库牺牲耐性( “ d ” 在 ACID 的设计理念),并很容易受到硬件,电力和其他类型的故障,使它们更适合于只读操作。 其他内存数据库确实使用持久性机制,例如将更改记录到磁盘或使用非易失性内存。
MySQL功能可以解决相同类型的内存密集型处理,包括
InnoDB
缓冲池
,
自适应哈希索引
和
只读事务
优化,
MEMORY
存储引擎,
MyISAM
密钥缓存和MySQL查询缓存。
由 MySQL Enterprise Backup 产品 执行的 一种 热备份 , 仅保存自某个时间点以来更改的数据。 通过完整备份和一系列增量备份,您可以长时间重建备份数据,而无需保留多个完整备份的存储开销。 您可以还原完整备份,然后连续应用每个增量备份,也可以通过将每个增量备份应用到备份来使最新备份保持最新,然后执行单个还原操作。
已更改数据的粒度位于 页面 级别。 页面实际上可能涵盖多行。 每个更改的页面都包含在备份中。
一种数据结构 ,通常通过形成 表示特定 列 或 列 集的 所有值的 树结构( B树) ,为 表的 行 提供快速查找功能 。
InnoDB
表始终具有
表示
主键
的
聚簇索引
。
它们还可以
在一列或多列上定义
一个或多个
二级索引
。
根据其结构,二级索引可以分为
部分
索引
,
列
索引
或
复合
索引。
索引是 查询 性能 的关键方面 。 数据库架构师设计表,查询和索引,以允许快速查找应用程序所需的数据。 理想的数据库设计 在可行的情况下 使用 覆盖索引 ; 查询结果完全从索引计算,而不读取实际的表数据。 每个 外键 约束还需要一个索引,以有效地检查 父 表 和 子 表中 是否存在值 。
虽然B树索引是最常见的,不同种类的数据结构的用于
散列索引
,如在
MEMORY
存储引擎和
InnoDB
自适应散列索引
。
R树
索引用于多维信息的空间索引。
另请参见 自适应哈希索引 , B树 , 子表 , 聚簇索引 , 列索引 , 组合索引 , 覆盖索引 , 外键 , 哈希索引 , 父表 , 部分索引 , 主键 , 查询 , R树 , 行 , 二级索引 , 表 。
保存用于
InnoDB
全文搜索
的令牌数据的内存区域
。
它缓冲数据时数据被插入或在是的一部分列更新以最小化磁盘I / O
FULLTEXT索引
。
当索引缓存已满时,令牌数据将写入磁盘。
每个
InnoDB
FULLTEXT
索引都有自己独立的索引缓存,其大小由配置选项控制
innodb_ft_cache_size
。
另请参阅 全文搜索 , FULLTEXT索引 。
索引条件下推(ICP)是一种优化,
WHERE
如果可以使用
索引中的
字段评估条件的某些部分,则将部分条件下推到存储引擎
。
ICP可以减少
存储引擎
必须访问基表的次数以及MySQL服务器必须访问存储引擎的次数。
有关更多信息,请参见
第8.2.1.5节“索引条件下推优化”
。
用于覆盖
优化程序建议
的
索引的
扩展SQL语法
。
例如,
FORCE INDEX
,
USE INDEX
,和
IGNORE
INDEX
条款。
通常在索引列具有不均匀分布的值时使用,导致
基数
估计
不准确
。
在 应用于多个列 的 索引 (称为 复合索引 )中, 索引 的初始列或前导列。 引用复合索引的前1,2,3等列的查询可以使用索引,即使查询未引用索引中的所有列也是如此。
见 统计 。
甲
伪记录
在
索引
,表示
间隙
在该索引以下的最小值。
如果事务具有诸如的语句
SELECT ... FROM ... WHERE col < 10 FOR
UPDATE;
,并且该列中的最小值为5,则它是对最小记录的锁定,其阻止其他事务插入甚至更小的值,例如0,-10等。
另请参见 gap , index , 伪记录 , supremum记录 。
提供MySQL
数据字典
查询接口
的
数据库
的名称
。
(此名称由ANSI SQL标准定义。)要检查有关数据库的信息(元数据),可以查询诸如
和之类的
表
,而不是使用
生成非结构化输出的命令。
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.COLUMNS
SHOW
该
INFORMATION_SCHEMA
数据库还包含特定于
InnoDB的
表,这些表
为
InnoDB
数据字典
提供查询接口
。
您可以使用这些表来查看数据库的结构,而不是获取有关
InnoDB
表
的工作方式的实时信息,
以帮助进行性能监视,调整和故障排除。
一种MySQL组件,它结合了高性能和
事务
功能,可靠性,健壮性和并发访问。
它体现了
ACID的
设计理念。
代表作为
存储引擎
;
它处理使用该
ENGINE=INNODB
子句
创建或更改的表
。
有关
架构详细信息和管理过程,
请参见
第15章,
InnoDB存储引擎
;
有关性能建议
,
请参见
第
8.5节“优化InnoDB表”
。
在MySQL 5.5及更高版本中,
InnoDB
是新表的默认存储引擎,并且
ENGINE=INNODB
不需要
该
子句。
InnoDB
表非常适合
热备份
。
有关
用于备份MySQL服务器而不中断正常处理
的
MySQL Enterprise Backup
产品的
信息
,
请参见
第30.2节“MySQL企业备份概述”
。
该
innodb_autoinc_lock_mode
选项控制用于
自动增量锁定
的算法
。
如果有自动递增
主键
,则只能使用基于语句的复制设置
innodb_autoinc_lock_mode=1
。
此设置称为
连续
锁定模式,因为事务中的多行插入会接收连续的自动增量值。
如果您具有
innodb_autoinc_lock_mode=2
允许插入操作的更高并发性,则使用基于行的复制而不是基于语句的复制。
此设置称为
交错
锁定模式,因为同时运行的多个多行插入语句可以接收
交错的
自动增量
值。
innodb_autoinc_lock_mode=0
除兼容性目的外,不应使用
该设置
。
连续锁定模式(
innodb_autoinc_lock_mode=1
)是MySQL 8.0.3之前的默认设置。
从MySQL 8.0.3开始,交错锁定模式(
innodb_autoinc_lock_mode=2
)是默认值,它反映了从基于语句的复制到基于行的复制的更改作为默认复制类型。
一个重要的配置选项,它影响
InnoDB
文件存储的
许多方面
,功能的可用性和I / O特性。
在MySQL 5.6.7及更高版本中,默认情况下启用它。
该
innodb_file_per_table
选项打开
每表文件
模式。
启用此模式后,新创建的
InnoDB
表和关联的索引可以存储在
系统表空间
外的
每个表的
.ibd文件中
。
此选项会影响许多SQL语句的性能和存储注意事项,例如
DROP
TABLE
和
TRUNCATE
TABLE
。
启用该
innodb_file_per_table
选项可以利用
MySQL Enterprise Backup中的
表
压缩
和命名表备份等功能
。
有关更多信息,请参见
innodb_file_per_table
和
第15.6.3.2节“每个表的文件表空间”
。
该
innodb_lock_wait_timeout
选项在
等待
共享资源变为可用,或放弃和处理错误,重试或在应用程序中执行备用处理
之间设置平衡
。
回滚任何
InnoDB
等待超过指定时间的事务以获取
锁定
。
如果
死锁
是由对不同存储引擎控制的多个表的更新引起的,
则特别有用
;
不会
自动
检测到
此类死锁
。
该
innodb_strict_mode
选项控制是否
InnoDB
以
严格模式运行
,其中通常被视为警告的条件会导致错误(并且基础语句失败)。
另见 严格模式 。
SQL 中的主要 DML 操作之一 。 插入的性能是将 数百万行加载到表 中的 数据仓库 系统 的关键因素 ,以及 许多并发连接可能以任意顺序将行插入同一表的 OLTP 系统。 如果插入性能对您很重要,您应该了解 InnoDB 功能,例如 更改缓冲中 使用 的 插入缓冲区 和 自动增量 列。
另请参见 自动增量 , 更改缓冲 , 数据仓库 , DML , InnoDB , 插入缓冲区 , OLTP , SQL 。
更改缓冲区
的前一个名称
。
在MySQL 5.5中,添加了对缓冲二级索引页面
DELETE
和
UPDATE
操作的
更改的支持
。
以前,只会
INSERT
缓冲操作
产生的更改
。
首选术语现在是
更改缓冲区
。
将
INSERT
操作
产生的二级索引页
的
更改存储
在
更改缓冲区中
而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O.
它是
变更缓冲
的类型之一
;
其他是
删除缓冲
和
清除缓冲
。
如果辅助索引是 唯一的 , 则不使用插入缓冲 ,因为在写入新条目之前无法验证新值的唯一性。 其他类型的更改缓冲适用于唯一索引。
一种
间隙锁定
,由
INSERT
行插入前
的
操作
设置
。
这种类型的
锁
表示插入的意图,即插入相同索引间隙的多个事务如果不插入间隙内的相同位置则不需要等待彼此。
有关更多信息,请参见
第15.7.1节“InnoDB锁定”
。
一个 mysqld 守护程序,管理一个 数据目录, 表示一个或多个 带有一组 表的 数据库 。 在开发,测试和一些 复制 方案中,在同一 服务器 计算机 上具有多个实例 是常见的 ,每个 实例 管理其自己的数据目录并监听其自己的端口或套接字。 如果一个实例运行 磁盘绑定 工作负载,则服务器可能仍有额外的CPU和内存容量来运行其他实例。
在源代码级别进行修改以收集用于调整和调试的性能数据。
在MySQL中,使用
INFORMATION_SCHEMA
和
PERFORMANCE_SCHEMA
数据库
通过SQL接口公开由检测收集的
数据。
另请参见 INFORMATION_SCHEMA , 性能架构 。
看 意图锁 。
一种 适用于表 的 锁 ,用于指示 事务 要在表中的行上获取 的锁类型 。 不同的事务可以在同一个表上获取不同类型的意图锁,但是获取表上的 意图独占 (IX)锁 的第一个事务会 阻止其他事务获取表上的任何S或X锁。 相反,第一个获得 意图的 交易是 共享的 (IS)锁定表阻止其他事务获取表上的任何X锁。 两阶段进程允许按顺序解析锁定请求,而不会阻塞锁定和兼容的相应操作。 有关此锁定机制的更多信息,请参见 第15.7.1节“InnoDB锁定” 。
看 意图锁 。
另请参见 优化程序 。
为文档检索系统优化的数据结构,用于实现
InnoDB
全文搜索
。
的
InnoDB
FULLTEXT索引
,作为一个反向索引来实现,记录每个字的位置的文档中,而不是一个表行的位置。
单个列值(存储为文本字符串的文档)由反向索引中的许多条目表示。
另请参见 全文搜索 , FULLTEXT索引 , ilist 。
每秒I / O操作的 缩写 。 繁忙系统的常用度量,尤其是 OLTP 应用程序。 如果此值接近存储设备可以处理的最大值,则应用程序可能会 受磁盘限制 ,从而限制了 可伸缩性 。
数据库处理的基础之一。 隔离是 I 的首字母缩写 ACID ; 隔离级别是在多个 事务 进行更改并同时执行查询 时,对结果的性能和可靠性,一致性和可重现性进行微调的设置 。
从最高的一致性和保护到最小,InnoDB支持的隔离级别是: SERIALIZABLE , REPEATABLE READ , READ COMMITTED 和 READ UNCOMMITTED 。
对于
InnoDB
表,许多用户可以保留
所有操作
的默认隔离级别(
REPEATABLE READ
)。
专家用户可以选择
READ COMMITTED
级别,因为它们通过
OLTP
处理
推动可伸缩性的界限
,或者在数据仓库操作期间,其中轻微的不一致性不会影响大量数据的聚合结果。
边缘上的级别(
SERIALIZABLE
和
READ UNCOMMITTED
)将处理行为改变到很少使用它们的程度。
另请参阅 ACID , OLTP , READ COMMITTED , READ UNCOMMITTED , REPEATABLE READ , SERIALIZABLE , transaction 。
一种轻量级结构,用于
为其自身的内部存储器结构
InnoDB
实现
锁定
,通常保持一段时间,以毫秒或微秒为单位。
一般术语,包括
互斥锁
(用于独占访问)和
rw锁
(用于共享访问)。
某些锁存器是
InnoDB
性能调整
的重点
。
有关锁存器使用和争用的统计信息可通过
Performance Schema
界面获得。
另请参阅 lock , locking , mutex , Performance Schema , rw-lock 。
该
InnoDB
缓冲池
被表示为内存列表
页
。
当访问新页面并进入缓冲池时,该列表被重新排序,因为缓冲池中的页面被再次访问并被认为是更新的,并且因为长时间未访问的页面
被
从缓冲池中
逐出
。
缓冲池分为
子列表
,替换策略是熟悉的
LRU
技术
的变体
。
控制对资源(例如表,行或内部数据结构)的访问的对象的高级概念,作为 锁定 策略的 一部分 。 对于密集的性能调优,您可能会深入研究实现锁的实际结构,例如 互斥锁 和 锁存器 。
在某些数据库系统中使用的操作,它将许多
行锁
转换为单个
表锁
,从而节省了内存空间,但减少了对表的并发访问。
InnoDB
对行锁使用节省空间的表示,因此
不需要
锁
升级。
共享(S) 锁 允许 事务 读取行。 多个事务可以同时在同一行上获取S锁。
独占(X)锁允许事务更新或删除行。 没有其他事务可以同时在同一行上获取任何类型的锁。
意图锁定 适用于表,用于指示事务要在表中的行上获取哪种锁定。 不同的事务可以在同一个表上获取不同类型的意图锁,但是获取表上的意图独占(IX)锁的第一个事务会阻止其他事务获取表上的任何S或X锁。 相反,在表上获取意图共享(IS)锁的第一个事务会阻止其他事务获取表上的任何X锁。 两阶段进程允许按顺序解析锁定请求,而不会阻塞锁定和兼容的相应操作。
保护 事务 不被查看或更改其他事务正在查询或更改的数据 的系统 。 该 锁定 策略必须兼顾可靠性和(的原则数据库操作的一致性, ACID 对需要良好的性能哲学) 并发 。 微调锁定策略通常涉及选择 隔离级别 并确保所有数据库操作对于该隔离级别是安全可靠的。
一个
SELECT
也
对
表
执行
锁定
操作的
语句
InnoDB
。
无论是
SELECT ...
FOR UPDATE
或
SELECT ...
LOCK IN SHARE MODE
。
它有可能产生
死锁
,具体取决于
事务
的
隔离级别
。
与
非锁定读取
相反
。
只读事务中的
全局表不允许
。
SELECT ... FOR SHARE
SELECT
... LOCK IN SHARE MODE
在MySQL 8.0.1中
替换
,但
LOCK IN SHARE MODE
仍可用于向后兼容。
请参见 第15.7.2.4节“锁定读取” 。
在
InnoDB
上下文中,
“
日志
”
或
“
日志文件
”
通常是指
由
ib_logfile
文件
表示
的
重做日志
。
另一种类型的
日志是
撤销日志
,它是一个存储区域,用于保存由活动事务修改的数据副本。
N
InnoDB
在MySQL中重要的其他类型的日志是 错误日志 (用于诊断启动和运行时问题), 二进制日志 (用于复制和执行时间点恢复), 一般查询日志 (用于诊断应用程序问题),和 慢查询日志 (用于诊断性能问题)。
另请参见 二进制日志 , 错误日志 , 常规查询日志 , ib_logfile , 重做日志 , 慢查询日志 , 撤消日志 。
保存要写入
构成
重做日志
的
日志文件的
数据的内存区域
。
它由
配置选项
控制
。
innodb_log_buffer_size
构成
重做日志
的
ib_logfile
N
文件之一
。
数据从
日志缓冲区
存储区
写入这些文件
。
另请参阅 ib_logfile , 日志缓冲区 , 重做日志 。
组成
重做日志
的文件集
,通常命名为
ib_logfile0
和
ib_logfile1
。
(因此,有时统称为
ib_logfile
。)
另请参阅 ib_logfile , 重做日志 。
一种涉及高级抽象方面的操作,例如表,查询,索引和其他SQL概念。 通常,逻辑方面对于使数据库管理和应用程序开发方便和可用非常重要。 与 身体 对比 。
一种
备份
,可以重现表结构和数据,而无需复制实际的数据文件。
例如,该
mysqldump
命令产生一个逻辑备份,因为它的输出中包含语句,例如
CREATE
TABLE
和
INSERT
可重新创建的数据。
与
物理备份形成
对比
。
逻辑备份提供了灵活性(例如,您可以在还原之前编辑表定义或插入语句),但
恢复时间
比物理备份
要长得
多。
InnoDB
服务器
启动
后
添加到
配置选项的
前缀
,因此当前MySQL级别无法识别的任何新配置选项都不会导致启动失败。
MySQL处理以此前缀开头的配置选项,但如果前缀后面的部分不是可识别的选项,则会发出警告而不是失败。
另见 启动 。
表示下限的值,通常是某些纠正措施开始或变得更具侵略性的阈值。 与 高水位 对比 。
另见 高水位线 。
“
最近最少使用
”
的首字母缩写
,是管理存储区域的常用方法。
当需要空间来缓存较新的项目时,
最近未使用的项目将被
逐出
。
InnoDB
采用LRU机制默认管理
页面
的内部
缓冲池
,但使得情况例外,其中一个页面可能只读单一的时间,如在
全表扫描
。
LRU算法的这种变化称为
中点插入策略
。
有关更多信息,请参见
第15.5.1节“缓冲池”
。
“
日志序列号
”的
缩写
。
这个任意的,不断增加的值表示与
重做日志中
记录的操作相对应的时间点
。
(此时间点与
事务
边界
无关
;它可以位于一个或多个事务的中间。)它
InnoDB
在
崩溃恢复
期间
内部使用
,用于管理
缓冲池
。
在MySQL 5.6.3之前,LSN是一个4字节的无符号整数。 当重做日志文件大小限制从4GB增加到512GB时,LSN成为MySQL 5.6.3中的8字节无符号整数,因为需要额外的字节来存储额外的大小信息。 在MySQL 5.6.3或更高版本上构建的使用LSN值的应用程序应使用64位而不是32位变量来存储和比较LSN值。
在 MySQL Enterprise Backup 产品中,您可以指定LSN来表示进行 增量备份的 时间点 。 相关的LSN由 mysqlbackup 命令 的输出显示 。 一旦您具有与完全备份时间相对应的LSN,您就可以指定该值以进行后续增量备份,其输出包含用于下一次增量备份的另一个LSN。
另请参阅 缓冲池 , 崩溃恢复 , 增量备份 , MySQL Enterprise Backup , 重做日志 , 事务 。
包含对
MERGE
存储引擎
使用的其他表的引用的文件
。
具有此扩展名的文件始终包含在由
MySQL Enterprise Backup
产品
的
mysqlbackup
命令生成的
备份中
。
另请参见 MySQL Enterprise Backup , mysqlbackup命令 。
MySQL用于存储
MyISAM
表
数据的文件
。
另请参见 .MYI文件 , MySQL Enterprise Backup , mysqlbackup命令 。
MySQL用于存储
MyISAM
表
索引的文件
。
另请参见 .MYD文件 , MySQL Enterprise Backup , mysqlbackup命令 。
经常缩短为 “ 主人 ” 。 复制 方案中的 数据库服务器计算机, 用于处理数据的初始插入,更新和删除请求。 这些更改将传播到其他服务器(称为 从属服务器) 并在其上重复执行 。
在后台执行各种任务
的
InnoDB
线程
。
这些任务中的大多数都与I / O相关,例如将更改从
更改缓冲区
写入
相应的二级索引。
为了提高 并发性 ,有时将操作从主线程移动到单独的后台线程。 例如,在MySQL 5.6和更高版本, 脏页 被 刷新 从 缓冲池 由 页清除 线程而非主线程。
另请参见 元数据锁定 。
许多MySQL和
NoSQL
软件堆栈
的流行组件
,允许对单个值进行快速读取和写入,并将结果完全缓存在内存中。
传统上,应用程序需要额外的逻辑来将相同的数据写入MySQL数据库以进行永久存储,或者在MySQL数据库尚未缓存在内存中时从MySQL数据库中读取数据。
现在,应用程序可以使用简单的
memcached
协议,由许多语言的客户端库支持,使用
InnoDB
或
直接与MySQL服务器通信
NDB
表。
这些与MySQL表的NoSQL接口允许应用程序实现比直接发出SQL语句更高的读写性能,并且可以简化已经包含
用于内存缓存的
memcached的
系统的应用程序逻辑和部署配置
。
MySQL 5.6及更高版本提供了表
的
memcached
接口
InnoDB
;
有关详细信息
,
请参见
第15.19节“InnoDB memcached插件”
。
表
的
memcached
接口
NDB
在NDB Cluster 7.2及更高版本中可用;
有关详细信息,
请参阅
http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html
。
将更改应用于内存中缓存的数据,例如将页面放入 缓冲池时 , 更改缓冲区 中 记录的任何适用更改 都将合并到缓冲池中的页面中。 更新的数据最终 由 刷新 机制 写入 表空间 。
一种 锁 ,用于防止 对另一个 事务 同时使用的表执行 DDL 操作 。 有关详细信息,请参见 第8.11.4节“元数据锁定” 。
在线
操作的
增强功能
,特别是在MySQL 5.6及更高版本中,专注于减少元数据锁定的数量。
我们的目标是为DDL操作不更改表结构(如
CREATE
INDEX
和
DROP
INDEX
对
InnoDB
表)来进行,同时对表进行查询,更新,等其他交易。
在MySQL 5.6及更高版本
INNODB_METRICS
的
INFORMATION_SCEMA中
由
表
实现的功能
。
您可以查询
低级
操作的
计数
和总计
InnoDB
,并将结果与
性能模式中的
数据结合使用进行性能调整
。
另请参见 counter , INFORMATION_SCHEMA , Performance Schema 。
最初将
页面
放入
InnoDB
缓冲池的技术
不是在
列表
的
“
最新
”
端,而是在中间的某个位置。
根据
innodb_old_blocks_pct
选项
的设置,此点的确切位置可能会有所不同
。
目的是只读取一次的页面,例如在
全表扫描
期间
,可以比使用严格的
LRU
算法
更早地从缓冲池中老化
。
有关更多信息,请参见
第15.5.1节“缓冲池”
。
在
DML
操作
期间
InnoDB
在
物理
级别对内部数据结构
进行更改时
的内部
处理
阶段
。
迷你交易(mtr)没有
回滚的
概念
;
在单个
事务中
可以发生多个小
事务
。
小型事务将信息写入
崩溃恢复
期间使用
的
重做日志
。
小事务也可以在常规事务的上下文之外发生,例如在
后台线程的
清除
处理
期间
。
一个
INSERT
语句,其中
为某些但不是所有新行指定了
自动增量
值。
例如,
INSERT
在某些情况下和
NULL
其他情况下
,多值
可以指定自动增量列的值
。
InnoDB
为列值指定为的行生成自动增量值
NULL
。
另一个示例是一个
INSERT ...
ON DUPLICATE KEY UPDATE
语句,其中可以生成但不使用自动增量值,用于处理为
语句
UPDATE
而不是
INSERT
语句的
任何重复行
。
可能导致 复制 配置中 主 服务器 和 从属 服务器 之间的一致性问题 。 可能需要调整 innodb_autoinc_lock_mode 配置选项 的值 。
另请参见 自动增量 , innodb_autoinc_lock_mode , 主服务器 , 复制 , 从属服务器 。
见 迷你交易 。
见 MVCC 。
“
互斥变量
”的
非正式缩写
。
(Mutex本身是
“
互斥
”的
缩写
。)
InnoDB
用于表示和强制执行
内部内存数据结构的
独占访问
锁定
的低级对象
。
获取锁定后,将阻止任何其他进程,线程等获取相同的锁定。
与
rw-locks
对比
,后者
InnoDB
用于表示和强制执行
内部内存数据结构的
共享访问
锁
。
互斥锁和rw锁被统称为
锁存器
。
另请参见 latch , lock , Performance Schema , Pthreads , rw-lock 。
“
multiversion并发控制
”的
缩写
。
此技术允许
具有特定
隔离级别的
InnoDB
事务
执行
一致的读取
操作;
也就是说,查询其他事务正在更新的行,并查看这些更新发生之前的值。
这是一种增强
并发性
的强大技术
,允许查询在没有等待的情况下继续进行,因为
其他事务持有了
锁
。
这种技术在数据库世界中并不普遍。 其他一些数据库产品和一些其他MySQL存储引擎不支持它。
在
MySQL的
计划是MySQL数据库的命令行解释。
它
通过将请求传递给
mysqld
守护程序
来
处理
SQL
语句以及特定于MySQL的命令
。
SHOW
TABLES
一种执行
MySQL数据库
热备份
的
许可产品
。
它在备份
InnoDB
表
时提供最高效率和灵活性
,但也可以备份
MyISAM
和其他类型的表。
MySQL Enterprise Backup
产品的
命令行工具
。
它执行一个
热备份
操作
InnoDB
的表,和一个
热备份
的
MyISAM
等各种表。
有关此命令的更多信息
,
请参见
第30.2节“MySQL Enterprise备份概述”
。
另请参阅 热备份 , MySQL Enterprise Backup , 热备份 。
该 mysqld的 程序是MySQL数据库的数据库引擎。 它作为Unix守护程序或Windows服务运行,不断等待请求并在后台执行维护工作。
另见 mysql 。
一种命令,用于 对数据库,表和表数据的某些组合 执行 逻辑备份 。 结果是重现原始模式对象,数据或两者的SQL语句。 对于大量数据, 诸如 MySQL Enterprise Backup之 类 的 物理备份 解决方案 更快,特别是对于 还原 操作。
另请参阅 逻辑备份 , MySQL Enterprise Backup , 物理备份 , 还原 。
索引列,通常是 主键 ,其中值具有一些真实世界的重要性。 通常建议不要因为:
如果值应该更改,则可能需要大量索引维护来重新排序 聚簇索引 并更新在每个 辅助索引 中重复的主键值的副本 。
即使看似稳定的值也会以不可预测的方式改变,这些方式难以在数据库中正确表示。 例如,一个国家/地区可以更改为两个或几个,使原始国家/地区代码过时。 或者,有关唯一值的规则可能有例外。 例如,即使纳税人ID对于单个人来说是唯一的,数据库也可能必须处理违反该规则的记录,例如在身份被盗的情况下。 纳税人ID和其他敏感ID号码也会导致主要密钥较差,因为它们可能需要加密,加密,并以其他方式与其他列进行不同的处理。
因此,通常最好使用任意数值来形成 合成键 ,例如使用 自动增量 列。
任何
页面
在同一
程度
作为特定页面。
当选择要
刷新
页面时,
通常也刷新
任何
脏
页面
,作为传统硬盘的I / O优化。
在MySQL 5.6及更高版本中,此行为可由配置变量控制
innodb_flush_neighbors
;
您可能会为SSD驱动器关闭该设置,因为SSD驱动器在随机位置编写较小批量数据的开销不同。
一个的组合 记录锁定 在索引记录和一个 间隙锁定 在索引记录之前的间隙。
一个
查询
不使用
SELECT ... FOR UPDATE
或
SELECT ...
LOCK IN SHARE MODE
条款。
唯一类型的查询允许在
只读事务
中使用全局表
。
与
锁定读取
相反
。
请参见
第15.7.2.3节“一致的非锁定读取”
。
SELECT ... FOR SHARE
SELECT
... LOCK IN SHARE MODE
在MySQL 8.0.1中
替换
,但
LOCK IN SHARE MODE
仍可用于向后兼容。
查询检索数据的情况,以及同一 事务中 的后续查询 检索应该是相同数据的内容,但查询返回不同的结果(由此同时提交的另一个事务更改)。
这种操作违背了 ACID 数据库设计原则。 在事务中,数据应该是一致的,具有可预测和稳定的关系。
间不同的 隔离级别 ,非可重复读取由防止 串行化读取 和 重复读取 的水平,并且通过允许 一致读取 ,并 读未提交的 水平。
另请参见 ACID , 一致读取 , 隔离级别 , READ UNCOMMITTED , REPEATABLE READ , SERIALIZABLE , transaction 。
另请参见 异步I / O 。
数据库设计策略,将数据拆分为多个表,并将重复值压缩为由ID表示的单个行,以避免存储,查询和更新冗余或冗长的值。 它通常用于 OLTP 应用程序。
例如,地址可能被赋予唯一ID,因此人口普查数据库可以 通过将该ID与一个系列的每个成员相关联 来表示 该地址处 的关系 ,而不是存储复杂值的多个副本,例如 123 Main Street ,Anytown,美国 。
再例如,虽然简单的地址簿应用程序可能将每个电话号码存储在与人名和地址相同的表中,但电话公司数据库可能会为每个电话号码分配一个特殊ID,并将号码和ID存储在单独的表中。 当区域代码分开时,这种标准化表示可以简化大规模更新。
并不总是建议进行标准化。 主要查询并且仅通过完全删除和重新加载来更新的数据通常保存在具有重复值的冗余副本的更少,更大的表中。 此数据表示称为 非规范化 ,并且经常在数据仓库应用程序中找到。
一组数据访问技术的广义术语,它不使用
SQL
语言作为读取和写入数据的主要机制。
一些NoSQL技术充当键值存储,只接受单值读写;
一些人放松了
ACID
方法
的限制
;
还有一些人不需要预先计划好的
架构
。
通过使用
memcached
API直接访问某些类型的MySQL表,
MySQL用户可以将NoSQL风格的处理速度和简单性与SQL操作相结合,以实现灵活性和便利性
。
该
memcached的
接口
InnoDB
表格在MySQL 5.6及更高版本中可用;
有关详细信息
,
请参见
第15.19节“InnoDB memcached插件”
。
表
的
memcached
接口
NDB
在NDB Cluster 7.2及更高版本中可用;
请参阅
NDB群集的ndbmemcache-Memcache API
。
一种 约束 ,指定 列 不能包含任何 NULL 值。 它有助于保持 参照完整性 ,因为数据库服务器可以识别具有错误缺失值的数据。 它还有助于查询优化中涉及的算法,允许优化器预测该列上索引中的条目数。
另请参见 column , constraint , NULL , primary key , referential integrity 。
SQL中
的特殊值
,表示缺少数据。
任何涉及
NULL
值的
算术运算或相等测试
反过来都会产生
NULL
结果。
(因此它类似于NaN的IEEE浮点概念,
“
不是数字
”
。)
在确定要划分的行数时,
任何聚合计算(例如
AVG()
忽略带有
NULL
值的行)。
唯一适用于
NULL
值的
测试
使用SQL惯用语
IS
NULL
或
IS NOT NULL
。
NULL
值在
索引
操作中
起作用
,因为对于性能,数据库必须最小化跟踪丢失数据值的开销。
通常,
NULL
值不存储在索引中,因为使用标准比较运算符测试索引列的查询永远不会将行与
NULL
该列
的
值
匹配
。
出于同样的原因,唯一索引不会阻止
NULL
值;
这些值根本没有在索引中表示。
NOT
NULL
在列上
声明
约束可以确保索引中没有任何行,从而可以更好地进行查询优化(准确计算行数并估计是否使用索引)。
由于
主键
必须能够唯一标识表中的每一行,因此单列主键不能包含任何
NULL
值,并且多列主键不能包含所有列中包含
NULL
值的
任何行
。
虽然Oracle数据库允许将
NULL
值与字符串连接,但
InnoDB
请将此类操作的结果视为
NULL
。
包含数据库配置信息的文件。 具有此扩展名的文件包含在由 MySQL Enterprise Backup 产品 的 mysqlbackup 命令生成的 备份中 。
另请参见 MySQL Enterprise Backup , mysqlbackup命令 。
包含可变长度数据(例如
BLOB
和
VARCHAR
)的列太长而无法放在
B树
页面上。
数据存储在
溢出页面中
。
该
动态
记录格式是这样的存储比旧的更高效的
紧凑
行格式。
“ 在线交易处理 ”的 缩写 。 数据库系统或数据库应用程序,它运行具有许多 事务 的工作负载 ,频繁写入和读取,通常一次影响少量数据。 例如,航空公司预订系统或处理银行存款的应用程序。 数据可以以 标准化 形式 组织, 以实现 DML (插入/更新/删除)效率和 查询 效率 之间的平衡 。 与 数据仓库 对比 。
凭借其 行级锁定 和 事务 功能, InnoDB 是OLTP应用程序中使用的MySQL表的理想存储引擎。
一种不涉及数据库停机,阻塞或受限操作的操作。 通常应用于 DDL 。 缩短受限操作周期的操作(例如 快速索引创建 )已经演变为 MySQL 5.6中 更广泛的 在线DDL 操作。
在备份环境中, 热备份 是在线操作, 热备份 部分是在线操作。
一种
InnoDB
在
DDL
(主要
ALTER
TABLE
)操作
期间
提高表的性能,并发性和可用性的功能
。
有关
详细信息
,
请参见
第15.12节“InnoDB和在线DDL”
。
细节因操作类型而异。
在某些情况下,可以在进行中同时修改表
ALTER
TABLE
。
可以在没有表副本或使用特殊优化类型的表副本的情况下执行该操作。
就地操作的DML日志空间使用由
innodb_online_alter_log_max_size
配置选项
控制
。
此功能是对 MySQL 5.5中 快速索引创建 功能 的增强 。
一种指导关系数据库系统的低级实现决策的方法。 关系数据库中 的性能和 并发性 要求 意味着必须快速启动或分派操作。 一致性和 参照完整性 的要求 意味着任何操作都可能失败:事务可能会被回滚,即 DML 操作可能违反约束,锁定请求可能导致死锁,网络错误可能导致超时。 乐观策略是假设大多数请求或尝试都会成功的策略,因此为失败案例做准备的工作相对较少。 当这个假设成立时,数据库几乎不做不必要的工作; 当请求失败时,必须进行额外的工作来清理和撤消更改。
InnoDB
使用乐观策略进行
锁定
和
提交
等操作
。
例如,事务更改的数据可以在提交发生之前写入数据文件,从而使提交本身非常快,但如果事务回滚则需要更多工作来撤消更改。
乐观的策略相反的是一个 悲观的 一个,其中一个系统进行了优化处理是不可靠的,经常不成功的操作。 这种方法在数据库系统中很少见,因为在选择可靠的硬件,网络和算法时要特别小心。
MySQL的配置参数,可以存储在 选项文件中 ,也可以在 命令行中传递。
对于
选项
适用于
InnoDB的
表,每个选项名称开头的前缀
innodb_
。
包含
MySQL实例
的配置
选项
的文件
。
传统上,在Linux和Unix上,这个文件被命名
my.cnf
,在Windows上它被命名
my.ini
。
单独分配的磁盘
页面
包含可变长度的列(例如
BLOB
和
VARCHAR
),这些列太长而无法放在
B树
页面上。
关联列称为
页外列
。
包含分区定义的文件。
具有此扩展名的文件包含在由
MySQL Enterprise Backup
产品
的
mysqlbackup
命令生成的
备份中
。
通过
InnoDB
在MySQL 5.7.6中
引入对
表
的本机分区支持,
.par
不再为分区
InnoDB
表
创建文件
。
分区
MyISAM
表继续使用
.par
MySQL 5.7中的文件。
在MySQL 8.0中,分区支持仅由
InnoDB
存储引擎提供。
因此,
.par
从MySQL 8.0开始不再使用文件。
另请参见 MySQL Enterprise Backup , mysqlbackup命令 。
一个单位,表示
InnoDB
在磁盘(
数据文件
)和内存(
缓冲池
)
之间的任何时间传输
多少数据
。
页面可以包含一行或多
行
,具体取决于每行中的数据量。
如果行不完全适合单个页面,则
InnoDB
设置其他指针样式的数据结构,以便有关该行的信息可以存储在一个页面中。
在每个页面中放入更多数据的一种方法是使用 压缩行格式 。 对于使用BLOB或大文本字段的表, 紧凑行格式 允许将这些大列与行的其余部分分开存储,从而减少不引用这些列的查询的I / O开销和内存使用量。
当
InnoDB
批量读取或写入页面集以增加I / O吞吐量时,它一次读取或写入一个
范围
。
InnoDB
MySQL实例中的
所有
磁盘数据结构共享相同的
页面大小
。
一个
InnoDB
后台
线程
是
刷新
脏页
从
缓冲池
。
在MySQL 5.6之前,此活动由
主线程
执行
。
页面清除程序线程的数量由
innodb_page_cleaners
MySQL 5.7.4中引入
的
配置选项
控制
。
对于MySQL 5.5以及包括MySQL 5.5的版本,
InnoDB
每页
的大小
固定为16千字节。
此值表示余额:大到足以容纳大多数行的数据,但又小到足以最小化将不需要的数据传输到内存的性能开销。
未测试或支持其他值。
从MySQL 5.6开始,
InnoDB
实例
的页面大小
可以是4KB,8KB或16KB,由
innodb_page_size
配置选项
控制
。
从MySQL 5.7.6开始,
InnoDB
还支持32KB和64KB的页面大小。
对于32KB和64KB页面大小,
ROW_FORMAT=COMPRESSED
不受支持,最大记录大小为16KB。
在创建MySQL实例时设置页面大小,之后它保持不变。
相同的页面大小适用于所有
InnoDB
表空间
,包括
系统表空间
,
每表文件表
空间和
一般表空间
。
较小的页面大小可以帮助使用小块大小的存储设备的性能,特别是对于 磁盘绑定 工作负载中的 SSD 设备 ,例如 OLTP 应用程序。 更新单个行时,将更少的数据复制到内存中,写入磁盘,重新组织,锁定等等。
另请参见 磁盘绑定 , 每表文件 , 常规表空间 , 实例 , OLTP , 页面 , SSD , 系统表空间 , 表空间 。
外键
关系中
的表,
其中包含从
子表
指向的初始列值
。
删除或更新父表中的行的后果取决于
外键定义中
的
ON UPDATE
和
ON
DELETE
子句。
可以依次自动删除或更新子表中具有相应值的行,或者可以设置这些列
NULL
,或者可以防止操作。
performance_schema
MySQL 5.5及更高版本中
的
模式提供了一组表,您可以查询这些表以获取有关MySQL服务器许多内部部分的性能特征的详细信息。
请参见
第26章,
MySQL性能架构
。
另请参见 INFORMATION_SCHEMA , latch , mutex , rw-lock 。
一种牺牲性能或并发性以支持安全性的方法。
如果大部分请求或尝试可能失败,或者请求失败的后果严重,则是适当的。
InnoDB
使用所谓的悲观
锁定
策略,以最大限度地减少
死锁
的可能性
。
在应用程序级别,您可以通过使用一开始就获取事务所需的所有锁的悲观策略来避免死锁。
许多内置数据库机制使用相反的 乐观 方法。
显示在查询结果集中但不在先前查询的结果集中的行。
例如,如果查询在
事务中
运行两次
,并且同时另一个事务在插入新行或更新行后提交,以使其与
WHERE
查询
的
子句
匹配
。
这种情况称为幻像读取。 防止比 不可重复读取 更难 ,因为锁定第一个查询结果集中的所有行不会阻止导致幻像出现的更改。
在不同的 隔离级别中 ,可 序列化读取 级别 阻止了幻像读取 ,并且 可重复读取 , 一致读取 和 读取未提交 级别 允许 。
另请参见 一致读取 , 隔离级别 , 不可重复读取 , READ UNCOMMITTED , REPEATABLE READ , SERIALIZABLE , transaction 。
一种涉及硬件相关方面的操作,例如磁盘块,内存页,文件,位,磁盘读取等。 通常,在专家级性能调整和问题诊断期间,物理方面很重要。 与 逻辑 对比 。
一个
备份
那份实际数据文件。
例如,
MySQL Enterprise Backup
产品
的
mysqlbackup
命令
会生成物理备份,因为其输出包含可由
服务器
直接使用的数据文件
,从而实现更快的
还原
操作。
与
逻辑备份
对比
。
mysqld
另请参阅 备份 , 逻辑备份 , MySQL Enterprise Backup , 还原 。
另请参见 时间点恢复 。
还原 备份 以在特定日期和时间重新创建数据库状态 的过程 。 通常缩写为 “ PITR ” 。 由于指定时间不太可能与备份时间完全对应,因此该技术通常需要 物理备份 和 逻辑备份的组合 。 例如,使用 MySQL Enterprise Backup 产品,您可以还原在指定时间点之前执行的上一次备份,然后 在备份时间和PITR时间之间 重放 二进制日志中的 更改 。
另请参阅 备份 , 二进制日志 , 逻辑备份 , MySQL Enterprise Backup , 物理备份 。
请参阅 索引前缀 。
在完成 应用 二进制日志 和 增量备份的 所有阶段之后 ,由 MySQL Enterprise Backup 产品 生成的一组备份文件 。 生成的文件已准备好进行 恢复 。 在应用步骤之前,这些文件称为 原始备份 。
另请参阅 二进制日志 , 热备份 , 增量备份 , MySQL Enterprise Backup , 原始备份 , 还原 。
一组列 - 并且暗示,基于这组列的索引 - 可以唯一地标识表中的每一行。
因此,它必须是不包含任何
NULL
值
的唯一索引
。
InnoDB
要求每个表都有这样的索引(也称为
聚簇索引
或
集群索引
),并根据主键的列值组织表存储。
选择主键值时,请考虑使用任意值( 合成键 ),而不是依赖于从某些其他源( 自然键 ) 派生的值 。
执行程序的实例。 操作系统在多个正在运行的进程之间切换,允许一定程度的 并发 。 在大多数操作系统上,进程可以包含 共享资源的 多个 执行 线程 。 线程之间的上下文切换比进程之间的等效切换更快。
另请参见 infimum record , locking , supremum record 。
POSIX线程标准,它定义了用于Unix和Linux系统上的线程和锁定操作的API。
在Unix和Linux系统上,
InnoDB
将此实现用于
互斥锁
。
另见 互斥 。
由一个或多个单独的后台线程(由其控制
innodb_purge_threads
)
执行的一种垃圾收集
,它按周期性计划运行。
清除
从
历史列表中
解析和处理
撤消日志
页面,
以便删除标记为删除的聚簇和二级索引记录(通过以前的
语句),并且不再需要
MVCC
或
回滚
。
清除后,清除会从历史列表中释放撤消日志页面。
DELETE
将
DELETE
操作
产生的二级索引页
的
更改存储
在
更改缓冲区中
而不是立即写入更改的技术,以便可以执行物理写入以最小化随机I / O.
(因为删除操作是一个两步过程,所以此操作会缓冲通常清除先前标记为删除的索引记录的写入。)它是一种
更改缓冲
类型
;
其他是
插入缓冲
和
删除缓冲
。
InnoDB
历史列表的
另一个名称
。
与
innodb_max_purge_lag
配置选项相关。
甲
螺纹
的内
InnoDB
过程,其专用于执行周期性
清洗
操作。
在MySQL 5.6及更高版本中,
innodb_purge_threads
配置选项
启用了多个清除线程
。
在 SQL中 ,从一个或多个 表 中读取信息的操作 。 根据数据的组织和查询的参数,可以通过查询 索引 来优化查找 。 如果涉及多个表,则查询称为 连接 。
由于历史原因,有时对语句内部处理的讨论 在更广泛的意义上 使用 “ 查询 ” ,包括其他类型的MySQL语句,如 DDL 和 DML 语句。
优化程序关于如何 最有效 地执行 查询 的决策集 ,包括 要使用的 索引 或索引,以及 连接 表 的顺序 。 计划稳定性 涉及对给定查询一致地做出相同的选择。
请参阅 常规查询日志 。
以减少数据库的活动量,通常在用于操作做准备,如
ALTER
TABLE
,一个
备份
,或
停机
。
可能会或可能不会涉及尽可能多的
刷新
,因此
InnoDB
不会继续执行后台I / O.
在MySQL 5.6及更高版本中,语法
FLUSH TABLES ...
FOR EXPORT
将一些数据写入磁盘
InnoDB
,以便通过复制数据文件来更简单地备份这些表。
一种树数据结构,用于对诸如地理坐标,矩形或多边形之类的多维数据进行空间索引。
另见 B树 。
“ Redundant Array of Inexpensive Drives ”的 缩写 。 跨多个驱动器传播I / O操作可 在硬件级别 实现更高的 并发性 ,并提高低级写入操作的效率,否则将按顺序执行。
另请参见 并发 。
一种快速估算列中不同值的数量(列的
基数
)的技术。
InnoDB
从索引中随机抽样页面并使用该数据估计不同值的数量。
另见 基数 。
在应用 二进制日志 和任何 增量备份 中 反映的更改之前 , MySQL Enterprise Backup 产品 生成的初始备份文件集 。 在此阶段,文件尚未准备好 还原 。 应用这些更改后,这些文件称为 准备备份 。
另请参阅 二进制日志 , 热备份 , ibbackup_logfile , 增量备份 , MySQL Enterprise Backup , 准备备份 , 还原 。
为了 提高性能 ,使用 锁定 策略 的 隔离级别 可以 放松 事务 之间的某些保护 。 事务无法查看来自其他事务的未提交数据,但是它们可以查看当前事务启动后由另一个事务提交的数据。 因此,事务永远不会看到任何不良数据,但它确实看到的数据可能在某种程度上取决于其他事务的时间。
当具有此隔离级别的事务执行
UPDATE ... WHERE
或
DELETE ...
WHERE
操作时,其他事务可能必须等待。
事务可以在
不使其他事务等待的情况下
执行
SELECT ... FOR
UPDATE
和
LOCK IN SHARE MODE
操作。
SELECT ... FOR SHARE
SELECT
... LOCK IN SHARE MODE
在MySQL 8.0.1中
替换
,但
LOCK IN SHARE MODE
仍可用于向后兼容。
另请参见 ACID , 隔离级别 , 锁定 , REPEATABLE READ , SERIALIZABLE , transaction 。
在事务之间提供最少保护 的 隔离级别 。 查询采用 锁定 策略,允许它们在通常等待另一个事务的情况下继续。 但是,这种额外的性能是以不太可靠的结果为代价的,包括已被其他事务更改但尚未提交的数据(称为 脏读) )。 请谨慎使用此隔离级别,并注意结果可能不一致或可重现,具体取决于其他事务同时执行的操作。 通常,具有此隔离级别的事务仅执行查询,而不执行插入,更新或删除操作。
MVCC
机制
使用的内部快照
InnoDB
。
某些
事务
(取决于它们的
隔离级别
)会查看事务(或在某些情况下,语句)启动时的数据值。
使用读取视图的隔离级别是
REPEATABLE READ
,
READ COMMITTED
和
READ UNCOMMITTED
。
另请参见 隔离级别 , MVCC , READ COMMITTED , READ UNCOMMITTED , REPEATABLE READ , transaction 。
一种I / O请求,它将一组
页面
(整个
范围
)
异步
预取
到
缓冲池中
,预计很快就会需要这些页面。
线性预读技术基于前一范围中的页面的访问模式预取一个范围的所有页面。
一旦来自相同范围的特定数量的页面在缓冲池中,随机预读技术就预取所有页面。
随机预读不是MySQL 5.5的一部分,而是在
innodb_random_read_ahead
配置选项
的控制下在MySQL 5.6中重新引入
。
A型的
交易
,可以为被优化
InnoDB
表通过消除一些涉及创建一个簿记的
读视图
每个事务。
只能执行
非锁定读取
查询。
它可以使用语法显式启动
START TRANSACTION
READ ONLY
,也可以在某些条件下自动
启动
。
有关
详细信息
,
请参见
第8.5.3节“优化InnoDB只读事务”
。
一个
锁
在索引记录。
例如,
SELECT c1 FROM t WHERE c1 = 10 FOR
UPDATE;
阻止任何其他事务插入,更新或删除值为
t.c1
10的
行
。与
间隙锁定
和
下一键锁定
对比
。
当
DML
语句对
表
进行更改
时
,以记录为单位的数据记录在
重做日志中
。
在
崩溃恢复
期间使用它
来纠正由未完成的
事务
写入的数据
。
不断增加的
LSN
值表示通过重做日志的重做数据的累积量。
InnoDB
在
崩溃恢复
期间使用的基于磁盘的数据结构
,用于纠正由未完成的
事务
写入的数据
。
在正常操作期间,它编码更改
InnoDB
表数据的
请求,这些请求
来自SQL语句或通过NoSQL接口的低级API调用。
在意外
关闭
之前
未完成更新
数据文件的
修改
会自动重播。
重做日志在物理上表示为一组文件,通常命名为
ib_logfile0
和
ib_logfile1
。
重做日志中的数据按照受影响的记录进行编码;
这些数据统称为
重做
。
数据通过重做日志的传递由不断增加的
LSN
值表示。
在MySQL 5.6.3中,重做日志的最大大小的原始4GB限制被提升到512GB。
重做日志的磁盘布局由配置选项的影响
innodb_log_file_size
,
innodb_log_group_home_dir
以及(很少)
innodb_log_files_in_group
。
重做日志操作的性能也受
日志缓冲区的
影响,
日志缓冲区
由
innodb_log_buffer_size
配置选项
控制
。
另请参见 崩溃恢复 , 数据文件 , ib_logfile , 日志缓冲区 , LSN , 重做 , 关闭 , 事务 。
最古老的
InnoDB
行格式
。
在MySQL 5.0.3之前,它是唯一可用的行格式
InnoDB
。
从MySQL 5.0.3到MySQL 5.7.8,默认行格式为
COMPACT
。
从MySQL 5.7.9开始,默认行格式由
innodb_default_row_format
配置选项
定义
,其默认设置为
DYNAMIC
。
您仍然可以指定
REDUNDANT
行格式以与旧
InnoDB
表
兼容
。
有关更多信息,请参见 第15.10节“InnoDB行格式” 。
始终以一致的格式维护数据的技术,这是 ACID 理念的 一部分 。 特别是,通过使用 外键约束 , 不同表中的数据保持一致 ,这可以防止更改发生或自动将这些更改传播到所有相关表。 相关机制包括 唯一约束 ,它可以防止错误地插入重复值,以及 NOT NULL约束 ,它可以防止错误地插入空值。
另请参见 ACID , FOREIGN KEY约束 , NOT NULL约束 , 唯一约束 。
现代数据库系统的一个重要方面。 数据库服务器对一对一,一对多,多对一和唯一性等关系进行编码和实施。 例如,一个人在地址数据库中可能有零个,一个或多个电话号码; 一个电话号码可能与几个家庭成员相关联。 在金融数据库中,可能要求一个人只有一个纳税人ID,并且任何纳税人ID只能与一个人相关联。
数据库服务器可以使用这些关系来防止插入错误数据,并找到查找信息的有效方法。 例如,如果声明一个值是唯一的,则服务器可以在找到第一个匹配项后立即停止搜索,并且可以拒绝尝试插入相同值的第二个副本。
在数据库级别,这些关系通过SQL功能表示,例如
表
中的列,唯一和
NOT NULL
约束
,
外键
以及不同类型的连接操作。
复杂关系通常涉及在多个表之间拆分数据。
通常,数据被
标准化
,因此一对多关系中的重复值仅存储一次。
在数学上下文中,数据库中的关系源自集合论。
例如,
子句
的
OR
和
AND
运算符
WHERE
表示联合和交集的概念。
在 全文搜索 功能中,一个数字表示搜索字符串与 FULLTEXT索引中 的数据之间的相似性 。 例如,当您搜索单个单词时,该单词通常与文本中出现多次的行相比,而不是仅出现一次的行。
另请参阅 全文搜索 , FULLTEXT索引 。
默认
隔离级别
为
InnoDB
。
它可以防止被查询的任何行被其他
事务
更改
,从而阻止
不可重复的读取
但不
阻止
幻像
读取。
它使用适度严格的
锁定
策略,以便事务中的所有查询都可以查看来自同一快照的数据,即事务开始时的数据。
当此隔离级别的事务执行
UPDATE ... WHERE
,
DELETE ...
WHERE
,
SELECT ... FOR UPDATE
,和
LOCK IN SHARE MODE
运营,其他交易可能需要等待。
SELECT ... FOR SHARE
SELECT
... LOCK IN SHARE MODE
在MySQL 8.0.1中
替换
,但
LOCK IN SHARE MODE
仍可用于向后兼容。
“保留曲目”是一个应用于字符集的术语。 字符集指令集是集合中字符的集合。 请参见 第10.2.1节“字符集保留节目” 。
将更改从 主数据库 发送 到一个或多个 从数据库 的做法 ,以便所有数据库具有相同的数据。 此技术具有广泛的用途,例如负载平衡,可实现更好的可扩展性,灾难恢复以及测试软件升级和配置更改。 可以通过称为 基于行的复制 和 基于语句的复制的 方法在数据库之间发送更改 。
将
MySQL Enterprise Backup
产品中的
一组备份文件
放在适当位置以供MySQL使用的过程。
可以执行此操作以修复损坏的数据库,返回到某个早期时间点,或者(在
复制
上下文中)设置新的
从属数据库
。
在
MySQL Enterprise Backup
产品中,此操作由
命令
copy-back
选项
mysqlbackup
执行。
一个 SQL 语句结束的 交易 ,撤消由事务所做的任何更改。 它与 commit 相反 ,它使得在事务中进行任何更改都是永久性的。
默认情况下,MySQL使用 自动提交 设置,该设置会在每个SQL语句后自动发出提交。 您必须先更改此设置,然后才能使用回滚技术。
包含 撤消日志 的存储区域 。 回滚段传统上驻留在 系统表空间中 。 从MySQL 5.6开始,回滚段可以驻留在 撤消表空间中 。 从MySQL 5.7开始,回滚段也分配给 全局临时表空间 。
由一组
列
定义的逻辑数据结构
。
一组行组成一个
表
。
在
InnoDB
数据文件中
,每个
页面
可以包含一行或多行。
尽管
InnoDB
使用术语
行格式
与MySQL语法保持一致,但行格式是每个表的属性,并适用于该表中的所有行。
表
行
的
磁盘存储格式
。
作为
增益新功能,如
压缩
,新行格式被引入以支持存储效率和性能所得到的改进。
InnoDB
InnoDB
InnoDB
表
的行格式
由
ROW_FORMAT
选项或
innodb_default_row_format
配置选项(在MySQL 5.7.9中引入)指定。
行格式包括
REDUNDANT
,
COMPACT
,
COMPRESSED
,和
DYNAMIC
。
要查看
InnoDB
表
的行格式,请在
中发出
SHOW TABLE STATUS
语句或查询
InnoDB
表元数据
INFORMATION_SCHEMA
。
一种 锁 ,可防止另一个 事务 以不兼容的方式访问行 。 其他事务可以自由地写入同一表中的其他行。 这是 由 InnoDB 表 上 的 DML 操作 完成 的 锁定 类型 。
与对比
表锁
的使用
MyISAM
,或在
DDL
上操作
InnoDB
的表不能用做
网上DDL
;
这些锁阻止对表的并发访问。
一种
复制
形式,
其中事件从
主服务器
传播,
指定如何更改
从属服务器
上的各个行
。
可以安全地用于该
innodb_autoinc_lock_mode
选项的
所有设置
。
另请参见 自动增量锁定 , innodb_autoinc_lock_mode , 主服务器 , 复制 , 从属服务器 , 基于语句的复制 。
用于 InnoDB 表 的 锁定 机制 ,依赖于 行锁 而不是 表锁 。 多个 事务 可以同时修改同一个表。 只有当两个事务尝试修改同一行时,其中一个事务才会等待另一个事务完成(并释放其行锁)。
用于根据
特定规则
InnoDB
表示并强制执行
内部内存数据结构的
共享访问
锁定
的低级对象
。
与对比
互斥
,它
InnoDB
用来表示和执行到内部存储器内的数据结构的独占访问。
互斥锁和rw锁被统称为
锁存器
。
rw-lock
类型包括
s-locks
(共享锁),
x-locks
(独占锁)和
sx-locks
(共享独占锁)。
An
s-lock
提供对公共资源的读访问权限。
An
x-lock
提供对公共资源的写访问权限,同时不允许其他线程进行不一致的读取。
An
sx-lock
提供对公共资源的写访问权限,同时允许其他线程进行不一致的读取。
sx-locks
在MySQL 5.7中引入,以优化并发性并提高读写工作负载的可伸缩性。
以下矩阵总结了rw-lock类型兼容性。
S
|
SX
|
X
|
|
---|---|---|---|
S
|
兼容 | 兼容 | 冲突 |
SX
|
兼容 | 冲突 | 冲突 |
X
|
冲突 | 冲突 | 冲突 |
另请参见 latch , lock , mutex , Performance Schema 。
保存点有助于实现嵌套 事务 。 它们可用于为作为较大事务一部分的表的操作提供范围。 例如,在预订系统中安排旅行可能涉及预订几个不同的航班; 如果没有所需的航班,您可以 回滚 预订该航段所涉及的更改,而无需回滚已成功预订的早期航班。
另请参见 rollback , transaction 。
能够添加更多工作并向系统发出更多同时请求,而不会因超出系统容量限制而导致性能突然下降。 软件体系结构,硬件配置,应用程序编码和工作负载类型都在可伸缩性中起作用。 当系统达到最大容量,提高可扩展性流行的技术 扩展 (增加现有的硬件或软件的能力)和 横向扩展 (添加新的服务器和MySQL的多个实例)。 通常将 可用性 与大规模部署的关键方面相结合。
一种 通过添加新服务器和更多MySQL实例 来提高 可伸缩性 的 技术 。 例如,设置复制,NDB群集,连接池或在一组服务器之间传播工作的其他功能。 与 放大 对比 。
一种
通过增加现有硬件或软件的容量
来提高
可扩展性
的
技术
。
例如,增加服务器上的内存并调整与内存相关的参数,例如
innodb_buffer_pool_size
和
innodb_buffer_pool_instances
。
与
横向扩展形成
对比
。
从概念上讲,模式是一组相互关联的数据库对象,例如表,表列,列的数据类型,索引,外键等。 这些对象通过SQL语法连接,因为列构成表,外键引用表和列,依此类推。 理想情况下,它们也是逻辑连接的,作为统一应用程序或灵活框架的一部分一起工作。 例如, INFORMATION_SCHEMA 和 performance_schema 数据库 在其名称中 使用 “ schema ” 来强调它们包含的表和列之间的紧密关系。
在MySQL中,物理上,
模式
与
数据库
是同义词
。
您可以替换关键字
SCHEMA
而不是
DATABASE
MySQL SQL语法,例如使用
CREATE SCHEMA
而不是
CREATE DATABASE
。
其他一些数据库产品也有所区别。 例如,在Oracle数据库产品中, 模式 仅表示数据库的一部分:单个用户拥有的表和其他对象。
另请参见 数据库 , INFORMATION_SCHEMA , 性能架构 。
另请参见 序列化字典信息(SDI) 。
在MySQL中,
全文搜索
查询使用特殊类型的索引
FULLTEXT索引
。
在MySQL 5.6.4及更高版本中,
表
InnoDB
和
MyISAM
表都支持
FULLTEXT
索引;
以前,这些索引仅适用于
MyISAM
表格。
另请参阅 全文搜索 , FULLTEXT索引 。
一种
表示表列子集
的
InnoDB
索引
。
一个
InnoDB
表可以有零个,一个或多个二级指标。
(与
每个
表
所需
的
聚集索引
形成
对比
InnoDB
,并存储所有表列的数据。)
辅助索引可用于满足仅需要来自索引列的值的查询。 对于更复杂的查询,它可用于标识表中的相关行,然后使用聚簇索引通过查找检索这些行。
创建和删除二级索引传统上涉及复制
InnoDB
表中
所有数据的大量开销
。
该
快速索引创建
功能,使得无论
CREATE
INDEX
和
DROP INDEX
报表快得多
InnoDB
二级指标。
InnoDB
表空间中的
一个分区
。
如果表空间类似于目录,则段与该目录中的文件类似。
细分可以增长。
可以创建新细分。
例如,在 每个表 的 文件表 空间中,表数据位于一个段中,每个关联的索引位于其自己的段中。 该 系统表空间 包含许多不同的段,因为它可以保存许多表及其相关索引。 在MySQL 8.0之前,系统表空间还包括一个或多个 用于 撤消日志的 回滚段 。
插入和删除数据时,段会增长和缩小。 当一个片段需要更多空间时,它一次扩展一个 范围 (1兆字节)。 类似地,当不再需要该范围内的所有数据时,段释放一个范围的空间。
数据分布的属性,列中不同值的数量(其
基数
)除以表中的记录数。
高选择性意味着列值相对独特,并且可以通过索引有效地检索。
如果您(或查询优化器)可以预测
WHERE
子句
中的测试
仅匹配表中的少量(或比例)行,则
如果使用索引首先评估该测试
,则整体
查询
往往是高效的。
一种用于
UPDATE
语句
的读操作
,即
READ COMMITTED
和
一致读
的组合
。
当
UPDATE
语句检查已锁定的行时,
InnoDB
将最新提交的版本返回给MySQL,以便MySQL可以确定该行是否与该
WHERE
条件
匹配
UPDATE
。
如果行匹配(必须更新),MySQL再次读取该行,这次
InnoDB
要么锁定它,要么等待锁定它。
只有当事务具有READ COMMITTED
隔离级别
或
innodb_locks_unsafe_for_binlog
启用
该
选项
时,才会发生此类读取操作
。
innodb_locks_unsafe_for_binlog
已在MySQL 8.0中删除。
另请参见 一致读取 , 隔离级别 , READ COMMITTED 。
该 隔离级别 ,使用最保守的锁定策略,以防止任何其他 交易 从插入或改变,是由该事务读取数据,直到它完成。 这样,可以在事务中反复运行相同的查询,并确保每次都检索相同的结果集。 自当前事务开始以来,任何更改由另一个事务提交的数据的尝试都会导致当前事务等待。
这是SQL标准指定的默认隔离级别。
在实践中,很少需要这种严格程度,因此默认的隔离级别
InnoDB
是下一个最严格的
REPEATABLE READ
。
序列化形式的字典对象元数据。
SDI以
JSON
格式
存储
。
从MySQL 8.0.3开始,SDI存在于
InnoDB
除临时表空间和撤消表空间文件之外的
所有
表空间文件中。
表空间文件中存在SDI可提供元数据冗余。
例如,
如果数据字典变得不可用,则
可以使用
ibd2sdi
实用程序
从表空间文件中提取字典对象元
数据。
对于
MyISAM
表,SDI存储在
.sdi
架构目录
中的
元数据文件中。
执行
IMPORT
TABLE
操作
需要SDI元数据文件
。
另请参见 file-per-table , 通用表空间 , 系统表空间 , 表空间 。
一种程序,它持续运行,等待接收来自另一个程序( 客户端 )的 请求并采取行动 。 因为通常整个计算机专用于运行一个或多个服务器程序(例如数据库服务器,Web服务器,应用程序服务器或这些服务器的某种组合),术语 服务器 也可以指运行服务器软件的计算机。
甲
临时表
,其存储用户创建的
临时表
由所生成的和内部的临时表
优化
时
InnoDB
被配置为用于内部临时表在磁盘上的存储引擎。
引用 系统表空间 或 通用表空间的 另一种方法 。 MySQL 5.7中引入了一般表空间。 多个表可以驻留在共享表空间中。 只有一个表可以驻留在 每个表 的 文件表 空间中。
将
重做条目包含在
重做日志的
某些部分中的
所有
脏
缓冲池页面
刷新
到磁盘
的过程
。
在
重用日志文件的一部分
之前发生
;
日志文件以循环方式使用。
通常发生写入密集型
工作负载
。
InnoDB
停止MySQL服务器的过程。
默认情况下,此过程会清除
InnoDB
表的
操作
,因此
关闭
速度
InnoDB
可能会
很慢
,但可以在以后快速启动。
如果跳过清理操作,则
关闭
速度很快
,但必须在下次重新启动时执行清理。
关闭模式
InnoDB
由
innodb_fast_shutdown
选项
控制
。
经常缩短为 “ 奴隶 ” 。 复制 方案中的 数据库 服务器 计算机, 它接收来自其他服务器( 主 服务器 )的更改并应用这些相同的更改。 因此它保持与主人相同的内容,尽管它可能落后一些。
在MySQL中,从属服务器通常用于灾难恢复,以取代失败的主服务器。 它们还常用于测试软件升级和新设置,以确保数据库配置更改不会导致性能或可靠性问题。
从属服务器通常具有高工作负载,因为它们处理从主服务器 中继的 所有 DML (写入)操作以及用户查询。 为了确保从服务器能够足够快地从主服务器应用更改,它们通常具有快速I / O设备和足够的CPU和内存,以在同一从服务器上运行多个数据库实例。 例如,主服务器可能使用硬盘驱动器存储,而从服务器使用 SSD 。
一种 用于MySQL服务器处理的SQL语句的性能调整 的 日志 。 日志信息存储在文件中。 您必须启用此功能才能使用它。 您可以控制记录哪些类别的 “ 慢 ” SQL语句。 有关更多信息,请参见 第5.4.5节“慢查询日志” 。
一种
关闭
,
InnoDB
在完成之前
执行额外的
刷新操作。
也称为
干净关机
。
由配置参数
innodb_fast_shutdown=0
或命令
指定
SET GLOBAL innodb_fast_shutdown=0;
。
虽然关闭本身可能需要更长时间,但该时间将在后续启动时保存。
用于在创建
InnoDB
索引
期间对数据进行排序的缓冲区
。
使用
innodb_sort_buffer_size
配置选项
配置排序缓冲区大小
。
用于唯一标识
MySQL实例中
的
InnoDB
表空间
的标识符
。
系统表空间
的空间ID
始终为零;
这个相同的ID适用于系统表空间内或一般表空间内的所有表。
每个
table-per-table表
空间和
一般表空间
都有自己的空间ID。
在MySQL 5.6之前,这个硬编码值
InnoDB
在MySQL实例之间
移动
表空间文件时
遇到了困难
。
在MySQL 5.6开始,您可以通过复制实例之间的表空间文件
传输表空间
涉及报表功能
FLUSH TABLES ... FOR
EXPORT
,
ALTER TABLE ... DISCARD
TABLESPACE
以及
ALTER TABLE ... IMPORT
TABLESPACE
。
调整空间ID所需的信息将在
.cfg文件中
传送,该
文件
与表空间一起复制。
有关详细
信息,
请参见
第15.6.3.7节“将表空间复制到另一个实例”
。
另请参见 .cfg文件 , 每表文件 , 通用表空间 , .ibd文件 , 系统表空间 , 表空间 ,可 传输表空间 。
一种文件类型,通过将表示空块的元数据写入磁盘而不是写入实际的空白空间来更有效地使用文件系统空间。
在
InnoDB
透明的页面压缩
功能依赖于稀疏文件的支持。
有关更多信息,请参见
第15.9.2节“InnoDB页面压缩”
。
一种 持续测试资源是否可用 的 等待 操作。 此技术用于通常仅在短时间内保持的资源,其中在 “ 忙循环 ”中 等待 比使线程进入休眠并执行上下文切换更有效。 如果资源在短时间内不可用,则自旋循环停止并使用另一种等待技术。
结构化查询语言,是执行数据库操作的标准语言。 通常分为 DDL , DML 和 查询 类别 。 MySQL包括一些其他语句类别,如 复制 。 请参见 第9章, 语言结构 的SQL语法的基石, 第11章, 数据类型 的数据类型,以使用MySQL表列, 第13章, SQL语句语法 有关SQL语句及其相关的类别,以及细节 第12章, 功能和操作员 用于查询中使用的标准和MySQL特定函数。
“ 固态硬盘 ”的 缩写 。 一种具有与传统硬盘驱动器( HDD ) 不同的性能特征的存储设备 :较小的存储容量,随机读取更快,没有移动部件,并且具有许多影响写入性能的考虑因素。 其性能特征可以影响 磁盘绑定 工作负载 的吞吐量 。
启动MySQL服务器的过程。 通常由 第4.3节“MySQL服务器和服务器启动程序”中 列出的程序之一完成 。 关机 的反面 。
另见 shutdown 。
一种
复制
形式,
其中SQL语句从
主服务器
发送
并在
从属服务器
上重放
。
它需要注意
innodb_autoinc_lock_mode
选项
的设置
,以避免
自动增量锁定的
潜在时序问题
。
另请参见 自动增量锁定 , innodb_autoinc_lock_mode , 主服务器 , 复制 , 基于行的复制 , 从属服务器 。
与每个
InnoDB
表
和
索引
相关的估计值
,用于构建有效的
查询执行计划
。
主要值是
基数
(不同值的数量)以及表行或索引条目的总数。
该表的统计信息表示其
主键
索引中
的数据
。
辅助索引
的统计信息
表示该
索引
所涵盖的行。
估计值而不是精确计数,因为在任何时刻,不同的
事务
可以插入和删除同一个表中的行。
要使值不经常重新计算,可以启用
持久统计信息
,其中值存储在
InnoDB
系统表中,并仅在发出
ANALYZE
TABLE
语句
时刷新
。
您可以
通过
配置选项
控制
计算统计信息时
如何
处理
NULL
值
innodb_stats_method
。
其他类型的统计信息可通过 INFORMATION_SCHEMA 和 PERFORMANCE_SCHEMA 表 用于数据库对象和数据库活动 。
另请参见 基数 , 索引 , INFORMATION_SCHEMA , NULL , 性能架构 , 主键 , 查询执行计划 , 二级索引 , 表 , 事务 。
能够根据共同的根词搜索单词的不同变体,例如单数和复数,或过去,现在和将来的动词时态。
此功能目前支持
MyISAM
全文搜索
功能,但没有
FULLTEXT索引
的
InnoDB
表。
另请参阅 全文搜索 , FULLTEXT索引 。
在
FULLTEXT索引中
,一个被认为是普遍或微不足道的单词,它从
搜索索引中
被省略
并在搜索查询中被忽略。
不同的配置设置控制
InnoDB
和
MyISAM
表的
停用词处理
。
有关
详细信息
,
请参见
第12.9.4节“全文停用词”
。
另请参见 FULLTEXT索引 , 搜索索引 。
MySQL数据库的一个组件,用于执行存储,更新和查询数据的低级工作。
在MySQL 5.5及更高版本中,
InnoDB
是新表的默认存储引擎,取代
MyISAM
。
设计不同的存储引擎时,诸如内存使用率与磁盘使用率,读取速度与写入速度以及速度与稳健性等因素之间存在不同的权衡。
每个存储引擎都管理特定的表,因此我们引用
InnoDB
表,
MyISAM
表等。
在
MySQL企业备份
产品来备份优化
InnoDB
表。
它还可以备份由
MyISAM
其他存储引擎
处理的表
。
另请参见 InnoDB , MySQL Enterprise Backup , 表类型 。
一列,其值是根据列定义中包含的表达式计算的。 插入或更新行时,将评估和存储列值。 存储的生成列需要存储空间并且可以编制索引。
与 虚拟生成列 对比 。
由
innodb_strict_mode
选项
控制的设置的通用名称
。
启用此设置会导致某些通常被视为警告的情况被视为错误。
例如,与
文件格式
和
行格式
相关的某些选项的无效组合(
通常会产生警告并继续使用默认值)现在会导致
CREATE TABLE
操作失败。
innodb_strict_mode
在MySQL 5.7中默认启用。
MySQL也有一种称为严格模式的东西。 请参见 第5.1.11节“服务器SQL模式” 。
另请参见 文件格式 , innodb_strict_mode , 行格式 。
在表示 缓冲池 的列表结构中, 相对较旧且相对较新的页面由 列表的 不同部分表示 。 一组参数控制这些部分的大小以及新旧页面之间的分界点。
甲
伪记录
在索引中,代表
间隙
以上在索引的最大值。
如果事务具有诸如的语句
SELECT ... FROM ... WHERE col > 10 FOR
UPDATE;
,并且该列中的最大值为20,则它是对supremum记录的锁定,阻止其他事务插入更大的值,例如50,100等。
另请参见 gap , infimum record , pseudo-record 。
另请参见 合成密钥 。
索引列,通常是 主键 ,其中值是任意分配的。 通常使用 自动增量 列完成。 通过将值视为完全任意,您可以避免过度限制性规则和错误的应用程序假设。 例如,如果员工被批准招聘但从未实际加入,则表示员工编号的数字序列可能会有间隙。 或者,员工编号100的雇用日期可能晚于员工编号500,如果他们离开公司后再重新加入。 数值也会产生较短的可预测长度值。 例如,存储数字代码意味着 “ 道路 ” , “ 大道 ” , “ 高速公路 ” 等比一遍又一遍地重复这些弦更节省空间。
也称为 代理键 。 与 自然键形成 对比 。
一个或多个数据文件(
ibdata文件
),包含
InnoDB
相关对象
的元数据,
更改缓冲区
的存储区域
和
双写缓冲区
。
InnoDB
如果在系统表空间中创建表而不是
每个表文件
或
一般表空间,
它也可能包含表的表和索引数据
。
系统表空间中的数据和元数据适用
于MySQL
实例中的
所有
数据库
。
在MySQL 5.6.7之前,默认设置是将所有
InnoDB
表和索引
保留
在系统表空间内,这通常会导致此文件变得非常大。
由于系统表空间永远不会缩小,因此如果加载并删除大量临时数据,则可能会出现存储问题。
在MySQL 8.0中,默认为
每表文件
模式,其中每个表及其相关索引存储在单独的
.ibd文件中
。
此默认使得它更容易使用
InnoDB
依赖于功能
DYNAMIC
和
COMPRESSED
行格式,如表
压缩
,高效的存储
关闭页的列
和大索引键前缀。
将所有表数据保存在系统表空间或单独的
.ibd
文件中通常会影响存储管理。
在
MySQL企业备份
产品可能备份一小部分的大文件,或许多小文件。
在具有数千个表的系统上,处理数千个
.ibd
文件
的文件系统操作
可能会导致瓶颈。
InnoDB
介绍了MySQL 5.7.6中的通用表空间,它们也用
.ibd
文件
表示
。
常规表空间是使用
CREATE
TABLESPACE
语法
创建的共享表空间
。
它们可以在数据目录之外创建,能够保存多个表,并支持所有行格式的表。
请参阅 更改缓冲区 , 压缩 , 数据字典 , 数据库 , 双写缓冲区 , 动态行格式 , 每表文件 , 常规表空间 , .ibd文件 , ibdata文件 , innodb_file_per_table , 实例 , MySQL企业备份 , 页外列 , 表空间 , 撤消日志 。
每个MySQL表都与特定的 存储引擎 相关联 。 InnoDB 表具有 影响性能, 可伸缩性 , 备份 ,管理和应用程序开发的 特定 物理 和 逻辑 特性 。
在文件存储方面,
InnoDB
表属于以下表空间类型之一:
共享
InnoDB
系统表空间
,由一个或多个
ibdata文件组成
。
甲 文件每次表 的表空间,由一个单独的 的.ibd文件 。
共享
通用表空间
,由单个
.ibd
文件组成。
MySQL 5.7.6中引入了一般表空间。
.ibd
数据文件包含表和
索引
数据。
InnoDB
在每个表文件表空间中创建的表可以使用
DYNAMIC
或
COMPRESSED
行格式。
这些行格式支持
InnoDB
诸如
压缩
,
页外列的
高效存储
和大索引键前缀等功能。
常规表空间支持所有行格式。
系统表空间支持使用 REDUNDANT , COMPACT 和 DYNAMIC 行格式的表。 MySQL 5.7.6中添加 了对 DYNAMIC 行格式的 系统表空间支持 。
该
行
的的
InnoDB
表格被组织成称为索引结构
聚簇索引
,基于该排序的条目
主键
表中的列。
数据访问针对对主键列进行筛选和排序的查询进行了优化,每个索引都包含每个条目的关联主键列的副本。
修改任何主键列的值是一项昂贵的操作。
因此,
InnoDB
表设计的
一个重要方面
是选择一个主键,该主键包含在最重要的查询中使用的列,并保持主键很短,很少更改值。
另请参见 备份 , 聚簇索引 , 紧凑的行格式 , 压缩行格式 , 压缩 , 动态记录格式 , 快速创建索引 , 文件的每个表 , 的.ibd文件 , 索引 , 脱页列 , 主键 , 冗余行格式 , 行 , 系统表空间 , 表空间 。
一个阻止任何其他
事务
访问表的
锁
。
InnoDB
通过使用诸如
联机DDL
,
行锁
和
用于处理
DML
语句和
查询的
一致读取之类的
技术,做出相当大的努力来使这种锁不必要
。
您可以使用该
语句
通过SQL创建这样的锁
;
从其他数据库系统或MySQL存储引擎迁移的步骤之一是在可行的情况下删除此类语句。
LOCK TABLE
查看 全表扫描 。
见 统计 。
一个数据文件,可以保存一个或多个
InnoDB
表
和关联
索引的数据
。
所述
系统表
中包含
InnoDB
的数据字典
,和之前到MySQL 5.6保存所有其他
InnoDB
默认表。
innodb_file_per_table
默认情况下在MySQL 5.6及更高版本中启用
的
选项允许在自己的表空间中创建表。
每个表的文件表空间支持诸如
离页列的
高效存储
,表压缩和可传输表空间等功能。
有关详细
信息,
请参见
第15.6.3.2节“每个表的文件表空间”
。
InnoDB
在MySQL 5.7.6中引入了通用表空间。
常规表空间是使用
CREATE
TABLESPACE
语法
创建的共享表空间
。
它们可以在MySQL数据目录之外创建,能够保存多个表,并支持所有行格式的表。
MySQL NDB Cluster还将其表分组到表空间中。 有关详细 信息, 请参见 第22.5.13.1节“NDB集群磁盘数据对象” 。
另请参见 压缩行格式 , 数据字典 , 数据文件 , 每表文件 , 通用表空间 , 索引 , innodb_file_per_table , 系统表空间 , 表 。
一个 表, 其数据不需要是真正永久的。 例如,临时表可以用作复杂计算或转换中的中间结果的存储区域; 崩溃后不需要恢复这些中间数据。 数据库产品可以采用各种快捷方式来提高临时表上的操作性能,通过不太谨慎地将数据写入磁盘以及在重新启动时保护数据的其他措施。
有时,数据本身会在设定的时间自动删除,例如在事务结束或会话结束时。 对于某些数据库产品,表本身也会自动删除。
另请参见 表格 。
InnoDB
使用两种类型的临时表空间。
会话临时表空间
存储由优化程序创建的用户创建的临时表和内部临时表。
在
全局临时表空间
存储
回滚段
为用户创建临时表所做的更改。
另请参见 FULLTEXT索引 。
由于I / O设备配置和硬件故障的组合可能发生的错误情况。
如果数据以小于
InnoDB
页面大小的
块
(默认情况下为16KB)写出,则写入时硬件故障可能导致只有部分页面存储到磁盘。
双
InnoDB
写缓冲区可以
防止这种可能性。
另请参见 doublewrite buffer 。
“ 每秒 交易 次数 ”的 缩写 ,是有时在基准测试中使用的度量单位。 它的值取决于 特定基准测试所代表 的 工作负载 ,以及您控制的因素,如硬件容量和数据库配置。
事务是可以 提交 或 回滚的 原子工作单元 。 当事务对数据库进行多次更改时,要么在提交事务时所有更改都成功,要么在事务回滚时撤消所有更改。
由实现的数据库事务
InnoDB
具有由首字母缩写词
ACID
统一知道的属性
,用于原子性,一致性,隔离性和持久性。
与每
行
关联的内部字段
。
该字段通过
INSERT
,
UPDATE
和
DELETE
操作来
物理地改变
,
以记录哪个
事务
已锁定该行。
MySQL 5.7.8中添加的一项功能,允许对
InnoDB
驻留在
每个表文件表
空间中的表
进行页级压缩
。
通过
COMPRESSION
使用
CREATE
TABLE
或
指定
属性
来启用页面压缩
ALTER
TABLE
。
有关更多信息,请参见
第15.9.2节“InnoDB页面压缩”
。
另请参见 file-per-table , 打孔 , 稀疏文件 。
允许将
表空间
从一个实例移动到另一个实例的功能。
传统上,这对
InnoDB
表空间来说
是不可能的,
因为所有表数据都是
系统表空间的
一部分
。
在MySQL 5.6及更高版本中,
FLUSH
TABLES ... FOR EXPORT
语法准备一个
InnoDB
表用于复制到另一个服务器;
运行
ALTER
TABLE
... DISCARD TABLESPACE
并
ALTER
TABLE ...
IMPORT TABLESPACE
在另一台服务器上将复制的数据文件带入另一个实例。
与
.ibd文件
一起复制的
单独
.cfg文件
用于在
导入表
空间时
更新表元数据(例如
空间ID
)。
看到
第15.6.3.7节“将表空间复制到另一个实例”
以获取用法信息。
一种
DDL
操作,用于删除表的全部内容,同时保持表和相关索引不变。
对比
下降
。
虽然从概念上讲它
DELETE
与没有
WHERE
子句
的
语句具有
相同的结果
,但它在幕后操作方式不同:
InnoDB
创建一个新的空表,删除旧表,然后重命名新表以取代旧表。
因为这是一个DDL操作,所以无法
回滚
。
如果被截断的表包含
引用另一个表的
外键
,则截断操作使用较慢的操作方法,一次删除一行,以便可以根据需要删除引用表中的相应行
ON DELETE CASCADE
。
(MySQL 5.5及更高版本不允许这种较慢形式的truncate,如果涉及外键,则返回错误。在这种情况下,请改用
DELETE
语句。
另请参见 DDL , drop , foreign key , rollback 。
指定有序元素集的技术术语。 这是一个抽象的概念,用于数据库理论的正式讨论。 在数据库字段中,元组通常由表行的列表示。 它们也可以由查询的结果集表示,例如,仅检索表的某些列的查询,或来自连接表的列。
另请参见 游标 。
作为 XA 规范 下的 分布式 事务的 一部分的操作 。 (有时缩写为2PC。)当多个数据库参与事务时,要么所有数据库都 提交 更改,要么所有数据库都 回滚 更改。
另请参见 commit , rollback , transaction , XA 。
在 事务的 整个生命周期中维护的数据 ,记录所有更改,以便在 回滚 操作时 可以撤消这些更改 。 它存储在 系统表空间 (在MySQL 5.7或更早版本中)或单独的 撤消表空间 中的 撤消日志 中 。 从MySQL 8.0开始,默认情况下,undo logs驻留在undo表空间中。
另请参见 rollback , rollback segment , system tablespace , transaction , undo log , undo tablespace 。
请参见 撤消日志 。
保存由活动 事务 修改的数据副本的存储区域 。 如果另一个事务需要查看原始数据(作为 一致读取 操作的一部分),则从该存储区域检索未修改的数据。
在MySQL 5.6和MySQL 5.7中,您可以使用
innodb_undo_tablespaces
变量将undo logs驻留在
undo表空间中
,该
表空间
可以放置在另一个存储设备(如
SSD)上
。
在MySQL 8.0中,撤消日志驻留在初始化MySQL时创建的两个默认撤消表空间中,并且可以使用
CREATE
UNDO
TABLESPACE
语法
创建其他撤消表空间
。
undo log分为单独的部分, 插入undo buffer 和 update undo buffer 。
撤消日志 的集合 。 撤消日志段存在于 回滚段中 。 撤消日志段可能包含来自多个事务的撤消日志。 撤消日志段一次只能由一个事务使用,但在事务 提交 或 回滚 后释放后可以重用 。 也可以称为 “ 撤消段 ” 。
另请参见 commit , rollback , rollback segment , undo log 。
undo表空间包含
undo日志
。
撤消日志存在于
撤消日志段中
,这些
日志段
包含在
回滚段中
。
回滚段传统上驻留在系统表空间中。
从MySQL 5.6开始,回滚段可以驻留在撤消表空间中。
在MySQL 5.6和MySQL 5.7中,撤消表空间的数量由
innodb_undo_tablespaces
配置选项
控制
。
在MySQL 8.0中,初始化MySQL实例时会创建两个默认的撤消表空间,并且可以使用
CREATE
UNDO
TABLESPACE
语法
创建其他撤消表空间
。
有关更多信息,请参见 第15.6.3.4节“撤消表空间” 。
一种 约束 ,断言列不能包含任何重复值。 就 关系 代数而言,它用于指定一对一关系。 为了有效地检查是否可以插入值(即,列中尚不存在该值),底层 唯一索引 支持唯一约束 。
具有 唯一约束 的列或列集的索引 。 因为已知索引不包含任何重复值,所以某些类型的查找和计数操作比正常类型的索引更有效。 针对此类索引的大多数查找只是确定某个值是否存在。 索引中的值数与表中的行数相同,或者至少是关联列的具有非空值的行数。
更改缓冲
优化不适用于唯一索引。
作为解决方法,您可以
unique_checks=0
在将批量数据加载到
InnoDB
表中时
临时设置
。
包含
唯一索引
的列集(一个或多个)
。
如果可以定义仅
WHERE
与一行匹配
的
条件,并且查询可以使用关联的唯一索引,则可以非常有效地执行查找和错误处理。
可变长度的数据类型。
VARCHAR
,,
VARBINARY
和
BLOB
和
TEXT
类型是可变长度类型。
InnoDB
将长度大于或等于768字节的固定长度字段视为可变长度字段,可以在
页外
存储
。
例如,
CHAR(255)
如果字符集的最大字节长度大于3,则列可以超过768字节
utf8mb4
。
检测到
死锁
时
自动选择
回滚
的
事务
。
回滚已更新最少行的事务。
InnoDB
可以使用
innodb_deadlock_detect
配置选项
禁用
死锁检测
。
另请参见 死锁 , 死锁检测 , innodb_lock_wait_timeout , 事务 。
请参见 虚拟生成列 。
一列,其值是根据列定义中包含的表达式计算的。
不存储列值,但在任何
BEFORE
触发器
之后立即读取行时计算列值
。
虚拟生成列不占用存储空间。
InnoDB
支持虚拟生成列上的二级索引。
与 存储的生成列 对比 。
虚拟索引是 一个或多个 虚拟生成列 上 的 二级索引 ,或者 是虚拟生成列与常规列或存储生成列的组合。 有关更多信息,请参见 第13.1.20.10节“二级索引和生成的列” 。
当
无法立即完成
诸如获取
锁定
,
互斥锁
或
锁存之
类的操作时,
InnoDB
暂停并再次尝试。
暂停的机制很精细,这个操作有自己的名字,
等待
。
使用内部
InnoDB
调度,操作系统
wait()
调用和短持续时间
自旋
循环
的组合暂停各个线程
。
在具有高负载和许多事务的系统上,您可以使用
SHOW INNODB STATUS
命令或
性能模式
的输出
来确定线程是否花费太多时间等待,如果是,则如何提高
并发性
。
一个 备份 采取数据库的同时运行,但在备份过程中,限制一些数据库操作。 例如,表可能变为只读。 对于繁忙的应用程序和网站,您可能更喜欢 热备份 。
在启动后的一段时间内在 典型 工作负载 下运行系统 ,以便 缓冲池 和其他内存区域在正常条件下填充。 当MySQL服务器重新启动或承受新工作负载时,此过程会自然发生。
通常,您运行工作负载一段时间以在运行性能测试之前预热缓冲池,以确保跨多个运行的结果一致; 否则,在第一次运行期间,性能可能会人为地降低。
在MySQL 5.6中,您可以通过启用
innodb_buffer_pool_dump_at_shutdown
和
innodb_buffer_pool_load_at_startup
配置选项
来加速预热过程,以便在
重新启动后将缓冲池的内容恢复到内存中。
MySQL 5.7中默认启用这些选项。
请参见
第15.8.3.7节“保存和恢复缓冲池状态”
。
SQL 和其他数据库操作 的组合和数量 ,由数据库应用程序在典型或高峰使用期间执行。 您可以在性能测试期间将数据库置于特定工作负载中,以识别 瓶颈 或在容量规划期间。
优化技术降低时写操作
脏页
被
刷新
从
InnoDB
缓冲池
。
如果页面中的行被多次更新,或者同一页面上的多行被更新,则所有这些更改将在单个写入操作中存储到数据文件中,而不是每次更改都写入一次。
用于协调分布式 事务的 标准接口 ,允许多个数据库参与事务,同时保持 ACID 合规性。 有关完整的详细信息,请参见 第13.3.8节“XA事务” 。
默认情况下启用XA分布式事务支持。
如果您不使用此功能,则可以禁用
innodb_support_xa
配置选项,从而避免每个事务的额外fsync的性能开销。
从MySQL 5.7.10开始,
innodb_support_xa
不允许
禁用,
因为它会使复制不安全并阻止与
二进制日志
组提交
相关的性能提升
。
该
innodb_support_xa
配置选项是在MySQL 8.0中删除。
一的一个特点
页
的
InnoDB
缓冲池
意味着它已经被最近访问过的,所以是缓冲池的数据结构内移动,所以它不会被
刷新
很快被
LRU
算法。
此术语用于
与缓冲池相关的表的
某些
INFORMATION_SCHEMA
列名称中。
另请参见 缓冲池 , 刷新 , INFORMATION_SCHEMA , LRU , 页面 。