Wie kann ich SQL-Abfragen mit psql zeitlich festlegen?

238

Ich möchte einige SQL-Abfragen mit meiner PostgreSQL-Datenbank vergleichen. Gibt es eine Möglichkeit, wie ich SQL-Abfragen zeitlich festlegen kann psql?

Jonas
quelle
4
Weitere Informationen zum Benchmarking von PostgreSQL-Abfragen finden Sie unter: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt,

Antworten:

321

Schalten Sie einfach das Timing ein, indem Sie Folgendes eingeben:

\timing

Caleb
quelle
1
Aus der Bash heraus psqlerlaubt die Option "-c" von diese Einstellung nicht. Sie können dies mit etwas wie: psql --o /dev/null <<EOF \timing select 1 EOF
3manuek
6
Oder machen Siepsql -c '\timing' -c 'select 1'
cdmckay
12

Die zurückgegebene Zeit \timingenthä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 ;

Devi
quelle
1
... das einzige Problem ist, dass Sie nicht die normale Abfrageausgabe erhalten.
17.
2
Verwenden Sie explain analyzeErtragszeiten, die ungefähr doppelt so hoch sind wie die, die ich bei der Verwendung sehe. Dies \timingist das Gegenteil von dem, was ich aufgrund der Kommentare hier zur Netzwerklatenz erwarten würde. Ich vermute, dass es Overhead bei der normalen Ausführung analyzegibt, der die Abfragezeit verlängert. Ich denke, basierend auf den Dokumenten EXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barwerden Sie dadurch mehr nützliche Timing-Informationen erhalten. Weitere Informationen finden Sie unter postgresql.org/docs/9.6/static/sql-explain.html .
Larsks