Les performances de mes requêtes et les performances générales de mon cluster se dégradent après une période de maintenance dans Amazon Redshift.
Brève description
Lors d'une mise à niveau de version, Amazon Redshift efface son cache de requêtes et son cache de compilation. Lorsque vous exécutez une requête pour la première fois après la mise à niveau, le temps de compilation est plus long. Cependant, les performances s'améliorent progressivement à mesure qu'Amazon Redshift reconstruit son cache.
Amazon Redshift ne modifie pas les versions de cluster pour toutes les actions de la fenêtre de maintenance. Pour identifier les modifications de version, consultez la colonne redshift_version dans la table SYS_QUERY_HISTORY.
Pour plus d'informations sur les types de caches dans Amazon Redshift, consultez la section Mise en cache des résultats et Code compilé. Pour plus d'informations sur les performances des requêtes, consultez la section Facteurs influant sur les performances des requêtes.
Résolution
Analyser les performances des requêtes avant et après la maintenance
Identifiez les requêtes exécutées avant et après la maintenance. Vous pouvez utiliser la console de surveillance des requêtes ou la vue système SYS_QUERY_HISTORY.
Pour rechercher les 20 dernières requêtes utilisateur, exécutez la requête suivante :
SELECT * FROM sys_query_history
WHERE user_id>1
ORDER BY start_time desc
limit 20;
Dans la sortie, utilisez la colonne user_query_hash pour comparer les requêtes avec le même texte de requête. Vous pouvez également utiliser generic_query_hash pour comparer des requêtes dont le texte est similaire mais dont les littéraux sont différents.
Pour voir chaque exécution d’une requête spécifique au cours des 7 derniers jours, exécutez la requête suivante :
SELECT * FROM sys_query_history
WHERE user_query_hash = 'ExampleText'
ORDER BY start_time desc;
Remarque : Remplacez ExampleText par la valeur de hachage de la requête.
Dans la sortie, comparez la valeur de compile_time entre différentes exécutions. Le temps de compilation d'une requête que vous avez exécutée immédiatement après la maintenance peut être plus long.
Pour réduire les temps de compilation, planifiez l'exécution des requêtes clés après la maintenance ou préparez les requêtes critiques en dehors des heures de pointe.
Remarque : Le moteur d'exécution des requêtes compile différents codes pour les protocoles de connexion Java Database Connectivity (JDBC) et Microsoft Open Database Connectivity (ODBC). Si vous avez deux clients qui utilisent des protocoles différents, les frais liés à la première compilation du code sont à la charge de chaque client. Cependant, les clients qui utilisent le même protocole partagent le code mis en cache. Lorsque vous utilisez JDBC pour vous connecter au cluster et exécuter une requête, Amazon Redshift enregistre le cache uniquement pour les connexions JDBC. Si vous exécutez la même requête sur un client qui utilise ODBC, Amazon Redshift génère un autre cache pour la connexion ODBC.
Résoudre les problèmes
Parfois, lorsque les compilations de requêtes révèlent peu de différence avant et après la maintenance, un problème de performances indépendant peut survenir. Utilisez la console de surveillance des requêtes et des bases de données pour surveiller les pics inhabituels des métriques. Comparez les temps de compilation pour identifier la source du problème.
Si vous ne trouvez aucun pic mais que le problème persiste, créez une demande de support.
Informations connexes
SVL_COMPILE