Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Planifier la configuration des RCU pour une instance serverless

Dernière mise à jour :Aug 24, 2026

ApsaraDB RDS for MySQL serverless met automatiquement à l'échelle les unités de capacité RDS (RCU) en fonction de l'utilisation du CPU et de la mémoire. Dans 99,8 % des cas, les montées en charge s'effectuent en quelques secondes (intra-hôte). Toutefois, lorsque l'hôte actuel ne peut pas fournir suffisamment de ressources, une montée en charge inter-hôtes est nécessaire ; cette opération prend de 3 à 5 minutes et peut affecter vos charges de travail. Pour éviter tout impact durant une période de forte activité connue, utilisez une tâche planifiée pour augmenter le nombre minimal de RCU avant le pic de trafic.

Fonctionnement

La mise à l'échelle automatique déclenche une augmentation de la capacité lorsque l'utilisation du CPU ou de la mémoire atteint 60 % à 80 %. Deux types de montée en charge sont possibles :

Type de montée en charge Durée Impact sur les connexions Fréquence
Intra-hôte Quelques secondes Aucun 99,8 % des cas
Inter-hôtes 3–5 minutes Peut affecter vos charges de travail Lorsque l'hôte ne peut pas fournir suffisamment de ressources

En définissant MinCapacity et MaxCapacity avec la même valeur, vous fixez la capacité de l'instance pour une fenêtre de temps donnée, éliminant ainsi tout risque de montée en charge durant cette période.

La tâche planifiée appelle l'API ModifyDBInstanceSpec pour augmenter la valeur MinCapacity avant le début d'une période de forte activité, puis restaure les valeurs d'origine à la fin de celle-ci.

Cas d'utilisation

  • Protéger une période de pointe connue : Réservez une plage fixe de RCU durant une période de forte activité prévisible (par exemple, un traitement par lots ou un pic aux heures ouvrables) afin d'éliminer le risque de montée en charge inter-hôtes.

Exemple de scénario

Réservez 4 à 8 RCU durant l'heure de pointe de 08:00 à 09:00. Étant donné qu'une montée en charge inter-hôtes peut prendre jusqu'à 5 minutes, augmentez le minimum 10 minutes plus tôt, soit à 07:50. Restaurez la plage par défaut (0,5–8 RCU) à 09:00.

image

Les deux tâches planifiées utilisent les paramètres suivants :

Heure **MinCapacity** **MaxCapacity** Effet
07:50 4 8 Augmente le minimum 10 min avant le pic ; déclenche une montée en charge inter-hôtes si nécessaire
09:00 0.5 8 Restaure la plage par défaut après la période de pointe

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

Planifier la tâche en Python

Cet exemple utilise APScheduler avec un BlockingScheduler et des déclencheurs cron.

Configuration

  1. Installez Python et installez les dépendances du SDK Alibaba Cloud.

  2. Installez APScheduler :

    pip install apscheduler
  3. Téléchargez l'exemple de projet SDK pour ModifyDBInstanceSpec :

    1. Ouvrez la page ModifyDBInstanceSpec dans OpenAPI Explorer.

    2. Dans l'onglet Parameters, définissez les valeurs suivantes :

      Paramètre Valeur
      DBInstanceId rm-bp1t8v93k6e15****
      PayType Serverless
      Direction Serverless
      MaxCapacity 8,0
      MinCapacity 0,5
      AutoPause false
      SwitchForce true
    3. Dans l'onglet SDK Sample Code, sélectionnez Python dans la liste déroulante Languages et cliquez sur Download Project. > Note: Téléchargez l'exemple de projet SDK V2.0.

    4. Décompressez le package et ouvrez le répertoire _alibabacloud_sample_.

Configurer la tâche planifiée

Ajoutez le contenu de la tâche planifiée APScheduler au fichier sample.py et utilisez un déclencheur cron pour configurer l'heure d'exécution. Le déclencheur cron hour=7, minute=50 se déclenche tous les jours à 07:50 ; hour=9, minute=0 se déclenche à 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:])

Remplacez rm-bp1t8v93k6e15**** par votre ID d'instance réel. Les valeurs hour et minute dans scheduler.add_job suivent le format 24 heures ; ajustez-les pour correspondre à votre fenêtre de pointe.

Planifier la tâche en Java

Cet exemple utilise Spring Schedule. Java 1.8 ou version ultérieure est requis.

Configuration

  1. Respectez les prérequis relatifs à l'utilisateur RAM et aux variables d'environnement.

  2. Téléchargez le package d'exemple demo.zip et décompressez-le sur votre machine locale.

Configurer la tâche planifiée

Ouvrez le fichier ScheduleTask.java et mettez à jour les expressions cron et les paramètres pour correspondre à votre fenêtre de pointe. Le format cron est "Second Minute Hour Day Month Week". Par exemple, @Scheduled(cron = "0 0 8 * * ? ") se déclenche tous les jours à 08:00:00.

Le code suivant définit la plage de RCU sur [4, 8] à 07:50 et restaure [0,5, 8] à 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);
    }
}

Ajustez les paramètres suivants pour correspondre à votre environnement et à vos besoins :

Paramètre Description Exemple
RegionId ID de la région de l'instance cn-hangzhou
DBInstanceId ID de l'instance rm-bp1t8v93k6e15****
PayType Méthode de facturation Serverless
Direction Type de modification des spécifications Serverless
MaxCapacity Nombre maximal de RCU 8,0
MinCapacity Nombre minimal de RCU 0,5
AutoPause Activation ou non du démarrage et de l'arrêt automatiques false
SwitchForce Activation ou non de la mise à l'échelle forcée true

Pour la syntaxe des expressions cron, consultez la référence de l'annotation Spring @Scheduled).

Étapes suivantes