Lorsque les ressources de calcul dédiées sont insuffisantes pour absorber une charge soudaine, Hologres achemine les requêtes SQL vers un pool partagé sans serveur, facturé au paiement à l'utilisation. Cette rubrique explique le calcul du quota de ressources sans serveur et la méthode pour limiter le nombre d'unités de calcul (CUs) allouées à chaque requête.
Quota de ressources sans serveur
Le quota de ressources sans serveur correspond au nombre maximal d'unités de calcul (CUs) que toutes les requêtes SQL actives simultanément (état EXECUTE) sur une instance peuvent consommer en même temps. Il dépend du nombre d'unités de calcul dédiées de l'instance.
| Unités de calcul dédiées de l'instance | Quota de ressources sans serveur |
|---|---|
| Moins de 32 CUs | Le calcul sans serveur n'est pas pris en charge. |
| De 32 à moins de 688 CUs | Par défaut : 3 fois les unités de calcul dédiées de l'instance (par exemple, 32 CUs donnent un quota de 96 CUs). À partir de la version 3.0.33 : 5 fois, plafonné à 2 048 CUs. À partir de la version 3.1.9 : plafond porté à 4 096 CUs. À partir de la version 4.0.13 : 10 fois, plafonné à 4 096 CUs. |
| 688 CUs ou plus | Plafonné à 2 048 CUs. À partir de la version 3.1.9 : plafond porté à 4 096 CUs. |
Le pool de ressources sans serveur de chaque zone est partagé entre toutes les instances de cette zone. Le calcul sans serveur fonctionne au paiement à l'utilisation et la disponibilité des ressources n'est pas garantie. Si le quota de l'instance est atteint ou si le pool de la zone est épuisé, les nouvelles requêtes passent à l'état QUEUE et attendent la disponibilité des ressources.
Allocation des ressources à une requête
Trois facteurs déterminent le nombre d'unités de calcul attribuées à une requête SQL unique. Le système retient la valeur minimale parmi ces trois facteurs.
| Facteur | Description | Valeur par défaut |
|---|---|---|
| Quota | Quota de ressources sans serveur de l'instance. | Déterminé par la taille de l'instance (voir le tableau ci-dessus). |
hg_experimental_serverless_computing_max_cores (Max Cores) |
Plafond d'unités de calcul pour une seule requête. | 512 avant les versions 3.0.42 et 3.1.10 ; 1 024 à partir des versions 3.0.42 et 3.1.10. |
hg_experimental_serverless_computing_required_cores (Required Cores) |
Unités de calcul estimées pour une requête. Si la valeur est 0, le système estime automatiquement. Si la valeur est non nulle, l'allocation réelle correspond à max(required_cores, system_estimate x 0.5). |
0 (estimation automatique). |
Les ressources sont allouées par incréments de 15 unités de calcul.
Exemple : Une instance dispose d'un quota de 96 CUs. La valeur Max Cores est de 32 et le système estime que la requête nécessite 60 CUs. La requête reçoit 32 CUs, soit le minimum entre 96, 32 et 60.
Différence entre Max Cores et Required Cores
Ces deux paramètres limitent le nombre d'unités de calcul attribuées à une requête, mais leurs objectifs diffèrent :
Max Cores fixe un plafond strict pour empêcher une requête unique de monopoliser les ressources sans serveur. Utilisez ce paramètre pour protéger le pool de ressources contre les requêtes incontrôlées.
Required Cores remplace l'estimation automatique du système pour une requête spécifique. N'utilisez ce paramètre que si l'estimation automatique s'avère systématiquement incorrecte pour une charge de travail particulière, et uniquement après des tests.
Définir Max Cores
Le paramètre Max Cores définit le nombre maximal d'unités de calcul qu'une seule requête peut utiliser dans le pool sans serveur. Réduisez cette valeur lorsque des requêtes volumineuses monopolisent les ressources sans serveur au détriment des petites requêtes concurrentes.
La réduction de la valeur Max Cores diminue les ressources disponibles pour chaque requête. Testez l'impact sur les performances des requêtes avant d'appliquer cette modification en production.
-- Set the maximum CUs to allocate for a single serverless computing task. Default: 512.
SET hg_experimental_serverless_computing_max_cores = 512;
-- Reset to the default.
reset hg_experimental_serverless_computing_max_cores;
Exemple complet :
-- Route the query to the serverless pool.
SET hg_computing_resource = 'serverless';
-- Cap this query at 32 CUs.
SET hg_experimental_serverless_computing_max_cores = 32;
-- Run the query.
INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- Reset both parameters.
reset hg_computing_resource;
reset hg_experimental_serverless_computing_max_cores;
Définir Required Cores
Par défaut, le système estime automatiquement le nombre d'unités de calcul nécessaires à une requête selon sa complexité. Ne définissez le paramètre Required Cores que si l'estimation automatique s'avère systématiquement erronée pour un modèle de requête spécifique, par exemple lorsqu'une requête sous-utilise ou surutilise régulièrement les ressources malgré une complexité logique identique.
Une valeur trop faible pour Required Cores peut provoquer des erreurs de mémoire insuffisante (OOM). Effectuez des tests approfondis avant d'utiliser ce paramètre en production.
Si vous définissez une valeur non nulle, l'allocation réelle correspond à max(required_cores, system_estimate x 0.5). Ce plancher empêche l'allocation de descendre de plus de 50 % en dessous de l'estimation du système.
-- Override the automatic estimate with a specific CU value.
SET hg_experimental_serverless_computing_required_cores = <value>;
-- Reset to automatic estimation.
reset hg_experimental_serverless_computing_required_cores;
Exemple complet :
-- Route the query to the serverless pool.
SET hg_computing_resource = 'serverless';
-- Request at least 96 CUs. Actual allocation: max(96, system_estimate x 0.5).
SET hg_experimental_serverless_computing_required_cores = 96;
-- Run the query.
INSERT INTO sink_tbl SELECT * FROM source_tbl;
-- Reset both parameters.
reset hg_computing_resource;
reset hg_experimental_serverless_computing_required_cores;
Ajuster le ratio d'allocation des ressources
Si l'estimation automatique du système s'avère systématiquement incorrecte pour plusieurs requêtes, et non une seule, ajustez le paramètre hg_experimental_serverless_computing_resource_allocation_ratio pour modifier l'estimation à l'échelle globale. La valeur par défaut est 4 (neutre).
| Valeur | Effet | Exemple (estimation de base : 60 CUs) |
|---|---|---|
| Supérieure à 4 (par exemple, 8) | Augmente l'estimation. | Ajustée à 120 CUs. |
| Inférieure à 4 (par exemple, 2) | Réduit l'estimation. | Ajustée à 30 CUs. |
Appliquez le paramètre au niveau approprié selon vos besoins :
-- Apply at the SQL level (current session only).
SET hg_experimental_serverless_computing_resource_allocation_ratio = 4;
-- Apply at the user level.
ALTER USER "ROLE_NAME" IN DATABASE DB_NAME SET hg_experimental_serverless_computing_resource_allocation_ratio = 4;
-- Apply at the database level.
ALTER DATABASE DB_NAME SET hg_experimental_serverless_computing_resource_allocation_ratio = 4;