Todos os produtos
Search
Central de documentação

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

Última atualização: Jul 04, 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 inter-host 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 elevar 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

Inter-host

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. Isso elimina o risco de scale-up durante esse período.

A tarefa agendada chama a API ModifyDBInstanceSpec para aumentar o MinCapacity antes do início de um período de pico e restaura 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 (por exemplo, um job em lote ou pico em horário comercial) para eliminar o risco de scale-up inter-host.

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 inter-host 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

Eleva o mínimo 10 min antes do pico; aciona scale-up inter-host 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 inicial

  1. Instale o Python e instale as dependências do SDK da Alibaba Cloud.

  2. Instale o APScheduler:

    pip install apscheduler
  3. Baixe o projeto de amostra 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 amostra 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á o 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.aliyun.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 inicial

  1. Conclua os pré-requisitos de usuário RAM e variáveis de ambiente.

  2. Baixe o pacote de amostra 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 conforme 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