可以做视频的网站,上海网站建设方案托管,百度广告电话号码,怎样申请微信公众号个人在 MySQL 8.0.12 中#xff0c;我们引入了一种新的 DDL 算法#xff0c;该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列#xff0c;这是来自腾讯游戏的贡献。
然后在 MySQL 8.0.29 中#xff0c;我们添加了在表中任意位置添加#xff08;或删除我们引入了一种新的 DDL 算法该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列这是来自腾讯游戏的贡献。
然后在 MySQL 8.0.29 中我们添加了在表中任意位置添加或删除列的可能性。
在这篇文章中我想重点讨论盲目使用此功能时可能发生的一些危险。
默认算法
从 MySQL 8.0.12 开始对于任何支持的 DDL默认算法是 INSTANT。这意味着 ALTER 语句只会修改数据字典中表的元数据。在操作的准备和执行阶段不会对表进行独占元数据锁表数据不受影响使得操作是即时的。
另外两种算法是 COPY 和 INPLACEOnline DDL 操作参见手册。
然而即使支持操作Online DDL 也存在限制一个表支持 64 次即时更改。到限制后需要“重建”该表。
如果在 ALTER 语句DDL 操作期间未指定算法则会默默地选择适当的算法。当然如果没有预料到这可能会导致生产中出现噩梦般的情况。
始终指定算法
因此第一个建议始终是指定算法即使它是执行 DDL 时的默认算法。当指定算法时如果 MySQL 无法使用它它将抛出错误而不是使用其他算法执行操作
SQL ALTER TABLE t1 DROP col1, ALGORITHMINSTANT;
ERROR: 4092 (HY000): Maximum row versions reached for table test/t1.
No more columns can be added or dropped instantly. Please use COPY/INPLACE.
监控即时变化
第二个建议也是监视对表执行的即时更改的数量。
MySQL 在 information_schema 表中保留行版本
SQL SELECT NAME, TOTAL_ROW_VERSIONSFROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME LIKE test/t1;
-----------------------------
| NAME | TOTAL_ROW_VERSIONS |
-----------------------------
| test/t1 | 63 |
-----------------------------
在上面的示例中DBA 将能够执行一项额外的 INSTANT DDL 操作但在此之后MySQL 将无法执行另一项操作。
作为 DBA监视所有表并决定何时需要重建表以重置该计数器是一个很好的做法。
这是添加到监控工具的建议查询的示例
SQL SELECT NAME, TOTAL_ROW_VERSIONS, 64-TOTAL_ROW_VERSIONS ASREMAINING_INSTANT_DDLs,ROUND(TOTAL_ROW_VERSIONS/64 * 100,2) AS DDLs %FROM INFORMATION_SCHEMA.INNODB_TABLESWHERE TOTAL_ROW_VERSIONS 0 ORDER BY 2 DESC;
------------------------------------------------------------------------------
| NAME | TOTAL_ROW_VERSIONS | REMAINING_INSTANT_DDLs | DDLs % |
------------------------------------------------------------------------------
| test/t1 | 63 | 1 | 98.44 |
| test/t | 4 | 60 | 6.25 |
| test2/t1 | 3 | 61 | 4.69 |
| sbtest/sbtest1 | 2 | 62 | 3.13 |
| test/deprecation_warning | 1 | 63 | 1.56 |
------------------------------------------------------------------------------
要重置计数器并重建表可以使用 OPTIMIZE TABLE table 或 ALTER TABLE table ENGINEInnoDB
结论
总之MySQL 8.0 引入的 DDL 操作 INSTANT 算法通过避免阻塞更改彻底改变了模式更改。然而由于 64 次即时更改的限制在需要重建表之前在 ALTER 语句期间显式指定算法以避免意外行为至关重要。还建议通过 information_schema 监视即时更改的数量以避免在不知不觉中达到即时更改限制而出现意外情况并仔细计划将表重建。
享受 MySQL
更多技术文章请访问https://opensource.actionsky.com/
关于 SQLE
SQLE 是一款全方位的 SQL 质量管理平台覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库为开发和运维提供流程自动化能力提升上线效率提高数据质量。
SQLE 获取
类型地址版本库https://github.com/actiontech/sqle文档https://actiontech.github.io/sqle-docs/发布信息https://github.com/actiontech/sqle/releases数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse