Week of Monday 18th February


  • Replaced popovers with modal dialogues - hopefully these will interfere less with people exploring the data, be easier to read from start to finish and possible to copy text from

Week of Monday 11th February

Core logic

  • Added a tip/anti-tip pair to describe whether or not there were trips to the heap on an index-only scan

  • Added a tip to recommend an index-only scan on slow index scans


  • Improved rendering of tree view at higher zoom levels/dpi

  • Tweaked spacing of buttons on input page on smaller screens

Week of Monday 4th February

Core logic

  • Tweaked the logic for when we advise investigating adding an index to speed up a sequential scan, and what information is shown in different circumstances.


  • Improved description of timing to make it clearer that we are showing wall clock time

  • Change wording on operations already running quickly to be more clear this is a positive thing!

  • Change information given when row estimates are perfect to state that this is the case and give a more concise summary of the data

  • Change tips icon to a lightbulb to show this is an opportunity/suggestion to improve 💡

  • Change “no tips” icon to a tick to show that this aspect is currently working well


  • Fixed an issue whereby if the rows produced by an operation and the query as a whole were both zero, the user could receive a tip saying some the rows produced by the operation were unused

  • Fix temperamental link to this changelog

Week of Monday 28th January

Core logic

  • Made it clearer when the app is referring to rows per iteration, and when total rows, in the same way as with times. Also improved the “rows discarded” tip to look at total rows rather than rows per iteration

  • Support for parallel queries: make sure wall clock time rather than cpu time is displayed (and used for calculations), and show the number of threads used.

  • Improve code generation for Aggregate nodes, to specify which functions are being called, eg SUM or MAX

  • Added a tip for slow sorts to suggest an ordered index


  • Improved messaging around errors, particularly unexpected ones and session timeouts

  • Added a new example that showcases some of the new features

  • Reorder the tips so that more specific (hopefully roughly the same as relevant) ones are more likely to appear at the top

  • Improved wording of sequential scan tip to make it clearer what the solution is

  • Tidied up buttons, making them larger and more evenly sized/spaced

Week of Monday 21st January

Core logic

  • Added support for CTE scans, including operation description, code generation and related tips


  • Created changelog and added link from the app

  • Change colour scheme to improve readability, increase emphasis of highlighted elements and reduce glare (night mode)

  • Replaced example query plan with a more realistic one


  • Fixed an issue whereby cache hits/misses for an operation included those of child operations

  • Fixed an issue which caused users trying to navigate to the “explore” results page of the app from a webpage outside the app to be redirected to the initial “input” page of the app

  • Fixed a floating-point issue where loops could be presented as taking eg 0.2159999999999ms

  • Fixed a bug whereby an operation with lots of loops, each of which took a negligible (< 0.0005ms) time, could be described as having negative loop/total execution time

Week of Monday 14th January

Core logic

  • Support for loops: correct operation time calculations, and show time breakdown when an operation is executed more than once (“Actual Loops” > 1)

  • If a Nested Loop node causes a node to be executed a lot, consider it a significant operation, and add a tip to point out it contributes more than is obvious to the query time

  • Improve the “unused rows” tip to be less easily fooled by aggregating together rows, and specify which node is discarding the rows in the advice

  • Show the “bad row count estimate” tip for less incorrect estimates, and include the degree of the error in the advice given


  • Add an indicator (💛) to tree nodes for operations which have a tip

  • Added advice on how to get a query plan using psql

  • Add a link to allow users to submit feedback via email

  • Make the technical information on the operation popover more prominent, and reorder the values to be more readable

  • Colour adjustments to improve legibility

  • Improve wording of operation descriptions


  • Correct bug that meant the “Index Name” field was sometimes not shown in the operation popover

  • Fix a bug that meant that submitting a plan with 0 expected or actual rows would have caused an error

Week of Monday 7th January

Core logic

  • Add descriptions for the different read and join operations (eg sequential/index scan, hash join, nested loop etc)


  • Add routing logic, so browser back/forward buttons work between different plan views and the input view

  • Add a link to allow users to logout

  • Stop annoying horizontal jumping when switching between explore/input views by forcing the vertical scroll bar to appear on both pages


  • Fix an issue whereby, if the generated code for an operation was too long, the information popover would flicker and be impossible to view

  • Fix an issue which would have allowed cross-site scripting attacks if hosted on localhost

  • Fix a UI issue which caused tree node lozenges to be cut off in Firefox

Week of Monday 31st December

Core logic

  • In the operation popover, include an example of the code that the node might represent

  • Add a description of the operation to the operation popover


  • Correct alignment of “advice” icons (💛) with text

  • Show a loading spinny on initial page view, as the javascript is loading.

  • Round off the corners joining the lines on the tree

Week of Monday 17th December

Core logic

  • Add in a graphical view of the operations in the query plan as a tree

  • Add a tip for when the rows produced by an operation do not seem to be used. This replaces the old tip which was shown whenever the number of rows produced by an operation was deemed to be large

  • Stop showing the number of loops for an operation, and show the number of rows returned


  • Allow clicking on an operation in the performance table or tree view to highlight it in both views

  • Remove the advice on how to obtain a query plan using psql

Week of Monday 10th December

Core logic

  • Link to in-depth articles to explain tips in detail

  • Show “anti-tips” - aspects of an operation that are functioning well and don’t need any attention. For example, all the data has been read from the cache, or the row count estimate is accurate

  • Tweaks to how we calculate which operations are worth focusing on to improve query performance.

  • Add a popover for each of the table column headers to explain what the column means


  • Move detailed explanation of tips into a popover to make the tips column less cluttered

  • Sort table initially by ID rather than by time, to make it represent the text query plan

  • Always sort the table rows in their natural order, depending on the column (eg descending when sorted by times, ascending when sorted by ID), rather than allowing sorting in either direction.

  • Add an indicator to show which column the table is currently sorted on

  • Refinement of tip wording