Comment calculer les frais de requête dans Amazon Redshift Spectrum ?

Dernière mise à jour : 07/08/2020

Je souhaite calculer les frais de requête dans Amazon Redshift Spectrum lorsque les données sont analysées à partir d'Amazon Simple Storage Service (Amazon S3). Comment calculer l'utilisation ou le coût des requêtes Redshift Spectrum, et quelles sont les bonnes pratiques pour réduire les frais ?

Brève description

Conditions préalables :

  • Un cluster Amazon Redshift.
  • Un client SQL connecté à votre cluster pour exécuter des commandes SQL.
  • Le cluster Amazon Redshift et le compartiment Amazon S3 doivent tous deux se trouver dans la même région.

Avec Redshift Spectrum, vous pouvez exécuter des requêtes SQL directement sur les données dans S3. Vous êtes facturé en fonction du nombre d'octets analysés à partir de S3. Des frais supplémentaires (de 5 à 6,25 USD par To de données analysées) peuvent être facturés en fonction de la région. Les nombres d'octets sont toujours arrondis au méga-octet suivant, avec un minimum de 10 Mo par requête. Pour plus d'informations, consultez la tarification d'Amazon Redshift.

Remarque : aucuns frais ne sont facturés pour les instructions DDL (Data Definition Language) telles que CREATE, ALTER ou DROP TABLE pour la gestion des partitions et les requêtes ayant échoué.

Solution

Pour calculer le coût estimé des requêtes (et obtenir un résumé de toutes les requêtes S3 exécutées dans Redshift Spectrum), utilisez la table SVL_S3QUERY_SUMMARY. La colonne s3_scanned_bytes renvoie le nombre d'octets analysés depuis S3 envoyés à la couche Redshift Spectrum.

Utilisation

Vous pouvez exécuter la requête sur SVL_S3QUERY_SUMMARY pour déterminer le nombre d'octets transférés par queryID :

SELECT s3_scanned_bytes
FROM SVL_S3QUERY_SUMMARY
WHERE query=<queryID>;

Pour déterminer la somme de tous les octets analysés à partir de S3, utilisez la requête suivante :

SELECT sum(s3_scanned_bytes)
FROM SVL_S3QUERY_SUMMARY;

Vous pouvez également déterminer la somme des octets de toutes les requêtes de Redshift Spectrum sur une période donnée. L'exemple suivant montre comment calculer la somme de tous les octets des requêtes qui ont commencé à s'exécuter depuis la veille :

SELECT sum(s3_scanned_bytes)
FROM SVL_S3QUERY_SUMMARY
WHERE starttime >= current_date-1; 

Si vous exécutez cette requête sur un compartiment S3 dans la région USA Est (Virginie du Nord), Redshift Spectrum facture 5 USD par téraoctet. Si la somme de s3_scanned_bytes renvoie 621 900 000 000 octets lors de l'interrogation de SVL_S3QUERY_SUMMARY, vous avez 0,565614755032584 To (lorsque vous convertissez les octets en téraoctets).

621900000000 bytes = 621900000000/1024 = 607324218.75 kilobytes
607324218.75 kilobytes = 607324218.75/1024 =  593090.057373046875 megabytes
593090.057373046875  megabytes =  593090.057373046875 /1024 = 579.189509153366089 gigabytes
579.189509153366089  gigabytes =  579.189509153366089/1024 = 0.565614755032584 terabytes 

Dans cet exemple, votre utilisation est d'environ 0,5657 téraoctet. Pour calculer le coût d'utilisation de Redshift Spectrum, multipliez-le par le coût par téraoctet :

$5 * 0.5657= $2.83

Vous pouvez également utiliser la requête SQL suivante pour calculer les frais d'utilisation de Redshift Spectrum :

SELECT
   round(1.0*sum(s3_scanned_bytes/1024/1024/1024/1024),4) s3_scanned_tb,
   round(1.0*5*sum(s3_scanned_bytes/1024/1024/1024/1024),2) cost_in_usd 
FROM SVL_S3QUERY_SUMMARY; 

Dans cet exemple, les frais de Redshift Spectrum sont demandés par rapport à votre compartiment S3 pour les données analysées la veille.

Remarque : toutes les requêtes analysant jusqu'à 9,9 Mo sont arrondies à l'unité supérieure et facturées pour 10 Mo. Aucuns frais ne sont facturés pour les requêtes ayant échoué ou abandonnées.

En outre, les tables de journaux système (STL) conservent seulement deux à cinq jours d'historique des journaux, en fonction de l'utilisation des journaux et de l'espace disque disponible. Par conséquent, il est recommandé de calculer les frais de requête quotidiens et de les stocker dans une autre table, en conservant un enregistrement des octets transférés. Exemple :

CREATE VIEW spectrum_cost AS
SELECT starttime::date as date, xid, query, trim(usename) as user, 
  CASE WHEN s3_scanned_bytes < 10000000 then 10 ELSE s3_scanned_bytes/1024/1024 end as scanned_mb, 
  round(CASE WHEN s3_scanned_bytes < 10000000 then 10*(5.0/1024/1024) 
  ELSE (s3_scanned_bytes/1024/1024)*(5.0/1024/1024) end,5) as cost_$ 
