相关文章推荐
怕老婆的鸡蛋  ·  react 使用 useEffect ...·  1 年前    · 
礼貌的皮带  ·  设备唯一标识 - 知乎·  1 年前    · 
温暖的书包  ·  encryption - Python ...·  1 年前    · 
  • 迁移 RDS for SQL Server 数据到本地 SQL Server
  • 全量备份数据上云SQL Server 2008 R2版
  • 全量备份数据上云SQL Server 2012/2016/2017版本
  • 增量备份数据上云SQL Server 2012/2016/2017版本
  • SQL Server实例级别数据库上云
  • 按量付费转包年包月
  • 开通或修改自动续费
  • 待处理事件
  • 迁移可用区
  • SQL Server 2008 R2升级版本
  • 切换主备实例
  • 创建SQL Server只读实例
  • SQL Server DBCC功能
  • SQL Server结束连接
  • 设置实例参数
  • 使用控制台设置参数
  • 使用SQL命令设置参数
  • 实例回收站
  • SQL Server读写分离
  • 读写分离简介
  • 开通读写分离
  • 修改读权重分配
  • 关闭读写分离
  • 系统权重分配规则
  • 修改账号权限
  • 授权服务账号
  • SQL Server管理LOGIN用户
  • SQL Server管理USER用户
  • 数据库管理
  • 创建数据库
  • 删除数据库
  • 修改字符集排序规则与时区
  • SQL命令管理数据库
  • SQL Server复制数据库
  • 实例间的数据库复制
  • 复制数据库SQL Server 2008 R2版
  • 复制数据库SQL Server 2012及以上版本
  • ModifyDBInstanceProxyConfiguration
  • DescribeDBInstanceProxyConfiguration
  • AllocateReadWriteSplittingConnection
  • CalculateDBInstanceWeight
  • ModifyReadWriteSplittingConnection
  • ReleaseReadWriteSplittingConnection
  • CreateAccount
  • DeleteAccount
  • DescribeAccounts
  • GrantAccountPrivilege
  • RevokeAccountPrivilege
  • ModifyAccountDescription
  • ResetAccountPassword
  • ResetAccount
  • DescribeDBInstanceIPArrayList
  • ModifySecurityIps
  • DescribeDBInstanceSSL
  • ModifyDBInstanceSSL
  • DescribeDBInstanceTDE
  • ModifyDBInstanceTDE
  • MigrateSecurityIPMode
  • AllocateInstancePublicConnection
  • DescribeDBInstanceNetInfo
  • ModifyDBInstanceNetworkExpireTime
  • ModifyDBInstanceConnectionString
  • ModifyDBInstanceNetworkType
  • ReleaseInstancePublicConnection
  • SwitchDBInstanceNetType
  • DescribeSlowLogs
  • DescribeSlowLogRecords
  • DescribeErrorLogs
  • DescribeBinlogFiles
  • DescribeSQLCollectorPolicy
  • ModifySQLCollectorPolicy
  • DescribeSQLLogRecords
  • DescribeSQLLogFiles
  • CreateBackup
  • CloneDBInstance
  • DescribeBackups
  • CreateTempDBInstance
  • DescribeBackupPolicy
  • ModifyBackupPolicy
  • RestoreDBInstance
  • DeleteBackup
  • RecoveryDBInstance
  • DescribeBackupTasks
  • DescribeLogBackupFiles
  • DescribeBackupDatabase
  • SQL Server备份文件上云
  • CreateMigrateTask
  • DescribeMigrateTasks
  • DescribeOssDownloads
  • CreateOnlineDatabaseTask
  • DescribeResourceUsage
  • DescribeDBInstancePerformance
  • DescribeDBInstanceMonitor
  • ModifyDBInstanceMonitor
  • DescribeParameterTemplates
  • DescribeParameters
  • ModifyParameter
  • CreateUploadPathForSQLServer
  • DescribeFilesForSQLServer
  • DescribeImportsForSQLServer
  • ImportDatabaseBetweenInstances
  • CancelImport
  • AddTagsToResource
  • RemoveTagsFromResource
  • DescribeTags
  • RAM资源授权
  • 客户端错误代码表
  • 服务器端错误代码表
  • 实例状态表
  • 性能参数表
  • 禁用关键字表
  • RDS for MySQL/MariaDB CPU使用率高的原因和解决方法
  • MySQL IOPS 使用率高的原因和解决方法
  • RDS for MySQL表上Metadata lock的处理
  • RDS for MySQL行锁等待和行锁等待超时的处理
  • RDS for MySQL表级锁等待
  • RDS for MySQL管理长时间执行的查询
  • RDS for MySQL查询缓存(Query Cache)的设置和使用
  • RDS for MySQL如何保证数据库字符编码正确
  • RDS for MySQL收集表的统计信息
  • RDS for MySQL字符集相关说明
  • RDS for MySQL如何修改为utf8mb4字符集
  • RDS for MySQL查看和设置时区
  • RDS for MySQL无法查询performance_schema的原因
  • RDS for MySQL Online DDL 使用
  • RDS for MySQL默认关闭MyISAM引擎
  • RDS for MySQL各timeout参数的设置
  • RDS for SQL Server查看当前连接以及其执行的SQL
  • RDS for SQL Server查看锁情况
  • RDS for SQL Server死锁处理方法
  • RDS for SQL Server CPU使用率高问题排查
  • RDS for SQL Server查看常用参数值
  • RDS for SQL Server常用视图
  • RDS for SQL Server字符集修改
  • PostgreSQL/PPAS CPU使用率高的原因及解决办法
  • RDS for PostgreSQL查看数据库内核小版本
  • RDS访问实例诊断报告
  • 监控项列表
  • 为什么SQL语句在ECS上查询比RDS上快
  • 迁入RDS后数据库变慢的分析
  • 如何提升RDS响应速度
  • 升级实例底层网络架构的意义及对业务的影响是什么?
  • RDS MySQL 全文检索相关问题的处理
  • 数据备份/恢复
  • RDS for MySQL 物理备份文件恢复到自建数据库
  • RDS for MySQL 逻辑备份文件恢复到自建数据库
  • RDS for MySQL SQL审计查询记录返回0的原因
  • RDS for MySQL查看增量数据的方法
  • RDS for MySQL mysqldump选项设置
  • RDS for MySQL使用load data local infile导入数据
  • 使用mysqldump迁移数据
  • Binlog常见问题
  • RDS for MySQL通过mysqlbinlog查看binlog日志
  • MySQL Binlog日志的生成和清理规则
  • RDS for MySQL远程获取Binlog
  • 如何进行RDS(mysql类型)针对数据库级别的备份及回滚
  • RDS for MySQL备份文件下载工具
  • RDS for SQL Server/MySQL实例备份单个数据库
  • 如何恢复误删除的数据
  • RDS for MySQL 5.6如何恢复单个数据库
  • RDS for SQL Server收缩事务日志
  • RDS for SQL Server单库恢复
  • Linux平台使用wget工具下载备份文件
  • Windows下解压MySQL备份文件
  • 将自建数据库迁移至RDS
  • 网络/IP
  • 解决无法连接实例问题
  • RDS实例如何变更虚拟交换机VSwitch
  • RDS实例如何变更VPC
  • RDS 实例如何在经典网络和 VPC 网络之间互相切换
  • RDS for MySQL 连接数满情况的处理
  • RDS for MySQL如何终止会话
  • JAVA连接RDS for MySQL的测试程序
  • JAVA连接RDS for SQL Server
  • RDS for PostgreSQL/PPAS 如何定位本地 IP
  • SQL Server如何定位IP地址
  • RDS for MySQL或MariaDB TX如何定位本地公网IP地址
  • RDS for PostgreSQL 连接数满情况的处理
  • 应用程序是否需要支持自动重连数据库
  • 阿里云在RDS遭受攻击时提供什么安全服务
  • 外部服务器能否访问阿里云的RDS?
  • RDS数据库实例授权其他客户登录方法
  • 为什么无法连接到RDS实例?
  • ECS和RDS的网络类型不同,如何通过内网互通?
  • ECS和RDS位于不同VPC,如何内网互通?
  • ECS和RDS位于不同地域,如何通过内网互通?
  • ECS如何访问另一个账号下的RDS?
  • 数据库/账号/表
  • 如何连接RDS数据库
  • RDS for MySQL使用utf8mb4字符集存储emoji表情
  • RDS for MySQL表分区的限制
  • RDS for MySQL 5.6 版本GTID特性对临时表限制的处理
  • RDS for MySQL的单表尺寸限制
  • RDS for MySQL引擎表索引方式更改为Hash无效原因
  • RDS for MySQL auto_increment自增字段相关参数
  • RDS for MySQL数据库自增列不连续的问题
  • RDS for MySQL函数group_concat相关问题
  • RDS for MySQL查看表的主键字段的方法
  • RDS for MySQL排序分页查询数据顺序错乱的处理
  • RDS for SQL Server如何修改schema为dbo
  • RDS for SQL Server添加作业计划
  • RDS for SQL Server手动执行作业及查看执行记录
  • RDS for SQL Server批量导入数据
  • RDS for PostgreSQL 9.4中如何支持jsonb_set等新的 jsonb函数
  • RDS for PostgreSQL用户权限设置
  • RDS for PostgreSQL使用中文分词
  • RDS for PostgreSQL跨库查询
  • RDS for PPAS如何管理插件
  • 如何快速对比测试环境和开发环境的表结构?
  • RDS for SQL Server创建聚簇索引注意事项
  • 功能/付费方式
  • RDS是否可以支持缓存插件,比如memcache
  • 为什么 RDS for MySQL 不支持 MyISAM 引擎?
  • 按时付费转为包年包月对数据库业务是否有影响?
  • RDS for MySQL有哪些限制
  • CloudDBA简介
  • RDS 临时实例如何手动删除
  • 实例规格/版本
  • 云数据库MySQL具体的版本号是多少?
  • 如何更改实例或数据库版本?
  • RDS实例存储空间的上限是多少?
  • 如何设置在业务低谷期执行变配RDS实例或迁移可用区的操作?
  • 空间/内存
  • 新购MySQL实例的存储空间占用说明
  • 释放MySQL表空间
  • MySQL 实际内存分配情况介绍
  • 云盘如何变更为本地盘
  • 解决MySQL实例空间满自动锁问题
  • MySQL数据文件导致实例空间满的解决办法
  • MySQL Binlog文件导致实例空间满的解决办法
  • MySQL临时文件导致实例空间满的解决办法
  • MySQL系统文件导致实例空间满的解决办法
  • RDS MySQL 空间问题的原因和解决
  • RDS for MySQL备份、SQL审计相关问题
  • 解决SQL Server实例空间满自动锁的问题
  • RDS for SQL Server如何查看实例、数据库及表占用的空间大小
  • SQL Server数据库空间查看工具
  • RDS for SQL Server查看内存占用情况
  • RDS for SQL Server 回收表空间
  • PostgreSQL/PPAS磁盘空间占用剧增后下降情况解析
  • 使用OSS扩展PostgreSQL/PPAS的表空间
  • RDS for PPAS是否支持表空间维护
  • 读写分离/只读实例
  • RDS是否支持只读实例、读写分离
  • RDS for MySQL是否支持分表
  • RDS for MySQL实现读写分离
  • RDS for MySQL只读实例同步延迟原因与处理
  • RDS for MySQL实例show slave hosts结果说明
  • RDS for MySQL读写分离如何确保数据读取的时效性
  • RDS for MySQL权限问题(错误代码:1227,1725)
  • mysqld:Sort aborted:Server shutdown in progress错误处理
  • 安装ThinkSNS网站调用RDS数据库提示OPERATION need to be executed set by ADMIN
  • The maximum column size is 767 bytes错误处理
  • Cannot add foreign key constraint错误处理
  • r'错误处理...
  • the table '/home/mysql/xxxx/xxxx/#tab_name' is full错误处理
  • Out of resources when opening file './xxx.MYD' (Errcode: 24)错误处理
  • The Changes you have made require the following table错误处理
  • There are 2 other sessions using the database错误处理
  • relation "xxx" already exists错误处理
  • Caused By: ERROR: syntax error at end of input错误处理
  • Unknown MySQL server host错误处理
  • 临时实例报错The operation is not permitted due to no backup处理
  • 0038或10060或110)...
  • 000): #RDS00ip not in whitelist...
  • ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’
  • 证实例名称是否正确并且 SQL Server 已配置为允许远程连接。错误: 10060或258...
  • DTS相关问题
  • DTS同步常见问题
  • DTS订阅使用限制
  • 通过DTS实现同实例下的数据库复制和改名
  • DTS订阅报错:Connection timed out
  • DTS订阅报错:java.io.IOException: Parse message attribute failed
  • DTS迁移显示已完成的值超过总数的原因
  • DTS预检查时出现schema存在性检查错误处理
  • DTS订阅日志提示client partition is empty原因
  • DTS订阅无法选择RDS只读实例
  • DMS相关问题
  • DMS中表维护的操作说明
  • DMS中创建存储过程报错的处理
  • 访问控制授权子账户使用DMS登录RDS实例
  • 登录DMS报错的原因及解决方法
  • MySQL在DMS新增视图时算法的含义
  • DMS导出数据到CSV文件
  • RDS for MySQL存储过程的创建和查看
  • 说明 从低版本(例如 RDS MySQL 5.5)升级到 RDS MySQL 5.6,第一次执行 DDL 时有可能会因为表数据的文件格式仍旧是 5.5 版本而不支持 Online DDL 特性。这种情况可以通过执行以下命令来转换:
    alter table <表名> engine=innodb;

    更多版本特性请参见 AliSQL 小版本Release Notes

    Online DDL的限制

    在添加auto_increment自增列时,是不允许并发 DML 操作的。

    尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。

    尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。 修改各列顺序 尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。 修改Row_Format属性 尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。 修改Key_Block_Size属性 尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。 设置列为空值Null 尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。 设置列不为空值NOT Null

    该操作需要将SQL_MODE 参数设置为STRICT_ALL_TABLES或STRICT_TRANS_TABLES才能成功。如果列值中包含空值(NULL),则该DDL 操作会失败。

    尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。

    修改列的数据类型

    尽管支持Algorithm=INPLACE ,但因为数据实质上需要重新组织,因此操作的开销高昂。

    如果涉及的列需要转换为NOT NULL,则不支持Algorithm=INPLACE。

    删除主键并添加新主键

    仅当在同一个Alter Table语句中(删除主键的DDL语句)添加新主键才支持Algorithm=INPLACE。

    因为数据实质上需要重新组织,因此操作的开销高昂。

    Convert character set 如果新的字符集编码不同,需要重建表。 Specify character set 如果新的字符集编码不同,需要重建表。 带force选项重建表 如果表上有全文索引,则不支持Algorithm=Inplace选项。

    重建表

    alter table ... engine=innodb

    如果表上有全文索引,则不支持Algorithm=Inplace选项。

    设置表的 persistent statistics

    仅修改表的元数据metadata。
  • 是否支持Inplace方式:对应DDL语句的Algorithm选项,通过Inplace方式执行DDL。相比Copy Table的方式,可以减少空间和I/O消耗。
  • 是否需要Copy Table:对应DDL语句的Algorithm选项,通过Copy Table的方式执行DDL。DDL执行期间会占用更大的磁盘空间和消耗更多的I/O。
  • 是否允许并发DML:对应DDL语句的Lock选项,DDL执行期间是否支持并发DML操作。
  • 是否允许并发查询:DDL语句执行期间是否支持并发查询操作(通常都是支持的)。
  • MySQL官方文档请参见 Online DDL 概览
  • DDL操作执行时需要修改表的元数据(metadata),有可能会遇到等待表元数据锁的情况(waiting for table metadata lock),该情况的处理方式请参见 解决MDL锁导致无法操作数据库的问题
  • Inplace和Copy Table是相反的2种处理方式;但即使DDL支持Inplace选项,某些操作在整个执行过程中也会部分涉及到Copy Table,例如上表中的添加列操作。
  • Online DDL选项建议

  • Algorithm=Inplace :为了避免Copy Table导致的实例性能问题(空间、I/O问题),建议在DDL中包含该选项。如果DDL操作不支持Algorithm=Inplace方式,DDL操作会立刻返回错误。
    alter table area_bak algorithm=inplace, modify father text;
    ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
  • Lock=None :为了在DDL操作过程中不影响业务DML 操作,建议在DDL中包含该选项。如果DDL操作不支持Lock=None (允许并行DML操作)选项,DDL操作会立刻返回错误。
    alter table area ALGORITHM=copy, lock=none,CONVERT TO CHARACTER SET utf8mb4;
    ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: COPY algorithm requires a lock. Try LOCK=SHARED.
  • 默认情况下RDS MySQL会尽量使用algorithm=inplace以及lock=none来进行DDL操作,因此默认可以不指定这两个选项。但如果担心DDL操作对系统负载有影响或阻塞对目标表的DML操作,建议使用algorithm=inplace或lock=none选项来操作,这样如果系统对某一个选项不支持,会立刻返回错误,避免影响业务。

    alter table area algorithm=inplace, lock=none, add index idx_fa (father);

    对不支持Online DDL的操作(例如RDS MySQL 5.5),可以考虑通过Percona的Schema Online Change工具来操作。

    Alter Table语法请参见 ALTER TABLE Syntax

    在对某些大表的Online DDL过程中,有时会碰到下面的错误:

    alter table rd_order_rec add index idx_cr_time_detail (cr_time,detail);
    ERROR 1799(HY000): Creating index 'idx_cr_time_detail' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

    在进行Online DDL(不阻塞并发DML) 的过程中,每个被修改的表或者创建的索引都会使用一个临时日志来保存 DDL过程中并发DML操作的记录。该临时日志文件的大小可以根据需要从参数innodb_sort_buffer_size指定的大小扩展到参数nnodb_online_alter_log_max_size指定的大小。

    如果有临时日志文件大小超过上限,则该DDL语句返回失败并且所有没有提交的并发DML操作会被回滚。因此增加 innodb_online_alter_log_max_size参数的大小可以允许DDL过程中更多的并发DML操作,但是较大的值也会使在DDL操作末尾阶段的锁定表应用日志中的数据的过程持续更长的时间。

    针对MySQL 5.6/5.7,可以在控制台修改innodb_online_alter_log_max_size参数值,详细步骤请参见 设置实例参数