Résoudre les problèmes de déversement de mémoire

Cette rubrique explique comment un propriétaire d’entrepôt ou un administrateur peut résoudre les problèmes de débordement de mémoire afin d’améliorer les performances d’une requête.

Les performances se dégradent considérablement lorsqu’un entrepôt manque de mémoire pendant l’exécution d’une requête, car les octets de mémoire doivent être « déversés » sur le disque local. Si la requête nécessite encore plus de mémoire, elle se déverse sur le stockage distant du fournisseur Cloud, ce qui se traduit par des performances encore plus mauvaises.

Note

Vous devez avoir accès à la base de données SNOWFLAKE partagée pour exécuter les requêtes de diagnostic fournies dans cette rubrique. Par défaut, seul le rôle ACCOUNTADMIN dispose des privilèges nécessaires à l’exécution des requêtes.

Recherche de requêtes qui se déversent sur le stockage

Cette requête identifie les 10 pires requêtes offensantes en termes d’octets déversés sur le stockage local et le stockage distant.

SELECT query_id, SUBSTR(query_text, 1, 50) partial_query_text, user_name, warehouse_name,
  bytes_spilled_to_local_storage, bytes_spilled_to_remote_storage
FROM  snowflake.account_usage.query_history
WHERE (bytes_spilled_to_local_storage > 0
  OR  bytes_spilled_to_remote_storage > 0 )
  AND start_time::date > dateadd('days', -45, current_date)
ORDER BY bytes_spilled_to_remote_storage, bytes_spilled_to_local_storage DESC
LIMIT 10;
Copy

Options pour résoudre les problèmes de déversement de mémoire

En cas de problème de déversement de mémoire, vous pouvez convertir votre entrepôt existant en un entrepôt optimisé par Snowpark, qui fournit 16x plus de mémoire par nœud et 10x plus de cache local par rapport à un entrepôt standard. Bien qu’un entrepôt plus grand dispose également de plus de mémoire disponible, une requête peut ne pas nécessiter ses ressources de calcul étendues.

Si vous souhaitez essayer de résoudre le problème de déversement d’une requête sans modifier l’entrepôt qui l’exécute, utilisez le profil de requête pour identifier les nœuds d’opération à l’origine du déversement.

Considérations relatives aux clients

Lorsqu’une requête nécessite davantage de mémoire sans calcul supplémentaire, il est plus rentable de passer à un entrepôt optimisé pour Snowpark que d’augmenter la taille de l’entrepôt.

Voici une comparaison côte à côte de la consommation de crédits pour un entrepôt standard et un entrepôt optimisé pour Snowpark :

Type d’entrepôt virtuel

X-Small

Small

Medium

Large

X-Large

2X-Large

3X-Large

4X-Large

5X-Large

6X-Large

Standard

1

2

4

8

16

32

64

128

256

512

Optimisé pour Snowpark

s/o

s/o

6

12

24

48

96

192

384

768

Comment passer à un entrepôt optimisé pour Snowpark ?

Notez que les entrepôts X-Small et Small ne peuvent pas être convertis en entrepôts optimisés pour Snowpark à moins que vous n’en augmentiez d’abord la taille.

Pour convertir un entrepôt standard existant en un entrepôt optimisé pour Snowpark :

Snowsight
  1. Connectez-vous à Snowsight.

  2. Accédez à Admin » Warehouses.

  3. Recherchez l’entrepôt et sélectionnez » Suspend. Un entrepôt doit être suspendu avant d’en modifier le type.

  4. Sélectionnez » Edit.

  5. Dans la liste déroulante Warehouse Type sélectionnez Snowpark-optimized.

  6. Sélectionnez Save Warehouse.

SQL

Utilisez la commande ALTER WAREHOUSE pour modifier le type d’entrepôt. L’entrepôt doit être suspendu avant d’en modifier le type. Par exemple :

ALTER WAREHOUSE SUSPEND;
ALTER WAREHOUSE my_analytics_wh SET WAREHOUSE_TYPE='snowpark-optimized';
Copy