Je souhaite analyser une requête contenant une fonction définie par l'utilisateur que j'ai écrite pour PostgreSQL. Existe-t-il des méthodes standard pour exécuter un tel point de référence?
Je sais que le timing peut être activé avec \timing
l'invite psql, mais idéalement, j'aimerais avoir un script qui s'occupe de tout automatiquement: lancer la requête plusieurs fois, vider le cache PostgreSQL après chaque exécution (probablement en redémarrant le fichier PostgreSQL service), et la sortie du temps moyen d'exécution (et la mémoire utilisée est un plus).
postgresql
benchmark
Franck Dernoncourt
la source
la source
pgbench
; vous pouvez l'exécuter avec des scripts personnalisés pour faire ce que vous voulez. Avec un script shell pour arrêter et redémarrer Pg et pour supprimer le cache de disque du système d'exploitation, vous disposez de la majeure partie de ce dont vous avez besoin.Réponses:
L'outil le plus utilisé est la commande SQL
EXPLAIN ANALYZE
, avec éventuellement plus d'options pour plus de détails dans la réponse. Cela génère le plan de requête avec les estimations du planificateur et les temps d'exécution réels.Pourquoi voudriez-vous vider le cache? Le cas d'utilisation généralement plus probable est que le cache est rempli. Si vous souhaitez toujours suivre cette voie, voici une réponse connexe sur SO .
Ne pas réinitialiser le cache, voici deux méthodes simples pour tester plusieurs itérations:
UDF simple
Ou avec entrée aléatoire - nombres aléatoires compris entre 0 et 5000 dans l'exemple:
Ou avec une vraie table de vie:
Fonctions / requêtes plus complexes
Appel:
Attention : la requête est réellement exécutée!
Attention : Ne convient pas pour un usage public. Injection SQL possible.
Encore une fois, vous pouvez utiliser des paramètres aléatoires si nécessaire. Peut-être avec la
USING
clause deEXECUTE
.la source