FROM svl_s3query_summary s 
LEFT JOIN pg_user u ON userid=u.usesysid 
JOIN 
(select xid as x_xid,max(aborted) as x_aborted from svl_qlog group by xid) q 
ON s.xid=q.x_xid 
WHERE userid>1 AND x_aborted=0
AND s.starttime >= current_date-1;

Remarque : vous pouvez également utiliser la requête CREATE TABLE pour calculer et stocker les données dans une autre table. Si vous ne souhaitez pas spécifier de période, supprimez « current_date-1 ».

Calculez la somme totale des données analysées depuis S3 vers Redshift Spectrum depuis la veille. Calculez ensuite l'estimation totale des frais en exécutant la requête suivante :

SELECT current_date-1 as query_since, SUM(scanned_mb) as total_scanned_mb, SUM(cost_$) as total_cost_$
FROM spectrum_cost;
Result:
  query_since | total_scanned_mb | total_cost_$
--------------+------------------+---------------
 2020-05-15   |            5029  |      0.02515 

Bonnes pratiques Redshift Spectrum

Pour réduire les frais de requête et améliorer les performances de Redshift Spectrum, suivez les bonnes pratiques suivantes :

  • Utilisez les contrôles de coûts de Redshift Spectrum et les fonctions de mise à l'échelle de la simultanéité pour surveiller et contrôler votre utilisation.
  • Utilisez les formats de données optimisés pour améliorer les performances et réduire les coûts. Utilisez des formats de données en colonnes tels que PARQUET et ORC pour sélectionner uniquement les colonnes à analyser à partir de S3.
  • Chargez les données dans S3 et utilisez Redshift Spectrum si les données sont rarement utilisées.
  • Lorsque vous utilisez plusieurs clusters Amazon Redshift pour mettre à l'échelle la simultanéité, mettez fin à ces clusters dès que les tâches sont terminées.

Contrôles des coûts et mise à l'échelle de la simultanéité pour Redshift Spectrum

En utilisant les contrôles des coûts et la fonction de mise à l'échelle de la simultanéité pour Redshift Spectrum, vous pouvez créer des limites d'utilisation quotidiennes, hebdomadaires et mensuelles. Lorsque les limites d'utilisation sont atteintes, Amazon Redshift prend automatiquement des mesures en fonction des limites d'utilisation.

Pour configurer le contrôle des coûts à partir de la console Amazon Redshift, effectuez les opérations suivantes :

1.    Connectez-vous à AWS Management Console.

2.    Ouvrez la console Amazon Redshift.

Remarque : vous pouvez également définir et gérer les limites d'utilisation à partir de l'interface de ligne de commande AWS (CLI AWS CLI) ou des opérations d'API Amazon Redshift.

3.    Choisissez Configure usage limit (Configurer la limite d'utilisation).

4.    Mettez à jour les paramètres de configuration suivants :

Time period (Daily/Weekly/Monthly) (Période : tous les jours/toutes les semaines/tous les mois)

Usage limit (TB) (Limite d'utilisation (To))

Action (Alert/Log to system table/Disable feature) (Action (Alerte/Journal dans la table système/Désactiver la fonction))

Remarque : les fonctions Action peuvent vous aider à gérer vos limites d'utilisation.

Pour configurer la limite d'utilisation de la mise à l'échelle dela simultanéité, effectuez les opérations suivantes :

1.    Connectez-vous à AWS Management Console.

2.    Ouvrez la console Amazon Redshift.

3.    ChoisissezConcurrency scaling usage limit (Limite d'utilisation de la mise à l'échelle de la simultanéité).

4.    Mettez à jour les paramètres de configuration suivants :

Time period (Daily/Weekly/Monthly) (Période : tous les jours/toutes les semaines/tous les mois)

Usage limit (hh:mm) (Limite d'utilisation (hh : mm))

Action (Alert/Log to system table/Disable feature) (Action (Alerte/Journal dans la table système/Désactiver la fonction))

Remarque : la période est dans le fuseau horaire UTC. Pour la fonctionnalité Alert (Alerte) et Disable (Désactiver), vous pouvez également associer un abonnement Amazon Simple Notification Service (SNS) à l'alarme. De plus, si vous activez une alerte à l'aide de la console Amazon Redshift, une alarme Amazon CloudWatch est créée automatiquement pour ces métriques.

Conditions et limitations supplémentaires en matière de contrôle des coûts

Lorsque vous gérez votre utilisation et vos coûts Redshift Spectrum, tenez compte des conditions et limitations suivantes :

  • Les limites d'utilisation sont disponibles avec les versions prises en charge 1.0 14677 ou ultérieures.
  • Vous pouvez ajouter jusqu'à 4 limites et actions par catégorie (8 limites au total).
  • Redshift Spectrum est pris en charge uniquement dans les régions où Redshift Spectrum et la mise à l'échelle de la simultanéité sont disponibles.
  • Une seule limite par fonction peut utiliser l'action Disable (Désactiver).
  • Les limites d'utilisation persistent jusqu'à ce que la définition de limite d'utilisation elle-même ou que le cluster soient supprimés.
  • Si vous créez une limite au milieu d'une période, la limite est mesurée de ce point jusqu'à la fin de la période définie.
  • Si vous choisissez des options de journal, consultez les informations dans les journaux STL_USAGE_CONTROL.