Tous les produits
Search
Centre de documentation

MaxCompute:Split Size Hint

Dernière mise à jour :Aug 10, 2026

Si un job SQL MaxCompute s'exécute plus lentement que prévu, cela provient souvent d'une inadéquation entre le nombre de tâches et les ressources disponibles. L'indice split_size définit la taille des fragments de données créés par MaxCompute pour le traitement parallèle. Chaque fragment correspond à une tâche map ; la taille du fragment détermine donc directement le niveau de parallélisme du job. Ajustez cette valeur pour équilibrer le nombre de tâches et les ressources disponibles : des fragments plus petits génèrent davantage de tâches map pour augmenter le parallélisme, tandis que des fragments plus grands réduisent le nombre de tâches et allègent la charge d'ordonnancement.

SELECT ...
FROM <table_name> /*+split_size(<value_in_mb>)*/
...

La taille de fragment par défaut est de 256 Mo.

Fonctionnement

MaxCompute lit les données d'une table et les divise en fragments de la taille spécifiée. Le nombre de tâches map est approximativement égal à :

map tasks = table data size / split_size

Par exemple, une table de 10 Go avec split_size(256) génère environ 40 tâches map. En réduisant la valeur à split_size(64), vous obtenez environ 160 tâches map, soit un parallélisme quatre fois supérieur.

MaxCompute prend en compte l'indice split_size pour la plupart des tables. Toutefois, si l'optimiseur de requête utilise les propriétés de bucketing d'une table clusterisée, il ignore cet indice.

Ajustement de la taille de fragment

Une inadéquation entre le nombre de tâches et les ressources disponibles figure parmi les causes les plus fréquentes de lenteur des jobs SQL :

  • Trop de tâches pour les ressources disponibles -- Les tâches s'accumulent en file d'attente pour obtenir des emplacements d'exécution, ce qui accroît la surcharge d'ordonnancement. Le job passe plus de temps à attendre qu'à calculer.

  • Trop peu de tâches pour les ressources disponibles -- Les ressources restent inactives pendant qu'un petit nombre de tâches traite de gros volumes de données de manière séquentielle. Le job dure plus longtemps que nécessaire.

Scénario

Action

Raison

Les tâches sont en file d'attente pour les ressources

Augmentez split_size (par exemple, 512 ou 1024)

Moins de tâches map réduisent la contention et la surcharge d'ordonnancement

Les ressources sont inactives pendant l'exécution du job

Diminuez split_size (par exemple, 64 ou 128)

Davantage de tâches map s'exécutent en parallèle, améliorant l'utilisation des ressources

Pour des performances optimales, définissez split_size avec des multiples de 256 Mo (par exemple, 256, 512, 1024).

Exemples

Dans tous les exemples, l'indice est placé immédiatement après le nom de la table dans la clause FROM.

Définissez la taille de fragment sur 1 Mo lors de la lecture de src. Les données de la table src sont divisées en fragments de 1 Mo, chacun étant traité par une tâche map distincte. Pour une table de 10 Go, cela crée environ 10 240 tâches map au lieu des 40 par défaut :

SELECT a.key
FROM src a /*+split_size(1)*/
JOIN src2 b ON a.key = b.key;

Augmentez la taille de fragment à 512 Mo pour réduire le nombre de tâches sur une grande table. Pour une table de 10 Go, cette opération réduit le nombre de tâches de 40 à environ 20 :

SELECT *
FROM large_table /*+split_size(512)*/
WHERE dt = '2024-01-01';

Comportement avec les tables clusterisées et les indices multiples

  • Tables clusterisées : L'optimiseur de requête ignore l'indice split_size pour une table clusterisée s'il utilise les propriétés de bucketing de la table pour l'optimisation.

  • Indices multiples sur la même table : Si une requête lit la même table plusieurs fois avec des indices split_size différents, MaxCompute utilise la valeur la plus petite. Par exemple :

    • split_size(1) et split_size(10) sur la même table : MaxCompute utilise 1.

    • split_size(1) sur une référence et aucun indice sur une autre : MaxCompute utilise 1 (et non la valeur par défaut de 256 Mo).

Référence

Propriété

Valeur

Description

Nom de l'indice

split_size

Nom utilisé dans le commentaire d'indice

Syntaxe

/*+split_size(<value_in_mb>)*/

Syntaxe de commentaire en ligne placée après le nom de la table

Emplacement

Après le nom de la table dans une requête

S'applique à la table spécifique qu'il suit

Unité

Mo

La valeur de la taille de fragment est interprétée en mégaoctets

Valeur par défaut

256

Utilisée lorsqu'aucun indice n'est spécifié

Valeurs recommandées

Multiples de 256 (par exemple, 256, 512, 1024)

S'aligne sur les limites internes des blocs pour des performances optimales

Résolution des conflits

Petite valeur parmi tous les indices sur la même table

S'applique lorsque la même table apparaît plusieurs fois avec des indices différents