polardb mysql 针对大表做ddl 有没有什么 best practice?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在PolarDB MySQL版中,针对大表执行DDL操作时,有一些最佳实践(Best Practice)可以帮助您优化性能并减少对业务的影响。以下是详细的建议和操作方法:
PolarDB MySQL版支持并行DDL功能,可以显著提升大表上创建索引或重建表的效率。
适用场景:
前提条件:
配置参数:
innodb_polar_parallel_ddl_threads
:设置并行线程数。innodb_parallel_build_primary_index
:用于并行构建主键索引。PolarDB MySQL版支持多种DDL执行算法,您可以根据需求选择最优方案。
INSTANT算法:
INPLACE算法:
RENAME TABLE
、ADD COMMENT
等操作。COPY算法:
自动选择:PolarDB会按照INSTANT > INPLACE > COPY
的优先级自动选择最佳算法。如果需要手动指定,可以通过ALTER TABLE
语句的ALGORITHM
子句进行控制。
通过调整锁策略,可以减少DDL操作对业务的影响。
LOCK子句:
DEFAULT
:允许最大程度的并发读取和写入。NONE
:允许并发读写,如果不支持则返回错误。SHARED
:允许并发读取但阻止写入。EXCLUSIVE
:禁止一切并发读写操作。建议:
LOCK=NONE
或LOCK=SHARED
以减少对业务的影响。LOCK=EXCLUSIVE
以加速DDL操作。如果表中包含列存索引,DDL操作可能需要额外的处理。
异步DDL:
INSTANT DDL与列存索引:
imci_enable_add_column_instant_ddl
设置为OFF
。查看索引状态:
INFORMATION_SCHEMA.IMCI_INDEXES
查询列存索引的创建状态。业务低峰期执行DDL:
监控资源使用:
避免频繁DDL:
通过以上最佳实践,您可以显著提升PolarDB MySQL版在大表上的DDL操作性能,同时减少对业务的影响。
阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。