]> granicus.if.org Git - postgresql/blobdiff - doc/src/sgml/perform.sgml
Update discussion of EXPLAIN to reflect existence of ModifyTable nodes.
[postgresql] / doc / src / sgml / perform.sgml
index d4ac40df22c257ce1711d9908d120292cada6477..72baad27f132f9b3c1fc58a508641fadf4487d7e 100644 (file)
@@ -430,18 +430,27 @@ WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2;
 
    <para>
     The <literal>Total runtime</literal> shown by <command>EXPLAIN
-    ANALYZE</command> includes executor start-up and shut-down time, as well
-    as time spent processing the result rows.  It does not include parsing,
-    rewriting, or planning time.  For a <command>SELECT</> query, the total
-    run time will normally be just a little larger than the total time
-    reported for the top-level plan node.  For <command>INSERT</>,
-    <command>UPDATE</>, and <command>DELETE</> commands, the total run time
-    might be considerably larger, because it includes the time spent processing
-    the result rows.  For these commands, the time for the top plan node is
-    essentially the time spent locating the old rows and/or computing
-    the new ones, but it doesn't include the time spent applying the changes.
-    Time spent firing triggers, if any, is also outside the top plan node,
-    and is shown separately for each trigger.
+    ANALYZE</command> includes executor start-up and shut-down time, but not
+    parsing, rewriting, or planning time.  For <command>INSERT</>,
+    <command>UPDATE</>, and <command>DELETE</> commands, the time spent
+    applying the table changes is charged to a top-level Insert, Update,
+    or Delete plan node.  (The plan nodes underneath this node represent
+    the work of locating the old rows and/or computing the new ones.)
+    Time spent firing triggers, if any, is charged to the Insert,
+    Update, or Delete node, and is also shown separately for each trigger.
+    Note, however, that deferred triggers will not be fired until end of
+    transaction and are thus not accounted for in the output of
+    <command>EXPLAIN ANALYZE</command>.
+   </para>
+
+   <para>
+    There are two significant ways in which runtimes measured by
+    <command>EXPLAIN ANALYZE</command> can deviate from normal execution of
+    the same query.  First, since no output rows are delivered to the client,
+    network transmission costs and I/O formatting costs are not included.
+    Second, the overhead added by <command>EXPLAIN ANALYZE</command> can be
+    significant, especially on machines with slow <function>gettimeofday()</>
+    kernel calls.
    </para>
 
    <para>