Mysql 8.0新特性
Mysql 8.0新特性(1)
总结了已添加到MySQL 8.0中,不推荐使用的内容以及从MySQL 8.0中删除的内容。
MySQL 8.0中添加的功能
数据字典
MySQL现在合并了一个事务性数据字典,用于存储有关数据库对象的信息。 在以前的MySQL版本中,字典数据存储在元数据文件和非事务表中。
原子数据定义语句(Atomic DDL)
原子DDL语句将数据字典更新,存储引擎操作以及与DDL操作关联的二进制日志写入操作组合到单个原子事务中。
升级程序
以前,在安装新版本的MySQL之后,MySQL服务器会在下次启动时自动升级数据字典表,此后,DBA有望手动调用mysql_upgrade来升级mysql模式中的系统表以及其中的对象。 其他架构,例如sys架构和用户架构。
从MySQL 8.0.16开始,服务器执行以前由mysql_upgrade处理的任务。 在安装新的MySQL版本之后,服务器现在将在下次启动时自动执行所有必要的升级任务,并且不依赖于DBA调用mysql_upgrade。 另外,服务器更新帮助表的内容(mysql_upgrade没做的事情)。 新的–upgrade服务器选项可控制服务器如何执行自动数据字典和服务器升级操作。
安全和账户管理
- mysql系统数据库中的授权表现在是InnoDB(事务性)表。 以前,这些是MyISAM(非事务性)表。 授予表存储引擎的更改是帐户管理对帐单行为的伴随更改的基础。 以前,命名多个用户的帐户管理语句(例如CREATE USER或DROP USER)可能对某些用户成功而对其他用户失败。 现在,每个语句都是事务性的,并且对于所有指定的用户都成功,或者回滚,如果发生任何错误,则无效。 如果成功,则将语句写入二进制日志;如果失败,则不写入语句。 在这种情况下,将发生回滚并且不进行任何更改。
- 一个新的caching_sha2_password身份验证插件可用。 与sha256_password插件一样,caching_sha2_password实现SHA-256密码哈希,但是使用缓存来解决连接时的延迟问题。 它还支持更多的传输协议,并且不需要针对基于RSA密钥对的密码交换功能而针对OpenSSL进行链接。
- 与mysql_native_password插件相比,caching_sha2_password和sha256_password身份验证插件提供了更安全的密码加密,而caching_sha2_password提供的性能优于sha256_password。 由于caching_sha2_password具有这些优越的安全性和性能,因此它现在是首选的身份验证插件,并且也是默认的身份验证插件,而不是mysql_native_password。
- MySQL现在支持角色,这些角色被称为特权集合。 可以创建和删除角色。 角色可以具有授予和撤销的特权。 可以向用户帐户授予角色或从用户帐户撤消角色。 可以从授予该帐户的角色中选择该帐户的活动适用角色,并且可以在该帐户的会话期间进行更改。
MySQL现在合并了用户帐户类别的概念,根据系统用户和常规用户是否具有SYSTEM_USER特权对其进行区分。 - 以前,除了某些模式之外,不可能授予全局适用的特权。 现在,如果启用了partial_revokes系统变量,则可以。
- GRANT语句具有一个AS用户[WITH ROLE]子句,该子句指定有关用于语句执行的特权上下文的其他信息。 尽管此语法在SQL级别上可见,但其主要目的是通过使这些限制出现在二进制日志中,从而在部分撤销所施加的授予者特权限制的所有节点之间实现统一复制。
- MySQL现在维护有关密码历史记录的信息,从而可以限制重复使用以前的密码。 DBA可能要求在一定数量的密码更改或一段时间内,不要从以前的密码中选择新密码。 可以在全局范围内以及每个帐户基础上建立密码重用策略。
- 现在可以要求通过指定要替换的当前密码来验证更改帐户密码的尝试。 这使DBA可以防止用户在不证明他们知道当前密码的情况下更改密码。 可以在全局范围内以及每个帐户基础上建立密码验证策略。
现在允许帐户具有双重密码,这使得在复杂的多服务器系统中无缝执行阶段性密码更改而无需停机。 - 现在,MySQL使管理员能够配置用户帐户,以使由于密码错误而导致的连续登录失败过多,从而导致临时帐户锁定。 所需的失败次数和锁定时间可以每个帐户配置。
- 如果使用OpenSSL进行编译,MySQL现在支持FIPS模式,并且在运行时可以使用OpenSSL库和FIPS对象模块。 FIPS模式对加密操作施加了条件,例如对可接受的加密算法的限制或对更长密钥长度的要求。
- 服务器现在可以在运行时重新配置服务器用于新连接的TLS上下文。 例如,此功能可能很有用,可避免重启已经运行了很长时间以至于其SSL证书已过期的MySQL服务器。
- 如果服务器和客户端均使用OpenSSL 1.1.1或更高版本进行编译,则OpenSSL 1.1.1支持TLS v1.3协议进行加密连接,而MySQL 8.0.16和更高版本也支持TLS v1.3。
- 现在,MySQL将授予命名管道上的客户端的访问控制设置为在Windows上成功进行通信所必需的最低限度。 较新的MySQL客户端软件无需任何其他配置即可打开命名管道连接。 如果不能立即升级较旧的客户端软件,则可以使用新的named_pipe_full_access_group系统变量为Windows组授予打开命名管道连接的必要权限。 完全访问组的成员资格应受到限制且是临时的。
资源管理
MySQL现在支持创建和管理资源组,并允许将服务器中运行的线程分配给特定的组,以便线程根据该组可用的资源执行。 使用组属性可以控制其资源,以启用或限制组中线程的资源消耗。 DBA可以根据不同的工作负载修改这些属性。 当前,CPU时间是一种可管理的资源,以“虚拟CPU”的概念表示,该术语包括CPU内核,超线程,硬件线程等。 服务器在启动时确定有多少个虚拟CPU可用,具有适当特权的数据库管理员可以将这些CPU与资源组相关联,并将线程分配给组。
表加密管理
现在可以通过定义和强制执行加密默认值来全局管理表加密。 default_table_encryption变量为新创建的模式和常规表空间定义加密默认值。 创建模式时,也可以使用DEFAULT ENCRYPTION子句定义模式的加密默认值。 默认情况下,表继承对其创建的架构或常规表空间的加密。通过启用table_encryption_privilege_check变量来强制执行加密默认设置。 当使用不同于default_table_encryption设置的加密设置创建或更改模式或常规表空间时,或者使用不同于默认模式加密的加密设置创建或更改表时,将进行特权检查。 启用table_encryption_privilege_check时,TABLE_ENCRYPTION_ADMIN特权允许覆盖默认的加密设置。
InnoDB增强
- 当前的最大自动递增计数器值在每次值更改时被写入重做日志,并保存到每个检查点上的一个引擎私有系统表中。这些更改使得当前的最大自动递增计数器值在服务器重启时保持不变。
- 重新启动服务器不再取消AUTO_INCREMENT = N表选项的影响。 如果将自动递增计数器初始化为特定值,或者将自动递增计数器值更改为较大的值,则新值将在服务器重新启动后持久保存。
- 服务器在执行ROLLBACK操作后立即重新启动,不再导致重用分配给回滚事务的自动增量值。
- 如果将AUTO_INCREMENT列值修改为大于当前最大自动增量值的值(例如,在UPDATE操作中),则将保留新值,随后的INSERT操作将从新的较大的自动增量值开始分配自动增量值 值。
- 当遇到索引树损坏时,InnoDB将损坏标志写入重做日志,这使损坏标志崩溃是安全的。 InnoDB还将内存损坏标志数据写入每个检查点上的引擎专用系统表。 在恢复期间,InnoDB从两个位置读取损坏标志并合并结果,然后再将内存表和索引对象标记为损坏。
- InnoDB memcached插件支持多个get操作(在单个memcached查询中获取多个键值对)和范围查询。
- 新的动态变量innodb_deadlock_detect可用于禁用死锁检测。 在高并发系统上,当多个线程等待相同的锁时,死锁检测会导致速度变慢。 有时,当发生死锁时,禁用死锁检测并依靠innodb_lock_wait_timeout设置进行事务回滚可能会更有效。
- 新的INFORMATION_SCHEMA.INNODB_CACHED_INDEXES表报告每个索引在InnoDB缓冲池中缓存的索引页数。
- 现在在共享临时表空间ibtmp1中创建InnoDB临时表。
- InnoDB表空间加密功能支持对重做日志和撤消日志数据进行加密
- InnoDB支持SELECT … FOR SHARE和SELECT … FOR UPDATE锁定读取语句的NOWAIT和SKIP LOCKED选项。 如果请求的行被另一个事务锁定,则NOWAIT导致语句立即返回。 跳过锁定从结果集中删除锁定的行。
SELECT … FOR SHARE替换了SELECT … LOCK IN SHARE MODE,但是LOCK IN SHARE MODE对于向后兼容仍然可用。 这些语句是等效的。 但是,FOR UPDATE和FOR SHARE支持NOWAIT,SKIP LOCKED和OF tbl_name选项。OF tbl_name将锁定查询应用于命名表。 - 本机分区就地API支持添加分区,删除分区,粗疏分区,重组分区和重建分区ALTER TABLE选项,这些选项可以与ALGORITHM = {COPY | INPLACE}和LOCK子句一起使用。
使用ALGORITHM = INPLACE的DROP PARTITION删除存储在分区中的数据并删除该分区。 但是,使用ALGORITHM = COPY或old_alter_table = ON的DROP PARTITION会重建分区表,并尝试将数据从删除的分区移动到具有兼容PARTITION … VALUES定义的另一个分区。 无法删除的数据将被删除。 - InnoDB存储引擎现在使用MySQL数据字典,而不是其自己的特定于存储引擎的数据字典。
- 现在,在MySQL数据目录中名为mysql.ibd的单个InnoDB表空间文件中创建mysql系统表和数据字典表。 以前,这些表是在mysql数据库目录中的各个InnoDB表空间文件中创建的。
- MySQL 8.0中引入了以下undo表空间更改:
- 默认情况下,undo日志现在驻留在两个undo表空间中,这两个undo表空间是在初始化MySQL实例时创建的。在system表空间中不再创建Undo日志。
从MySQL 8.0.14开始,可以在运行时使用CREATE UNDO TABLESPACE语法在选定的位置创建其他Undo表空间。
使用CREATE UNDO TABLESPACE语法创建的Undo表空间可以在运行时使用DROP UNDO TABLESPACE语法删除。CREATE UNDO TABLESPACE tablespace_name ADD DATAFILE 'file_name.ibu';
ALTER UNDO TABLESPACE语法可用于将撤消表空间标记为活动或不活动。DROP UNDO TABLESPACE tablespace_name;
显示表空间状态的STATE列已添加到INFORMATION_SCHEMA.INNODB_TABLESPACES表中。 Undo表空间必须处于空状态才能删除。ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE};
- innodb_undo_log_truncate变量是默认启用的。
- innodb_rollback_segments变量定义每个撤消表空间的回滚段数。 以前,innodb_rollback_segments指定MySQL实例的回滚段总数。 此更改增加了可用于并发事务的回滚段的数量。 更多的回滚段会增加并发事务将单独的回滚段用于撤消日志的可能性,从而减少资源争用。
- 默认情况下,undo日志现在驻留在两个undo表空间中,这两个undo表空间是在初始化MySQL实例时创建的。在system表空间中不再创建Undo日志。
- 修改了影响缓冲池预刷新和刷新行为的变量的默认值
- 现在,innodb_max_dirty_pages_pct_lwm的默认值为10。以前的默认值0禁用缓冲池预刷新。 当缓冲池中的脏页百分比超过10%时,值为10启用预刷新。 启用预冲洗可提高性能一致性。
- innodb_max_dirty_pages_pct的默认值从75增加到90。InnoDB尝试从缓冲池刷新数据,以使脏页的百分比不超过此值。 增加的默认值允许缓冲池中脏页的百分比更高。
- 现在,默认的innodb_autoinc_lock_mode设置为2(交错)。 交错锁定模式允许并行执行多行插入,从而提高了并发性和可伸缩性。 新的innodb_autoinc_lock_mode默认设置反映了从基于语句的复制到基于行的复制的更改,这是MySQL 5.7中的默认复制类型。 基于语句的复制需要连续的自动增量锁定模式(以前的默认设置),以确保按照给定的SQL语句序列以可预测和可重复的顺序分配自动增量值,而基于行的复制对SQL语句不敏感。 SQL语句的执行顺序。
对于使用基于语句的复制的系统,新的innodb_autoinc_lock_mode默认设置可能会破坏依赖于顺序自动增量值的应用程序。 要恢复以前的默认设置,请将innodb_autoinc_lock_mode设置为1。
- ALTER TABLESPACE … RENAME TO语法支持重命名常规表空间
- 新的innodb_dedicated_server变量(默认情况下已禁用)可用于让InnoDB根据在服务器上检测到的内存量自动配置以下选项:
- 新的INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF视图提供了InnoDB表空间的空间,名称,路径,标志和空间类型数据.
- 与MySQL捆绑在一起的zlib库版本从1.2.3版本提高到1.2.11版本。 MySQL在zlib库的帮助下实现了压缩。
- 除全局临时表空间和撤消表空间文件外,所有InnoDB表空间文件中都存在序列化字典信息(SDI)。 SDI是表和表空间对象的序列化元数据。 SDI数据的存在提供了元数据冗余。 例如,如果数据字典变得不可用,则可以从表空间文件中提取字典对象元数据。 使用ibd2sdi工具执行SDI提取。 SDI数据以JSON格式存储。
在表空间文件中包含SDI数据会增加表空间文件的大小。 SDI记录需要一个索引页,默认情况下大小为16KB。 但是,存储SDI数据时会对其进行压缩,以减少存储空间。 - InnoDB存储引擎现在支持原子DDL,即使服务器在操作期间停止运行,它也可以确保DDL操作完全提交或回滚。
- 在服务器脱机时,可以使用innodb_directories选项将表空间文件移动或恢复到新位置。
- 实施了以下重做日志优化:
- 用户线程现在可以并发写入日志缓冲区,而无需同步写入。
- 用户线程现在可以按轻松的顺序将脏页添加到刷新列表中。
- 现在,专用的日志线程负责将日志缓冲区写入系统缓冲区,将系统缓冲区刷新到磁盘,通知用户线程有关已写入和已刷新的重做,维持宽松的刷新列表顺序所需的滞后时间以及写入检查点。
- 添加了系统变量,以配置用户线程等待刷新重做时对旋转延迟的使用。
- innodb_log_wait_for_flush_spin_hwm:定义最大平均日志刷新时间,超过该时间后,用户线程将在等待刷新重做时不再旋转。
- innodb_log_spin_cpu_abs_lwm:定义最小CPU使用量,在该最小CPU使用量以下,用户线程在等待刷新重做时不再旋转。
- innodb_log_spin_cpu_pct_hwm:定义最大CPU使用量,在该最大CPU使用量之上,用户线程在等待刷新重做时不再旋转。
- innodb_log_spin_cpu_pct_hwm:定义最大CPU使用量,在该最大CPU使用量之上,用户线程在等待刷新重做时不再旋转。
- 现在,innodb_log_buffer_size变量是动态的,它允许在服务器运行时调整日志缓冲区的大小.
- 从MySQL 8.0.12开始,对大对象(LOB)数据的小更新支持撤消日志记录,从而提高了大小为100字节或更小的LOB更新的性能。 以前,LOB更新的大小至少为一个LOB页,对于可能只修改几个字节的更新而言,这不是最佳的。 此增强功能基于MySQL 8.0.4中添加的对LOB数据的部分更新的支持。
- 从MySQL 8.0.12开始,以下ALTER TABLE操作支持ALGORITHM = INSTANT:
- 添加一列。 此功能也称为“即时添加列”。 有限制条件。
- 添加或删除虚拟列。
- 添加或删除列默认值。
- 修改ENUM或SET列的定义。
- 更改索引类型。
- 重命名表。
支持ALGORITHM = INSTANT的操作只能修改数据字典中的元数据。 在表上没有采取任何元数据锁,并且表数据不受影响,从而使操作立即进行。 如果未明确指定,则默认情况下,支持它的操作将使用ALGORITHM = INSTANT。 如果指定但不支持ALGORITHM = INSTANT,则该操作将立即失败并显示错误。
-
从MySQL 8.0.13开始,TempTable存储引擎支持二进制大对象(BLOB)类型列的存储。 此增强功能提高了使用包含BLOB数据的临时表的查询的性能。 以前,包含BLOB数据的临时表存储在internal_tmp_disk_storage_engine定义的磁盘存储引擎中。
-
从MySQL 8.0.13开始,InnoDB静态数据加密功能支持常规表空间。 以前,只能加密每表文件表空间。 为了支持通用表空间的加密,对CREATE TABLESPACE和ALTER TABLESPACE语法进行了扩展,以包括ENCRYPTION子句。
INFORMATION_SCHEMA.INNODB_TABLESPACES表现在包含一个ENCRYPTION列,该列指示表空间是否已加密。
添加了stage / innodb / alter表空间(加密)性能架构阶段工具,以允许监视常规表空间加密操作。 -
禁用innodb_buffer_pool_in_core_file变量可以通过排除InnoDB缓冲池页面来减少核心文件的大小。 要使用此变量,必须启用core_file变量,并且操作系统必须支持对madvise()的MADV_DONTDUMP非POSIX扩展,在Linux 3.4及更高版本中受支持。
-
从MySQL 8.0.13开始,由用户创建的临时表和由优化程序创建的内部临时表存储在会话临时表空间中,该会话临时表空间是从临时表空间池中分配给会话的。 当会话断开连接时,其临时表空间将被截断并释放回池中。 在以前的版本中,临时表是在全局临时表空间(ibtmp1)中创建的,在删除临时表后,该临时表空间不会将磁盘空间返回给操作系统。
innodb_temp_tablespaces_dir变量定义了创建会话临时表空间的位置。 默认位置是数据目录中的#innodb_temp目录。
INNODB_SESSION_TEMP_TABLESPACES表提供有关会话临时表空间的元数据。
全局临时表空间(ibtmp1)现在存储回滚段,用于对用户创建的临时表所做的更改。 -
从MySQL 8.0.14开始,InnoDB支持并行集群索引读取,这可以提高CHECK TABLE性能。 此功能不适用于二级索引扫描。 必须将innodb_parallel_read_threads会话变量设置为大于1的值,才能进行并行聚集索引的读取。 默认值为4。用于执行并行聚集索引读取的实际线程数由innodb_parallel_read_threads设置或要扫描的索引子树的数量确定,以较小者为准。
-
从8.0.14开始,启用innodb_dedicated_server变量时,将根据自动配置的缓冲池大小来配置日志文件的大小和数量。 以前,日志文件的大小是根据在服务器上检测到的内存量来配置的,并且日志文件的数量不是自动配置的。
-
从8.0.14开始,CREATE TABLESPACE语句的ADD DATAFILE子句是可选的,它允许没有FILE特权的用户创建表空间。 在不使用ADD DATAFILE子句的情况下执行的CREATE TABLESPACE语句隐式创建具有唯一文件名的表空间数据文件。
-
默认情况下,当TempTable存储引擎占用的内存量超过temptable_max_ram变量定义的内存限制时,TempTable存储引擎开始从磁盘分配内存映射的临时文件。 从MySQL 8.0.16开始,此行为由temptable_use_mmap变量控制。 禁用temptable_use_mmap会使TempTable存储引擎将InnoDB磁盘内部临时表而不是内存映射文件用作其溢出机制。
-
从MySQL 8.0.16开始,InnoDB静态数据加密功能支持mysql系统表空间的加密。 mysql系统表空间包含mysql系统数据库和MySQL数据字典表。
-
MySQL 8.0.16中引入的innodb_spin_wait_pause_multiplier变量可更好地控制自旋锁轮询延迟的持续时间,该延迟在线程等待获取互斥量或rw锁时发生。 可以对延迟进行更精细的调整,以解决不同处理器体系结构上PAUSE指令持续时间的差异。
-
通过更好地利用读取线程,减少并行扫描期间发生的预取活动的读取线程I / O,MySQL 8.0.17中提高了针对大型数据集的InnoDB并行读取线程性能。
并行读取线程功能由innodb_parallel_read_threads变量控制。 现在,最大设置为256,这是所有客户端连接的线程总数。 如果达到线程限制,连接将退回到使用单个线程。 -
MySQL 8.0.18中引入的innodb_idle_flush_pct变量允许限制空闲期间的页面刷新,这可以帮助延长固态存储设备的寿命。
-
从MySQL 8.0.19开始,为生成直方图统计信息而支持的InnoDB数据有效采样。
-
从MySQL 8.0.20开始,doublewrite缓冲区存储区位于doublewrite文件中。 在以前的版本中,存储区位于系统表空间中。 将存储区域移出系统表空间可减少写延迟,增加吞吐量并提供关于doublewrite缓冲区页放置的灵活性。 为高级doublewrite缓冲区配置引入了以下系统变量:
- innodb_doublewrite_dir:定义doublewrite缓冲区文件目录
- innodb_doublewrite_files:定义doublewrite文件的数量。
- innodb_doublewrite_pages:定义批量写入时每个线程的最大doublewrite页数
- innodb_doublewrite_batch_size:定义要批量写入的doublewrite页面数
-
MySQL 8.0.20中改进了竞争感知事务调度(CATS)算法,该算法优先考虑等待锁的事务。 现在,事务调度权重计算完全在单独的线程中执行,从而提高了计算性能和准确性。
删除了也用于事务调度的先进先出(FIFO)算法。 CATS算法的增强使FIFO算法变得多余。 以前由FIFO算法执行的事务调度现在由CATS算法执行。
将TRX_SCHEDULE_WEIGHT列添加到INFORMATION_SCHEMA.INNODB_TRX表,该表允许查询由CATS算法分配的事务调度权重。
添加了以下INNODB_METRICS计数器,用于监视代码级事务调度事件:- lock_rec_release_attempts:尝试释放记录锁定的次数。
- lock_rec_grant_attempts:授予记录锁定的尝试次数。
- lock_schedule_refreshes:分析等待图表以更新交易计划权重的次数。
-
从MySQL 8.0.21开始,为了提高需要访问表和行资源的锁队列的操作的并发性,锁系统互斥锁(lock_sys-> mutex)被分片闩锁代替,并且锁队列被分组为表和页 锁定队列分片,每个分片均由专用互斥锁保护。 以前,单锁系统互斥锁可保护所有锁队列,这是高并发系统上的争论点。 新的分片实现允许更精细地访问锁定队列。
锁系统互斥锁(lock_sys-> mutex)被以下分片闩锁取代:
全局闩锁(lock_sys-> latches.global_latch),由64个读写锁定对象(rw_lock_t)组成。 访问单个锁队列需要共享的全局锁存器和锁队列分片上的锁存器。 需要访问所有锁定队列的操作采用排他的全局闩锁,该闩锁会闩锁所有表和页面锁定队列分片。
表分片锁存器(lock_sys-> latches.table_shards.mutexes),实现为512个互斥锁的数组,每个互斥锁专用于512个表锁定队列分片之一。
页面分片锁存器(lock_sys-> latches.page_shards.mutexes),实现为512个互斥锁的数组,每个互斥锁专用于512个页面锁队列分片之一。
用于监视单锁系统互斥锁的Performance Schema wait /synch/mutex /innodb/lock_mutex工具已由用于监视新的全局,表分片和页面分片闩锁的工具取代:
wait/synch/sxlock/innodb/lock_sys_global_rw_lock
wait/synch/mutex/innodb/lock_sys_table_mutex
wait/synch/mutex/innodb/lock_sys_page_mutex
- 从MySQL 8.0.21开始,使用DATA DIRECTORY子句在数据目录外部创建的表和表分区数据文件仅限于InnoDB已知的目录。 此更改使数据库管理员可以控制在何处创建表空间数据文件,并确保可以在恢复期间找到这些数据文件。
常规和每表文件表空间数据文件(.ibd文件)不能再在undo表空间目录(innodb_undo_directory)中创建,除非InnoDB直接知道该目录。
已知目录是由datadir,innodb_data_home_dir和innodb_directories变量定义的目录。
截断每个表文件表空间中的InnoDB表将删除现有表空间并创建一个新表空间。 从MySQL 8.0.21开始,InnoDB在默认位置创建新表空间,并在当前表空间目录未知的情况下将警告写入错误日志。 要使TRUNCATE TABLE在其当前位置创建表空间,请在运行TRUNCATE TABLE之前将目录添加到innodb_directories设置。 - 从MySQL 8.0.21开始,可以使用ALTER INSTANCE {ENABLE | DISABLE} INNODB REDO_LOG语法启用和禁用重做日志记录。 此功能旨在将数据加载到新的MySQL实例中。 禁用重做日志记录可以避免重做日志写入,从而有助于加快数据加载速度。
新的INNODB_REDO_LOG_ENABLE权限允许启用和禁用重做日志记录。
新的Innodb_redo_log_enabled状态变量允许监视重做日志记录状态。 - 在启动时,如果表空间文件已移动到其他位置,InnoDB会根据数据字典中存储的表空间文件路径来验证已知表空间文件的路径。 MySQL 8.0.21中引入了新的innodb_validate_tablespace_paths变量,允许禁用表空间路径验证。 此功能适用于不移动表空间文件的环境。 禁用表空间路径验证可缩短具有大量表空间文件的系统上的启动时间。
- 从MySQL 8.0.21开始,在支持原子DDL的存储引擎上,当使用基于行的复制时,CREATE TABLE … SELECT语句作为一个事务记录在二进制日志中。 以前,它被记录为两个事务,一个用于创建表,另一个用于插入数据。 进行此更改后,CREATE TABLE … SELECT语句现在可以安全地用于基于行的复制,并且可以与基于GTID的复制一起使用。
- 由于相关的刷新操作会从缓冲池中删除旧的撤消表空间页并将新的undo表空间的初始页刷新到磁盘,因此在繁忙的系统上截断undo表空间可能会影响性能。 为了解决此问题,从MySQL 8.0.21开始删除了刷新操作。
旧的undo表空间页将在最近最少使用时被被动释放,或在下一个完整检查点删除。 现在,在截断操作期间重新记录了新undo表空间的初始页,而不是刷新到磁盘,这也提高了撤消表空间截断操作的持久性。
为了防止由于undo表空间的截断操作过多而导致的潜在问题,现在将检查点之间相同undo表空间的截断操作限制为64个。如果超出限制,则仍可以使undo表空间为非活动状态,但不会被截断 直到下一个检查点之后。
与已撤销的undo truncate刷新操作相关的INNODB_METRICS计数器已删除。 删除的计数器包括:undo_truncate_sweep_count,undo_truncate_sweep_usec,undo_truncate_flush_count和undo_truncate_flush_usec。
本文地址:https://blog.csdn.net/qian1314520hu/article/details/107400964
上一篇: php插入排序法实现数组排序实例
推荐阅读
-
HTML5的新特性(1)
-
苹果6s Plus怎么样 什么时间推出 新特性抢先了解
-
【视频】2015新MacBook隐藏的15个Force Click特性解析
-
Linux系统下 MySQL 安装 指南(5.7和8.0 版本)
-
揭秘SQL Server 2014有哪些新特性(3)-可更新列存储聚集索引
-
揭秘SQL Server 2014有哪些新特性(1)-内存数据库
-
揭秘SQL Server 2014有哪些新特性(4)-原生备份加密
-
揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buffer Pool(缓冲池) 扩展
-
ASP.NET2.0新特性概述
-
干货来袭! C# 7.0 新特性(VS2017可用)