Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Schedule the configuration of RCUs for a serverless instance

Última atualização: Aug 24, 2026

O ApsaraDB RDS for MySQL Serverless dimensiona automaticamente as RDS Capacity Units (RCUs) com base na utilização da CPU e no uso de memória. Em 99,8% dos casos, o scale-up é concluído em segundos (intra-host). No entanto, quando o host atual não fornece recursos suficientes, um scale-up entre hosts torna-se necessário. Esse processo leva de 3 a 5 minutos e pode afetar suas cargas de trabalho. Para evitar impactos durante uma janela de pico conhecida, use uma tarefa agendada para aumentar o mínimo de RCU antes do aumento de tráfego.

Como funciona

O Auto Scaling aciona um scale-up quando a utilização da CPU ou o uso de memória atinge entre 60% e 80%. Dois tipos de scale-up são possíveis:

Tipo de scale-up

Duração

Impacto na conexão

Frequência

Intra-host

Segundos

Nenhum

99,8% dos casos

Entre hosts

3–5 minutos

Pode afetar suas cargas de trabalho

Quando o host não fornece recursos suficientes

Defina MinCapacity e MaxCapacity com o mesmo valor fixa a instância em uma capacidade específica por uma janela de tempo, eliminando o risco de scale-up durante esse período.

A tarefa agendada chama a API ModifyDBInstanceSpec para aumentar o valor de MinCapacity antes do início de um período de pico e restaurar os valores originais ao término dele.

Casos de uso

  • Proteção de uma janela de pico conhecida: reserve uma faixa fixa de RCU durante um período de alta demanda previsível (como um job em lote ou pico em horário comercial) para eliminar o risco de scale-up entre hosts.

Cenário de exemplo

Reserve de 4 a 8 RCUs durante uma hora de pico, das 08:00 às 09:00. Como um scale-up entre hosts pode levar até 5 minutos, aumente o mínimo com 10 minutos de antecedência, às 07:50. Restaure a faixa padrão (0,5–8 RCUs) às 09:00.

image

Os dois jobs agendados usam os seguintes parâmetros:

Horário

**MinCapacity**

**MaxCapacity**

Efeito

07:50

4

8

Aumenta o mínimo 10 min antes do pico; aciona scale-up entre hosts se necessário

09:00

0,5

8

Restaura a faixa padrão após a janela de pico

Pré-requisitos

Antes de começar, verifique se você tem:

Schedule the task in Python

Este exemplo usa o APScheduler com um BlockingScheduler e gatilhos cron.

Configuração

  1. Install Python e install the Alibaba Cloud SDK dependencies.

  2. Instale o APScheduler:

    pip install apscheduler
  3. Baixe o projeto de exemplo do SDK para ModifyDBInstanceSpec:

    1. Abra a página ModifyDBInstanceSpec no OpenAPI Explorer.

    2. Na aba Parameters, defina os seguintes valores:

      Parâmetro

      Valor

      DBInstanceId

      rm-bp1t8v93k6e15****

      PayType

      Serverless

      Direction

      Serverless

      MaxCapacity

      8,0

      MinCapacity

      0,5

      AutoPause

      false

      SwitchForce

      true

    3. Na aba SDK Sample Code, selecione Python no menu suspenso Languages e clique em Download Project. > Note: Baixe o projeto de exemplo do SDK V2.0.

    4. Descompacte o pacote e abra o diretório _alibabacloud_sample_.

Configure a tarefa agendada

