Ich möchte einige SQL-Abfragen mit meiner PostgreSQL-Datenbank vergleichen. Gibt es eine Möglichkeit, wie ich SQL-Abfragen zeitlich festlegen kann psql
?
postgresql
benchmark
psql
Jonas
quelle
quelle
Antworten:
Schalten Sie einfach das Timing ein, indem Sie Folgendes eingeben:
\timing
quelle
psql
erlaubt die Option "-c" von diese Einstellung nicht. Sie können dies mit etwas wie:psql --o /dev/null <<EOF \timing select 1 EOF
psql -c '\timing' -c 'select 1'
Das Timing kann mit
\timing
der psql-Eingabeaufforderung aktiviert werden (wie Caleb bereits sagte).In Version 8.4 oder höher können Sie optional ein Ein / Aus-Argument hinzufügen.
\timing
Dies kann hilfreich sein, wenn Sie das Timing in .psqlrc aktivieren möchten. Sie können dies dann\timing on
explizit in einem Skript festlegen, in dem plain\timing
andernfalls umschalten würde es ausquelle
Die zurückgegebene Zeit
\timing
enthält auch die Netzwerklatenz, wenn Sie eine Verbindung zu einem Remoteserver herstellen.Wenn Sie dies nicht möchten und auch keine Abfrageausgabe benötigen, verwenden Sie besser
EXPLAIN ANALYZE
, die den Abfrageplan mit den Planungsschätzungen und den tatsächlichen Ausführungszeiten ausgibt.zum Beispiel,
EXPLAIN ANALYZE SELECT foo from bar ;
quelle
explain analyze
Ertragszeiten, die ungefähr doppelt so hoch sind wie die, die ich bei der Verwendung sehe. Dies\timing
ist das Gegenteil von dem, was ich aufgrund der Kommentare hier zur Netzwerklatenz erwarten würde. Ich vermute, dass es Overhead bei der normalen Ausführunganalyze
gibt, der die Abfragezeit verlängert. Ich denke, basierend auf den DokumentenEXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM bar
werden Sie dadurch mehr nützliche Timing-Informationen erhalten. Weitere Informationen finden Sie unter postgresql.org/docs/9.6/static/sql-explain.html .