云服务器内容精选

  • 解决方案 随着业务数据的增加,原来申请的数据库磁盘容量可能会不够用,您需要为云数据库RDS实例进行扩容。 针对数据空间过大,可以删除无用的历史表数据进行释放空间(DROP或TRUNCATE操作,如果是执行DELETE操作,需要使用OPTIMIZE TABLE来释放空间);如果没有可删除的历史数据,需要进行磁盘扩容。 针对大量排序查询导致的临时文件过大,建议进行优化SQL查询。 应用中存在大量的排序查询,产生了大量的临时文件。 短期内大量增、删、改,产生大量binlog文件WAL日志占用空间。 由于大量的事务和写入操作产生了大量的binlog日志文件。 云监控服务 目前可以监控存储空间的大小、使用量、利用率等,并且设置告警策略。
  • 解决方案 随着业务数据的增加,原来申请的数据库磁盘容量可能会不足,建议用户扩容磁盘空间,确保磁盘空间足够。 如果原有规格的磁盘已是最大,请先升级规格。 云盘实例可以设置存储空间自动扩容,在实例存储空间达到阈值时,会触发自动扩容。 针对数据空间过大,可以删除无用的历史表数据。 如果实例变为只读状态,您需要先新建工单,联系客服解除只读状态;如果实例非只读状态,则可以直接执行删除操作。 查看物理文件大小Top50库表,识别可以删除的历史表数据,具体操作请参见容量预估。 可在业务低峰期对碎片率高的表执行optimize优化,以便释放空间: 清理整张表使用DROP或TRUNCATE操作;删除部分数据,使用DELETE操作,如果是执行DELETE操作,需要使用OPTIMIZE TABLE来释放空间。 如果是RDS for MySQL Binlog日志文件占用过多,可以清理本地Binlog日志,来释放磁盘空间。 针对大量排序查询导致的临时文件过大,建议优化SQL查询。 查询数据库慢SQL和Top SQL,分析数据量大,行数多,响应时间长的SQL语句,并进行优化。 您还可以订阅实例健康日报来获取SQL及性能分析结果,包括慢SQL分析、全量SQL分析、性能 & 磁盘分析、性能指标趋势图,当发生风险点时及时收到诊断报告。 具体操作请参见诊断日报。
  • 哪些内容会占用用户所购买的RDS实例空间 用户正常的数据(不包括备份数据),以及云数据库RDS实例正常运行所需的数据(比如系统数据库、数据库回滚日志、重做日志WAL日志、索引等)。磁盘空间会有必要的文件系统开销,这些开销主要包括inode、reserved block,以及数据库运行必需的空间。同时,包含如下云数据库RDS的必要日志文件: RDS for MySQL数据库产生的Binlog日志。 RDS for MariaDB数据库产生的Binlog日志。 RDS for PostgreSQL数据库服务器产生的日志文件。 RDS for SQL Server数据库产生的日志文件(RDS for SQL Server日志、默认的Trace文件和代理日志文件等)。 这些文件保证云数据库RDS实例正常稳定地运行。 父主题: 资源及磁盘管理
  • 约束限制 本章节仅使用从华为云RDS for MySQL 5.6、5.7、8.0版本实例下载的全量备份文件在本地恢复到对应版本自建数据库,不包括增量备份的恢复操作。 自建MySQL数据库内核小版本需与华为云RDS for MySQL版本号一致。 通过mysql -V或mysqld --version命令,可以查看MySQL内核版本。 仅支持恢复到本地为Linux操作系统的数据库。 由于开源备份工具目前仅支持x86包,不支持ARM,因此,不支持ARM的E CS 自建库使用本章操作进行备份文件恢复。您可以使用DRS迁移或数据导出导入的方式,具体请参见数据迁移。 全量备份文件恢复到自建数据库将使用以下三个软件: MySQL数据库 qpress工具 Percona XtraBackup工具 请使用对应版本工具,否则将无法恢复成功。 表1 版本对应关系 数据库 qpress Percona XtraBackup MySQL 8.0 qpress 7 XtraBackup 8.0.0及以上版本 MySQL 5.7、MySQL 5.6 qpress 7 XtraBackup 2.4.9及以上版本 在进行恢复阶段请勿在本地自建数据库运行其他业务。
  • 计费说明 表3 计费说明 计费模式 变更操作 对费用的影响 包年/包月 变更存储类型 变更后,新存储类型将在原来已有的时间周期内生效。 补交差价:新配置价格高于老配置价格,结合使用周期内的剩余时间,客户需要支付新老配置的差价。 退回差价:新配置价格低于老配置价格,结合使用周期内的剩余时间,华为云会将新老配置的差价退还给客户。 例如:(以下价格仅作示例,实际价格以控制台显示为准) 客户于2024/8/1在华北-北京四购买规格为通用型 2vCPUs 4GB的RDS for MySQL 8.0主备实例,SSD云盘存储,存储空间40GB,购买周期为一个月。此时实例价格为470元/月。 客户在2024/8/15将存储类型变更为极速型SSD,实例价格为534元/月。 配置费用 = 新配置价格 x 剩余周期 - 旧配置价格 x 剩余周期 公式中的剩余周期为每个自然月的剩余天数/对应自然月的最大天数。 本示例中,剩余周期=15(8月份剩余未使用天数)/ 30(8月份最大天数)= 0.5,代入公式可得配置费用 = 534 x 0.5 - 470 x 0.5 = 32元 按需计费 变更存储类型 变更后,新存储类型按小时计费。具体可在价格计算器中鼠标悬停在价格上,查看“存储空间”的价格。
  • 约束限制 表1 约束限制 阶段 限制说明 变更前 如需变更存储类型,请联系客服申请。 实例状态为“正常”时可以变更存储类型。 变更存储类型时,磁盘性能可能会发生变化,请在业务低峰期进行变更,避免对高峰期业务造成影响。 变更后若主实例和只读的存储类型不一致,可能会影响数据同步速度,建议先变更只读,并最终保持只读实例和主实例存储类型一致。 变更中 变更存储类型可能需要数分钟乃至数小时,在某些情况下可能会更长,具体时间视存储类型变配时的吞吐量、存储空间大小、原存储类型及变更后类型而定。 变更后 在极少数情况下,可能会由于后台资源问题导致变更失败,如此问题发生,请稍后重试。 变更存储类型仅支持升配操作,不支持反向降配,详情如表2所示。 表2 存储类型列表 实例类型 原存储类型 目标存储类型 主备 高可用只读 SSD云盘 可以变更为极速型SSD 主备 本地SSD盘 可以变更为SSD云盘、极速型SSD 高可用只读 本地SSD盘 不支持变更为SSD云盘、极速型SSD
  • 视图接口说明 表3 视图接口说明 序号 视图 列 说明 1 rds_pg_sql_ccl.get_all_enabled_rule dbid oid, queryid bigint, max_concurrency int, max_wait int 查看所有生效的限流规则。 2 rds_pg_sql_ccl.get_activity_query_status queryid bigint, wait_start_time timestamptz, pid int, dbid oid 查看当前实例每个SQL的运行状态(queryid,是否等待等)。 3 rds_pg_sql_ccl.get_current_db_ccl_rule rule_id bigint, query_id bigint , query_string, max_concurrency int, max_waiting int, search_path text, create_time timestamptz, enabled bool 查看当前数据库创建的限流规则(不一定生效)。
  • 绑定变量的SQL限流 JDBC等驱动支持prepare statement,对参数化SQL进行预编译,在输入参数后实际执行SQL。在pg_stat_statements视图中会以绑定变量的方式呈现。对于参数是绑定变量的SQL,内核计算的query id值与参数为实际值的SQL不一致,因此无法直接通过添加SQL语句方式进行限流。 对于这类SQL而言,只能通过实际执行后手动添加的方式进行限流。 首先实际执行一次带绑定变量的SQL,这样内核会计算其query id。基于JDBC的prepare statement程序示例如下: String sql = "select pg_sleep(?);"; PreparedStatement preparedStatement = conn.prepareStatement(sql); preparedStatement.setInt(1, 500); ResultSet resultSet = preparedStatement.executeQuery(); 而后在pg_stat_statements视图可以查询到该SQL的query id。 select queryid from pg_stat_statements where query like '%select pg_sleep%'; 通过查询到的query id添加限流规则。 select rds_pg_sql_ccl.add_ccl_rule_by_queryid($queryid); 通过上一条SQL的返回值(rule_id)使该规则生效。 select rds_pg_sql_ccl.enable_ccl_rule($rule_id); 从插件提供的get_all_enabled_rule视图可以获取到当前所有生效的限流规则。 select * from rds_pg_sql_ccl.get_all_enabled_rule;
  • 创建规则 同一个数据库中,不能创建重复(query id相同)的限流规则;不同的数据库中,可以创建重复的限流规则。 规则创建后不会立刻生效,需要调用enable_ccl_rule函数让规则生效。 get_query_id函数获取不到绑定变量的SQL的queryid,add_ccl_rule_by_query限制不了绑定变量SQL。 绑定变量SQL的queryid可以通过pg_stat_statements插件获取,之后可以通过add_ccl_rule_by_queryid创建规则,可参考后续绑定变量SQL限流。
  • 简介 高并发和消耗资源过多的SQL会导致实例不稳定,对此,RDS for PostgreSQL提供了限流能力,是由华为云自研插件rds_pg_sql_ccl实现,其中ccl是concurrent control的缩写,合理地使用SQL限流可以保障实例的稳定性,可以很好地做到性能优化和资源保护,应对的场景有: 业务量突增:通过限制某类SQL的执行保障实例的稳定性。 保障核心任务:通过限制其他SQL的执行从而降低资源的消耗保障核心任务的顺利完成。 该插件提供了两种限流方式: 方式1: 限制同一时刻同时执行SQL数量( 由rds_pg_sql_ccl.max_concurrent_sql参数控制,默认值为-1,即不限制)。 方式2: 限制某一类SQL(query id相同)同一时刻并发执行的数量,由限流规则控制,限流规则见下文。
  • 支持的版本 PostgreSQL16.2, 15.4, 14.8, 13.11, 12.15, 11.20及以上的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'rds_pg_sql_ccl'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQ L实例 支持的插件,具体可参见支持的插件列表。
  • 函数接口说明 表2 函数接口说明 序号 函数名 参数 返回值 功能 1 rds_pg_sql_ccl.get_query_id query_string text, search_path text default 'public' queryid 计算SQL的queryid。 2 rds_pg_sql_ccl.add_ccl_rule_by_query query_string text, max_concurrency int default 0, max_waiting int default 0, search_path text default 'public' ruleid 通过SQL语句添加限流规则。 3 rds_pg_sql_ccl.add_ccl_rule_by_queryid query_id bigint, max_concurrency int default 0, max_waiting int default 0, search_path text default 'public' ruleid 通过queryid添加限流规则。 5 rds_pg_sql_ccl.enable_ccl_rule rule_id bigint bool 通过ruleid让限流规则生效。 6 rds_pg_sql_ccl.disable_ccl_rule rule_id bigint bool 通过ruleid让限流规则失效。 7 rds_pg_sql_ccl.disable_all_ccl_rule - void 让所有限流规则失效。 8 rds_pg_sql_ccl.delete_ccl_rule rule_id bigint void 通过ruleid删除限流规则。 9 rds_pg_sql_ccl.update_ccl_rule new_rule_id bigint, new_max_concurrency int, new_max_waiting int void 通过ruleid更新限流规则。 部分参数说明: max_concurrency:最大并发数,并发执行该类型SQL的最大数量。 max_wait:最大等待时间,达到最大并发数之后,该类型的新SQL的最大等待时间,超过这个时间,则执行失败。 new_max_concurrency:新的最大并发数。 new_max_wait:新的最大等待时间。
  • 修订记录 发布日期 修改说明 2024-09-19 第二十次正式发布,包含以下内容: 新增RDS for PostgreSQL实例inodes过多导致数据库重启缓慢。 2024-08-13 第十九次正式发布,包含以下内容: 新增RDS for SQL Server新建登录账号登录实例报错。 2024-06-19 第十八次正式发布,包含以下内容: 新增RDS for PostgreSQL数据库已有连接执行业务时报错。 2024-05-10 第十七次正式发布,包含以下内容: 新增MySQL表级时间点恢复时提示密钥失效或已删除。 2024-02-19 第十六次正式发布,包含以下内容: 新增通过DAS授权或取消授权时报错Your password does not satisfy the current policy requirements。 2023-12-27 第十五次正式发布,包含以下内容: 新增ibdata1为什么会变大。 2023-12-13 第十四次正式发布,包含以下内容: 新增RDS for MySQL插入数据提示Data too long for column。 新增RDS for MySQL慢日志里面有毫秒级别的SQL。 新增RDS for PostgreSQL通过应用程序访问数据库时提示不支持身份验证。 2023-10-27 第十三次正式发布,包含以下内容: 新增本地SSD盘规格降配选不到资源。 新增无主键表添加自增主键后导致主备节点查询数据不一致。 新增通过DAS登录实例报错Client does not support authentication protocol requested by server。 新增SQL诊断结果中记录的行数远小于慢日志中的扫描行数。 2023-09-13 第十二次正式发布,包含以下内容: 新增MySQL主备复制延迟场景及解决方案。 新增购买RDS实例报错:无 IAM 的agency相关权限。 2023-08-02 第十一次正式发布,包含以下内容: 新增RDS for MySQL Binlog生成的机制。 新增RDS for MySQL 5.6版本实例创建表报错。 2023-06-30 第十次正式发布,包含以下内容: 新增RDS for MySQL Binlog生成的机制。 新增RDS for MySQL如何定位一直存在的长事务告警。 新增RDS for MySQL部分SQL的commit时间偶现从几毫秒陡增到几百毫秒。 新增RDS for MySQL在分页查询时报错:Out of sort memory, consider increasing server sort buffer size。 新增RDS for MySQL创建用户报错:Operation CREATE USER failed。 新增RDS for MySQL使用grant授权all privileges报语法错误。 新增购买RDS实例支付报错:Policy doesn't allow bss:order:update to be performed。 新增RDS for MySQL是否可以修改数据库名称。 新增RDS for PostgreSQL有大量owner是rdsadmin的schema怎么删除。 新增RDS for PostgreSQL数据库创建索引时索引名可以包含schema名。 2022-09-09 第九次正式发布,包含以下内容: 新增RDS for MySQL全备恢复到本地提示无super权限。 新增备份期间DDL操作导致备份失败。 新增手动下发全量备份比自动下发全量备份时间长。 新增mysqldump导出数据报错权限不足。 新增MySQL主备复制原理简介。 新增主备复制延迟持续增长后自动恢复。 新增MySQL主备复制延迟场景及解决方案。 新增主备复制时延瞬间飚高回落。 新增canal工具报错权限不足。 新增canal解析Binlog报错。 新增控制台上修改long_query_time参数后未生效。 新增GROUP_CONCAT结果不符合预期。 新增RDS MySQL timeout相关参数简介。 新增命令行修改MySQL global参数失败。 新增CPU使用率高问题排查与优化。 新增内存使用超限风险与优化。 新增磁盘性能带宽超上限。 新增联合索引设置不当导致慢SQL。 新增数据库磁盘满导致被设置read_only。 新增Binlog未清理导致磁盘占用高。 新增业务死锁导致响应变慢。 新增MySQL只读实例磁盘占用远超主实例。 新增RDS for MySQL CPU升高定位思路。 新增冷热数据问题导致sql执行速度慢。 新增CPU/内存配置与TPS和QPS性能相关的问题。 新增表碎片率过高可能导致的问题。 新增复杂查询造成磁盘满。 新增长事务导致规格变更或小版本升级失败。 新增长事务导致UNDO增多引起磁盘空间满。 新增更新emoji表情数据报错Error 1366。 新增索引长度限制导致修改varchar长度失败。 新增建表时timestamp字段默认值无效。 新增自增属性AUTO_INCREMENT为什么未在表结构中显示。 新增存储过程和相关表字符集不一致导致执行缓慢。 新增RDS MySQL报错ERROR [1412]的解决方法。 新增创建二级索引报错Too many keys specified。 新增存在外键的表删除问题。 新增distinct与group by优化。 新增字符集和字符序的默认选择方式。 新增MySQL创建用户提示服务器错误。 新增delete大表数据后,再次查询同一张表时出现慢SQL。 新增设置事件定时器后未生效。 新增为什么有时候用浮点数做等值比较查不到数据。 新增开通数据库代理后有大量select请求分发到主节点。 新增连接数据库报错Access denied。 新增mariadb-connector SSL方式连接数据库失败。 新增RDS for MySQL建立连接慢导致客户端超时报connection established slowly。 新增root账号的ssl_type修改为ANY后无法登录。 新增客户端TLS版本与RDS for MySQL不一致导致SSL连接失败。 新增使用root账号连接数据库失败。 新增客户端超时参数设置不当导致连接超时退出。 新增istio-citadel证书机制导致每隔45天出现断连。 新增慢日志显示SQL语句扫描行数为0。 新增审计日志上传策略说明。 新增自增字段取值。 新增表的自增AUTO_INCREMENT初值与步长。 新增表的自增AUTO_INCREMENT超过数据中该字段的最大值加1。 新增自增字段值跳变的原因。 新增修改表的自增AUTO_INCREMENT值。 新增自增主键达到上限,无法插入数据。 新增空用户的危害。 新增pt-osc工具连接RDS for MySQL主备实例卡住。 2022-01-17 第八次正式发布,包含以下内容: 新增RDS for SQL Server规格变更或主备切换失败。 新增RDS for SQL Server如何解除和重建复制关系。 2021-05-21 第七次正式发布,包含以下内容: 新增RDS for SQL Server数据库恢复到新实例后新建用户,提示用户已存在的解决方法。 新增怎么解决执行mysqldump出现SET @@SESSION.SQL_ LOG _BIN等SQL的问题。 新增执行RENAME USER失败的解决方法。 新增表字段类型转换失败的解决方法。 新增RDS for MySQL数据库报错ERROR [1412]的解決方案。 新增RDS for MySQL创建索引失败报错[ERROR] 1071的解決方案。 新增有外键的表无法删除报错ERROR[1451]的解决方案。 新增RDS for MySQL数据库修改authentication_string字段为显示密码后无法登录。 2020-09-15 第六次正式发布,包含以下内容: 新增RDS for MySQL备份 任务失败分析思路。 新增如何将华为云上或本地的数据库备份文件恢复到RDS实例。 2020-05-30 第五次正式发布,包含以下内容: 优化RDS for MySQL大小写参数敏感类问题。 2020-04-10 第四次正式发布,包含以下内容: 新增RDS for MySQL创建表失败报错Row size too large的解决方案。 2019-11-30 第三次正式发布,包含以下内容: 新增磁盘空间满导致自动增量备份失败。 新增下载备份文件在本地恢复,登录密码错误。 2019-09-30 第二次正式发布,包含以下内容: 新增RDS for MySQL数据库报错Native error 1461的解决方案。 新增RDS for MySQL升级版本后,导致现有配置无法正常连接到MySQL-server。 新增RDS for MySQL在启用了SSL验证连接功能后,导致代码(php/java/python)等连接数据库失败。 2019-08-15 第一次正式发布。
  • 场景一 场景描述 使用RDS for PostgreSQL数据库时,业务执行大量复杂SQL,造成临时文件堆积,内存耗尽发生OOM,数据库重启过程非常缓慢,导致业务较长时间不可用。 原因分析 由于业务执行复杂SQL,如果SQL中涉及排序、Hash join、聚合等操作,超过配置work_mem参数大小时,会生成临时文件。大量执行这样的SQL,在发生OOM时,数据库进程被OS杀掉,此时内核不会对临时文件进行清理,从而导致临时文件的堆积。过多的临时文件会拖慢数据库启动,这是因为在PostgreSQL数据库进程启动时,需要删除所有之前产生的所有临时文件,如果存在大量临时文件堆积,将导致数据库启动缓慢。 解决方案 建议业务侧优化SQL,或适当调大work_mem参数值(会增加内存占用),减少临时文件生成。
  • 场景二 场景描述 使用RDS for PostgreSQL数据库时,业务创建了大量的表。某一时间连接数与业务量激增,数据库进程内存耗尽发生OOM,从而导致数据库重启,但重启过程非常缓慢,导致业务较长时间不可用。 原因分析 由于数据库发生了OOM进而导致进程重启,在启动时会进入故障恢复模式,这时内核进程会遍历所有表并做fsync(将os缓存内容刷新至磁盘),如果业务创建的表对象过多,在启动时便会消耗大量时间进行遍历,从而导致数据库启动缓慢,影响业务可用性。 解决方案 建议业务侧限制创建表的数量,单实例表数量最好不超过2万,单库表数量最好不超过4千,详见实例使用规范。 建议业务侧配置内存监控,必要时扩充内存规格,尽量避免OOM发生。同时关注inode数监控指标,控制创建的对象数量。