Adicione o conteúdo da tarefa agendada do APScheduler ao arquivo sample.py e use um gatilho cron para configurar o horário de execução. O gatilho cron hour=7, minute=50 dispara às 07:50 todos os dias; já hour=9, minute=0 dispara às 09:00.

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List, Dict
from alibabacloud_rds20140815.client import Client as Rds20140815Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_rds20140815 import models as rds_20140815_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_console.client import Client as ConsoleClient
from alibabacloud_tea_util.client import Client as UtilClient
from apscheduler.schedulers.blocking import BlockingScheduler

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Rds20140815Client:
        """
        Use your AccessKey ID and AccessKey secret to initialize a client.
        @return: Client
        @throws Exception
        """
        # If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is provided only for reference.
        # For security purposes, use temporary access credentials provided by Security Token Service (STS). For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-php-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, visit https://api.alibabacloud.com/product/Rds.
        config.endpoint = f'rds.aliyuncs.com'
        return Rds20140815Client(config)

    # Call the ModifyDBInstanceSpec API to update the serverless RDS instance configuration.
    @staticmethod
    def modify_db_instance_spec(config: Dict[str, float]) -> None:
        """
        Modify DB instance spec - the core task function
        """
        client = Sample.create_client()
        serverless_configuration = rds_20140815_models.ModifyDBInstanceSpecRequestServerlessConfiguration(
            max_capacity=config['max_capacity'],
            min_capacity=config['min_capacity'],
            auto_pause=config['auto_pause'],
            switch_force=config['switch_force']
        )
        modify_dbinstance_spec_request = rds_20140815_models.ModifyDBInstanceSpecRequest(
            dbinstance_id='rm-bp1t8v93k6e15****',
            direction='Serverless',
            pay_type='Serverless',
            serverless_configuration=serverless_configuration
        )
        runtime = util_models.RuntimeOptions(
            read_timeout=50000,
            connect_timeout=50000
        )
        try:
            resp = client.modify_dbinstance_spec_with_options(modify_dbinstance_spec_request, runtime)
            ConsoleClient.log(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions with caution in your actual business scenario. Do not ignore exceptions in your project. In this example, error messages are printed to the screen.
            print(error.message)
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    def main(args: List[str]) -> None:
        # Initialize the scheduler.
        scheduler = BlockingScheduler()

        # RCU range for 08:00-09:00 peak: min=4, max=8.
        # Scheduled at 07:50 to allow inter-host scale-up to complete before peak starts.
        config_8am = {
            'max_capacity': 8,
            'min_capacity': 4,
            'auto_pause': False,
            'switch_force': True
        }

        # Default RCU range restored after peak: min=0.5, max=8.
        config_9am = {
            'max_capacity': 8,
            'min_capacity': 0.5,
            'auto_pause': False,
            'switch_force': True
        }

        # Create scheduled tasks using cron triggers.
        scheduler.add_job(Sample.modify_db_instance_spec, 'cron', hour=7, minute=50, args=[config_8am])
        scheduler.add_job(Sample.modify_db_instance_spec, 'cron', hour=9, minute=0, args=[config_9am])

        try:
            scheduler.start()
        except (KeyboardInterrupt, SystemExit):
            pass

if __name__ == '__main__':
    Sample.main(sys.argv[1:])

Substitua rm-bp1t8v93k6e15**** pelo ID real da sua instância. Os valores de hour e minute em scheduler.add_job seguem o formato de 24 horas; ajuste-os para corresponder à sua janela de pico.

Schedule the task in Java

Este exemplo usa o Spring Schedule. É necessário Java 1.8 ou superior.

Configuração

  1. Conclua os RAM user and environment variable prerequisites.

  2. Baixe o pacote de exemplo demo.zip e descompacte-o em sua máquina local.

Configure a tarefa agendada

Abra o arquivo ScheduleTask.java e atualize as expressões cron e os parâmetros para corresponder à sua janela de pico. O formato cron é "Second Minute Hour Day Month Week". Por exemplo, @Scheduled(cron = "0 0 8 * * ? ") dispara às 08:00:00 todos os dias.

O código abaixo define a faixa de RCU como [4, 8] às 07:50 e restaura [0,5, 8] às 09:00:

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduleTask {

    @Scheduled(cron = "0 50 7 * * ? ")
    public void scheduleTask8am() {
        ModifySpecParams params = new ModifySpecParams();
        params.setRegionId("cn-hangzhou");
        params.setDBInstanceId("rm-bp1t8v93k6e15****");
        params.setDirection("Serverless");
        params.setPayType("Serverless");
        params.setAutoPause(false);
        params.setSwitchForce(true);
        params.setMaxCapacity(8);
        params.setMinCapacity(4);
        ModifyDBInstanceSpec.modify(params);
    }

    @Scheduled(cron = "0 0 9 * * ? ")
    public void scheduleTask9am() {
        ModifySpecParams params = new ModifySpecParams();
        params.setRegionId("cn-hangzhou");
        params.setDBInstanceId("rm-bp1t8v93k6e15****");
        params.setDirection("Serverless");
        params.setPayType("Serverless");
        params.setAutoPause(false);
        params.setSwitchForce(true);
        params.setMaxCapacity(8);
        params.setMinCapacity(0.5);
        ModifyDBInstanceSpec.modify(params);
    }
}

Ajuste os seguintes parâmetros para corresponder ao seu ambiente e requisitos:

Parâmetro

Descrição

Exemplo

RegionId

ID da região da instância

cn-hangzhou

DBInstanceId

ID da instância

rm-bp1t8v93k6e15****

PayType

Método de faturamento

Serverless

Direction

Tipo de alteração de especificação

Serverless

MaxCapacity

Número máximo de RCUs

8,0

MinCapacity

Número mínimo de RCUs

0,5

AutoPause

Se deve ativar início e parada automáticos

false

SwitchForce

Se deve ativar o dimensionamento forçado

true

Para sintaxe de expressão cron, consulte a referência da anotação Spring @Scheduled).

Próximos passos