Ich möchte einige SQL-Abfragen mit meiner PostgreSQL-Datenbank vergleichen. Gibt es eine Möglichkeit, wie ich SQL-Abfragen zeitlich festlegen kann psql
?
Ich möchte einige SQL-Abfragen mit meiner PostgreSQL-Datenbank vergleichen. Gibt es eine Möglichkeit, wie ich SQL-Abfragen zeitlich festlegen kann psql
?
Antworten:
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 aus
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 ;
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ührung analyze
gibt, der die Abfragezeit verlängert. Ich denke, basierend auf den Dokumenten EXPLAIN (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 .