wuqiSpank

Draw the line.

View project onGitHub

The Problem

Too many database calls is the #1 server side performance problem.

The Solution

Reduce query counts by first visualizing which SQL make repeat visits to the same tables.

wuqiSpank's unique "SQL Sequence Diagram" and live SQL performance graphs make it possible.

howTo

Download and Install

Download and install the wuqiSpank beta release. You can import your SQL from plain text files. Released under Creative Commons Non-Commercial license.

Did you miss CMG 2014?

Here are the slides and the video of the wuqiSpank presentation.

Draw the line!

Who is responsible for software performance? The developers who coded the system or a performance tuning team? It time to finally draw the line of responsbilities of who owns what. With wuqiSpank, we finally have a tool that helps developers understand and take responsibility for the performance of their code's SQL data access strategy.

Are you a DynaTrace user?

Vote here (DT Community Logon required) to get wuqiSpank functionality added to DynaTrace.

Chunky Outperforms Chatty

wuqiSpank aims to help developers address the #1 performance problem in enterprise software (too many calls to DB. This sample code and performance test shows how a 'chunky' SQL data access strategy outperforms 'chatty'. But don't take my word for it, download and run the 5 different samples yourself.

wuqiSpank. Best name ever for a monitoring tool?

We challenge you to find a monitoring tool with a better name than wuqiSpank.

A wuqi is an Unnecessary Query Invocation. But but but what does the W stand for? Woefully. wuqiSpank spanks wuqis. Got it?

3rd Party Dependencies

This project sits on the shoulders of InTrace, FoundationDB, Wicket, and others..

Gallery

The graph on the left, below, shows code with 7 SQL statements, each selecting data from just a single table. The graph of the refactored code, on the right, returns the exact same data, but more efficiently with this single query:
SELECT * FROM CUSTOMER C, ACCOUNT A WHERE C.CUST_ID = A.CUST_ID AND C.CUST_ID IN (SELECT CUST_REL_ID FROM CUST_CUST_REL
         WHERE CUST_ID = 'SPANK-001')

Use EHCache or similar to avoid the performance overhead of querrying for static data you've already retrieved.
The graph below shows SELECT statements pulling data from two tables whose contents change so rarely, their data should be cached at system startup. Wuqispank prominently displays the table names (PHYSICAL_PLANT and PRODUCT) near the circles at the time of the graph, so you can quickly determine whether the activity is appropriate for the give tables.

Wuqispank shows the exact line number that a SQL statement was executed from. The blue rectangle acts like the MS-Excel cursor and the large window at the bottom displays the detail you can't see in a single table cell.

Wuqispank highlights repetetive sequences of the same SQL statements. These are ripe for optimization! (NOTE: wuqiSpank doesn't know how to use a yellow highlighter -- there's that whole issue of opposable thumbs).