- Catégories :
Fonctions système (Informations système)
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS¶
Renvoie les coûts estimés de l’ajout de l”optimisation de la recherche à une table donnée et de la configuration de colonnes spécifiques pour l’optimisation de la recherche.
Important
Les estimations de coûts renvoyées par la fonction SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS sont les meilleurs efforts possibles. Les coûts réels réalisés peuvent varier considérablement (jusqu’à 50 % ou, dans de rares cas, de plusieurs fois) par rapport aux coûts estimés.
Les estimations des coûts de construction et de stockage sont basées sur l’échantillonnage d’un sous-ensemble des lignes de la table.
Les estimations des coûts de maintenance sont basées sur les activités récentes de création, de suppression et de mise à jour de la table.
Syntaxe¶
SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('<table_name>' [ , '<search_method_with_target>' ])
Arguments¶
Obligatoire :
table_name
Table pour laquelle vous souhaitez estimer les coûts d’optimisation de la recherche.
Si le nom de la table n’est pas complet (sous la forme
db_name.schema_name.table_name
ouschema_name.table_name
), la fonction recherche la table dans le schéma actuel de la session.Le nom entier doit être entre guillemets simples.
Facultatif :
search_method_with_target
Spécifie une méthode de recherche et une cible pour une configuration de colonne similaire à ce qui peut être spécifié dans la clause ON de la commande ALTER TABLE … ADD SEARCH OPTIMIZATION.
L’ensemble de cet argument doit être placé entre guillemets simples. Dans cette chaîne, utilisez des guillemets doubles autour des noms de colonnes lorsque cela est nécessaire.
Sortie¶
La fonction renvoie un objet JSON avec les propriétés décrites ci-dessous :
Propriété |
Description |
---|---|
|
Nom de la table. |
|
|
|
Tableau d’objets décrivant les coûts prévus de l’ajout d’une optimisation de la recherche à la table ou ses colonnes. |
Chaque objet du tableau costPositions
représente un type différent d’estimation des coûts :
...
"costPositions" : [
{
"name" : "BuildCosts",
...
}, {
"name" : "StorageCosts",
...
}, {
"name" : "Benefit",
...
}, {
"name" : "MaintenanceCosts",
...
}
]
...
La propriété name
identifie le type de coût représenté par l’objet. name
peut être l’un des suivants :
|
Description |
---|---|
|
Cet objet décrit les coûts prévus de création du chemin d’accès de recherche pour la table. Si l’optimisation de la recherche a déjà été ajoutée à la table ou à toutes les colonnes spécifiées, cet objet ne contient aucune information de coût. |
|
Cet objet décrit la quantité prévue d’espace de stockage (en TB) nécessaire pour le chemin d’accès à la recherche de la table. |
|
Cet objet n’apparaît que lorsque l’optimisation de la recherche est activée dans la table. Il ne contient pas d’informations pour le moment. |
|
Cet objet décrit les coûts prévus de l’entretien du chemin d’accès de recherche pour la table quand des lignes sont insérées, supprimées ou modifiées. Si la table a été créée récemment, aucune information sur les coûts n’est communiquée. |
Chaque objet du tableau costPositions
peut avoir les propriétés suivantes :
Propriété |
Description |
---|---|
|
Nom qui identifie le type d’informations de coût représenté par cet objet. |
|
Objet qui décrit les coûts prévus en fonction des propriétés suivantes : |
value |
Montant du coût prévu. |
unit |
Unité de mesure du coût (par exemple, « Crédits » pour les coûts de calcul, « TB » pour les coûts de stockage, etc.). |
perTimeUnit |
Pour les coûts de maintenance, unité de temps couverte par le coût estimé (par exemple, |
|
Méthode utilisée pour estimer les coûts, si plusieurs méthodes sont disponibles. |
|
Informations supplémentaires sur le coût estimé. |
Notes sur l’utilisation¶
La propriété
searchOptimizationEnabled
esttrue
lorsque l’optimisation de la recherche est activée pour la table ou l’une de ses colonnes.Pour le coût de construction, cette fonction renvoie une approximation basée sur la construction de chemins d’accès de recherche pour un échantillon des données de la table spécifiée.
Pour le coût de maintenance, cette fonction base les estimations sur les changements récents apportés à la table (les changements d’octets dans le temps).
Pour pouvoir appeler la fonction, vous devez avoir un entrepôt en service. Si aucun entrepôt n’est actuellement utilisé, la fonction signale l’erreur suivante :
No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command.
La taille de l’entrepôt n’a aucun effet sur la vitesse et les performances de cette fonction. Vous pouvez utiliser un entrepôt X-Small.
Comme la fonction utilise un entrepôt, vous êtes maintenant facturé pour l’utilisation de l’entrepôt pour cette fonction.
L’exécution de la fonction peut durer entre 20 secondes et 10 minutes. L’utilisation d’un entrepôt plus grand ne se traduit pas par une exécution plus rapide.
Exemples¶
L’exemple suivant montre les coûts estimés de l’ajout d’une optimisation de recherche à une table :
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt') AS estimate_for_table_without_search_optimization;+---------------------------------------------------------------------------+ | ESTIMATE_FOR_TABLE_WITHOUT_SEARCH_OPTIMIZATION | |---------------------------------------------------------------------------| | { | | "tableName" : "TABLE_WITHOUT_SEARCH_OPT", | | "searchOptimizationEnabled" : false, | | "costPositions" : [ { | | "name" : "BuildCosts", | | "costs" : { | | "value" : 11.279, | | "unit" : "Credits" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "StorageCosts", | | "costs" : { | | "value" : 0.070493, | | "unit" : "TB" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "MaintenanceCosts", | | "costs" : { | | "value" : 30.296, | | "unit" : "Credits", | | "perTimeUnit" : "MONTH" | | }, | | "computationMethod" : "Estimated", | | "comment" : "Estimated from historic change rate over last ~11 days." | | } ] | | } | +---------------------------------------------------------------------------+
L’exemple suivant montre la sortie de cette fonction pour une table qui a déjà une optimisation de recherche activée : Vous pouvez constater qu’aucune information sur les coûts de construction n’est disponible dans ce cas. La propriété Benefit
est également incluse (mais elle ne contient aucune information).
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_with_search_opt') AS estimate_for_table_with_search_optimization;+---------------------------------------------------------------------------+ | ESTIMATE_FOR_TABLE_WITH_SEARCH_OPTIMIZATION | |---------------------------------------------------------------------------| | { | | "tableName" : "TABLE_WITH_SEARCH_OPT", | | "searchOptimizationEnabled" : true, | | "costPositions" : [ { | | "name" : "BuildCosts", | | "computationMethod" : "NotAvailable", | | "comment" : "Search optimization is already enabled." | | }, { | | "name" : "StorageCosts", | | "costs" : { | | "value" : 0.052048, | | "unit" : "TB" | | }, | | "computationMethod" : "Measured" | | }, { | | "name" : "Benefit", | | "computationMethod" : "NotAvailable", | | "comment" : "Currently not supported." | | }, { | | "name" : "MaintenanceCosts", | | "costs" : { | | "value" : 30.248, | | "unit" : "Credits", | | "perTimeUnit" : "MONTH" | | }, | | "computationMethod" : "EstimatedUpperBound", | | "comment" : "Estimated from historic change rate over last ~11 days." | | } ] | | } | +---------------------------------------------------------------------------+
L’exemple suivant montre la sortie de cette fonction pour estimer l’optimisation de la recherche sur trois colonnes spécifiques d’une table en utilisant la méthode de recherche EQUALITY (c’est-à-dire que l’estimation concerne l’activation de l’optimisation de la recherche uniquement pour les comparaisons d’égalité sur ces colonnes). Ni la table ni aucune de ses colonnes n’ont déjà été optimisées pour la recherche.
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_without_search_opt', 'EQUALITY(C1, C2, C3)') AS estimate_for_columns_without_search_optimization;+---------------------------------------------------------------------------+ | ESTIMATE_FOR_COLUMNS_WITHOUT_SEARCH_OPTIMIZATION | |---------------------------------------------------------------------------| | { | | "tableName" : "TABLE_WITHOUT_SEARCH_OPT", | | "searchOptimizationEnabled" : false, | | "costPositions" : [ { | | "name" : "BuildCosts", | | "costs" : { | | "value" : 10.527, | | "unit" : "Credits" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "StorageCosts", | | "costs" : { | | "value" : 0.040323, | | "unit" : "TB" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "MaintenanceCosts", | | "costs" : { | | "value" : 22.821, | | "unit" : "Credits", | | "perTimeUnit" : "MONTH" | | }, | | "computationMethod" : "Estimated", | | "comment" : "Estimated from historic change rate over last ~7 days." | | } ] | | } | +---------------------------------------------------------------------------+
Si une requête similaire est exécutée sur une table où l’optimisation de la recherche est déjà activée pour l’une des colonnes spécifiées, le résultat comprend une estimation du coût de construction qui couvre l’ajout de l’optimisation de la recherche aux colonnes spécifiées où elle n’est pas encore activée. Ceci est différent de l’exemple précédent où nous estimions l’optimisation de la recherche sur une table entière où l’optimisation de la recherche était déjà activée, ce qui n’a pas donné lieu à une estimation des coûts de construction puisqu’il n’y avait pas de travail de construction à effectuer.
L’estimation du stockage ne comprend que la taille réelle du chemin d’accès à la recherche pour les colonnes où l’optimisation de la recherche est déjà activée.
Le devis de maintenance couvre toutes les colonnes spécifiées, qu’elles aient ou non déjà activé l’optimisation de la recherche.
SELECT SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS('table_with_search_opt', 'EQUALITY(C1, C2, C3)') AS estimate_for_columns_with_search_optimization;+---------------------------------------------------------------------------+ | ESTIMATE_FOR_COLUMNS_WITH_SEARCH_OPTIMIZATION | |---------------------------------------------------------------------------| | { | | "tableName" : "TABLE_WITH_SEARCH_OPT", | | "searchOptimizationEnabled" : true, | | "costPositions" : [ { | | "name" : "BuildCosts", | | "costs" : { | | "value" : 8.331, | | "unit" : "Credits" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "StorageCosts", | | "costs" : { | | "value" : 0.040323, | | "unit" : "TB" | | }, | | "computationMethod" : "Estimated", | | "comment" : "estimated via sampling" | | }, { | | "name" : "Benefit", | | "computationMethod" : "NotAvailable", | | "comment" : "Currently not supported." | | }, { | | "name" : "MaintenanceCosts", | | "costs" : { | | "value" : 22.821, | | "unit" : "Credits", | | "perTimeUnit" : "MONTH" | | }, | | "computationMethod" : "Estimated", | | "comment" : "Estimated from historic change rate over last ~7 days." | | } ] | | } | +---------------------------------------------------------------------------+