开发者社区 问答 正文

系统权重分配规则



权重值列表


系统自动设置实例的读权重时,权重值是固定的,如下表所示:

规格代码规格类型内存CPU权重
rds.mys2.small通用240MB3100
rds.mys2.mid通用600MB5100
rds.mys2.standard通用1200MB6400
rds.mys2.large通用2400MB9400
rds.mys2.xlarge通用6000MB10800
rds.mys2.2xlarge通用12000MB10800
rds.mys2.4xlarge通用24000MB121000
rds.mys2.8xlarge通用48000MB131000
rds.mysql.t1.small通用1GB1100
rds.mysql.s1.small通用2GB1100
rds.mysql.s2.large通用4GB2200
rds.mysql.s2.xlarge通用8GB2200
rds.mysql.s3.large通用8GB4400
rds.mysql.m1.medium通用16GB4400
rds.mysql.c1.large通用16GB8800
rds.mysql.c1.xlarge通用32GB8800
rds.mysql.c2.xlarge通用64GB161600
rds.mysql.c2.xlp2通用96GB161600
rds.mysql.c2.2xlarge通用128GB161600
mysql.x8.medium.2独享套餐16GB2200
mysql.x8.large.2独享套餐32GB4400
mysql.x8.xlarge.2独享套餐64GB8800
mysql.x8.2xlarge.2独享套餐128GB161600
rds.mysql.st.d13独占物理机220GB303000
rds.mysql.st.h13独占物理机470GB606000


通过Hint指定SQL发往主实例或只读实例


在读写分离权重分配体系之外,Hint可作为一种SQL补充语法来指定相关SQL到主实例或只读实例执行。
RDS读写分离支持的Hint格式如下所示:

  • /*FORCE_MASTER*/:指定后续SQL到主实例执行。

  • /*FORCE_SLAVE*/:指定后续SQL到只读实例执行。

例如,在如下语句前加入Hint后,不论权重如何设置,该语句一定会路由到主实例上执行。
  1. [backcolor=transparent]/*FORCE_MASTER*/[backcolor=transparent] SELECT [backcolor=transparent]*[backcolor=transparent] FROM table_name[backcolor=transparent];


展开
收起
云栖大讲堂 2017-10-18 10:50:22 1992 分享 版权
阿里云 AI 助理回答

从您提供的信息来看,这是阿里云RDS(关系型数据库服务)中关于实例读权重的设定以及如何通过Hint来控制SQL查询是发送到主实例还是只读实例的规则。下面我将为您解析这些内容:

实例读权重列表

在阿里云RDS中,不同规格的实例根据其内存、CPU等资源的不同,被赋予了不同的读取权重值。这个权重值在系统自动设置实例的读权重时会用到,影响着读请求在多个只读实例间的分配比例。例如: - rds.mys2.small 规格的实例,内存为240MB,CPU为3,权重为100。 - rds.mysql.c2.2xlarge 规格的实例,内存为128GB,CPU为16,权重为16000。

更高的权重意味着该实例在处理读请求时会被优先考虑,尤其是在配置了读写分离的情况下,能够更均衡地分摊读流量。

通过Hint指定SQL执行目标

为了更精细地控制SQL查询的执行位置,阿里云RDS支持使用Hint语法来直接指定SQL语句应该在主实例还是只读实例上执行,绕过默认的基于权重的路由逻辑。这有两个主要的Hint指令: - /*FORCE_MASTER*/:当在SQL语句前加上此Hint,不论当前的读写分离配置如何,该SQL都将被强制发送到主实例执行。这对于需要实时更新数据或执行写操作的场景非常有用。 - /*FORCE_SLAVE*/:与之相反,如果希望确保某条SQL在只读实例上执行(比如大量数据分析查询),可以在SQL前添加此Hint。但需要注意的是,如果所有只读实例不可用,这条SQL可能会失败或者被重定向到主实例执行。

示例

假设你有一条查询语句需要确保在主实例上执行以获取最新数据,可以这样编写:

/*FORCE_MASTER*/ SELECT * FROM table_name;

而如果你有一个大数据分析任务,希望减轻主库压力,可以在查询前加入只读实例Hint:

/*FORCE_SLAVE*/ SELECT COUNT(*) FROM large_table;

通过这种方式,用户可以根据实际需求灵活调整SQL的执行策略,优化数据库性能和负载均衡。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答