Archive

Archive for January, 2014

Delphix success and Paternity Leave

January 27th, 2014

73557821_e1b210395c

photo by Steve Jurvetson

I’m off on for a couple weeks for paternity leave! Actually started on Saturday night a week ago with the beautiful, stressful, exciting, fast birth of our second son. What a gift. :)

I’m  sleep deprived and busy helping with two kids now, thus I”m not blogging these two weeks. On the other hand this past week has been an awesome week in the press for Delphix and I wanted to pass a few tid bits of what’s been happening.

First Forbes Magazine Names Delphix One of America’s Top 25 Most Promising Companies of 2014. Super exciting.  The article also sites that Delphix

 has  also been named a Gartner Cool Vendor of 2013, one of TechTarget‘s Top Ten Virtualization Companies in 2014, one of the DBTA Top 100 Companies that Matter Most in Data, a Red Herring Top 100 Global winner and a winner of the IET Innovation Award. The San Francisco Business Times also named Jedidiah Yueh CEO of the Year in 2013.

Second, the San Jose Mercury had a great interview with  Delphix CEO Jedidiah Yueh, on building apps faster

Already a huge success from the first company he founded, Avamar of Irvine — which he sold for $165 million in 2006 — Jedidiah Yueh is on a roll again. His Menlo Park-based Delphix, which he founded in 2008, has tripled its sales over the past couple of years and boasts customers ranging from Facebook and eBay (EBAY) to Comcast and IBM.

Third Delphix was sited as one of 20 amazing companies founded during the financial crises and went on to blossom as the economy has begun to strengthen:

“Scarcity of capital is like draught season in the Serengeti,” says Jed Yueh, CEO of  Delphix, which develops database software that helps reduce processing time and storage requirements. The company has raised $45.5 million from Greylock Partners, Lightspeed Venture Partners and others. “As conditions improved, companies that survived benefitted from having fewer competitors. Or in our case, it’s one of the reasons we still don’t have any direct competitors,” he says.

 

kyle_n_bayden

Uncategorized

Database as a Service

January 15th, 2014

Concept of Hand with Electronic Fingerprints

by Chris Fuller and Kyle Hailey

To improve infrastructure and DBMS software utilization, and to drive greater IT operational productivity, companies are implementing internal DaaS capabilities to address their database needs.

Screen Shot 2014-01-15 at 11.17.58 AM

 

Without DaaS problems arise where  project teams hoard.  They always ask for more, and they never give back.  They also never tell DBAs which databases they’re hoarding and which ones they are actually using. As Gene Kim, author of The Phoenix Project puts it

you have to wait months or quarters to get a test environment.  When that happens terrible things happen. People actually horde environments.  They invite people to their teams because they know they have  a reputation for having a cluster of test environments so people end up testing on environments that are years old which doesn’t actually achieve the goal.”

Over subscriptions & Perceived Instability

To counteract low asset utilization, many organizations oversubscribe their DBMS servers, which can create significant performance issues and undermine long-term DaaS adoption objectives.

Screen Shot 2014-01-15 at 11.26.23 AM

As oversubscribed databases compete for finite server resources, poor performance is experienced by all, resulting in the perception that the service is “unstable.”

However, with up to 50% of databases not in active use, an “All-and-Everything” approach leads to a very inefficient use of CPU, memory, DBMS software, storage and datacenter facility resources.

Database-as-a-Service with Delphix

Delphix transforms the economics of DaaS and eliminates the risks of oversubscriptions by enabling a “concurrent use” model, where databases not in active use are simply held in Delphix, increasing DBMS server utilization by 2X or more.

Screen Shot 2014-01-15 at 11.28.31 AM

Some customers have also used Delphix to consolidate environments. Compared to physical databases, VDBs are far more agile and easy to provision, de-provision or move across servers.  You can take underutilized hardware and consolidate databases easily thus increasing hardware utilization and  reducing database license costs in some cases.

Example

Normally, you might have multiple test environments for each source database reflecting the various database versions and hardware configurations for compatibility testing.

Things are different with Delphix.

Delphix connects to a  production server and collecting all the changes that it uses to create on demand virtual databases.

Delphix  also registers  target machines that can be used to run virtual databases (VDB).  IN this example, each target reflects a different configuration that needs to be tested.

In this situation you can you can just provision VDBs to the associated test environment, conduct the testing, and then disconnect or de-provision the VDB.

Customers have done just that and cut HW costs while also reducing DB license costs by 30%.

 

Project Savings and “Plug-and-Play”

Portfolio and/or project teams achieve significant savings from their perspective by only subscribing to the “host” databases that they need.

Screen Shot 2014-01-15 at 11.38.31 AM

Delphix VDBs are simply swapped in and out of their host databases as necessary in minutes, not the hours or days that it typically takes to refresh or reload databases.

Project Team Agility Included

As important (if not more) are the data agility benefits that Delphix provides to project teams, enabling them to deliver releases and enhancements 20%-50% faster more with higher quality.

Screen Shot 2014-01-15 at 11.40.50 AM

Summary

Delphix changes the conversation between project teams and DaaS Administrators entirely.  It’s not, “how many databases do you need to host” its “how many concurrent environments do we need to provide.” The risk due to oversubscriptions disappears entirely.

With Delphix, companies will significantly reduce their HW, SW, and facility costs related to DaaS by up to 50%, while providing their project teams with the agile data capabilities they need to meet aggressive budgets and milestones.

Screen Shot 2014-01-15 at 11.41.55 AM

  • 30% fewer servers
  • 50% fewer DBMS Licenses
  • 90% less storage
  • 30% less floor- space
  • 30% less power
  • 20% to 50% improved project team productivity.

 

Uncategorized

Monitoring Application TCP traffic on Mac

January 6th, 2014

viamoi

photo by Stuart Williams

My internet provider said my service was degraded due to the large amount of data uploading from my computer. As far as I knew, my computer wasn’t uploading anything but I didn’t know how to prove it.

I decided to try and write a DTrace program to look at it. (I also installed “Little Snitch” which seems pretty cool).

One problem with using DTrace on TCP on a Mac is a lot of the providers and provider information I‘m use to on Solaris isn’t on the Mac. Another problem is that when receiving data, the program shows up as kernel_task instead of the program that the data was mean for. To get around this I did two things. One I recorded which program was using which IP when sending data and I also used some code from  a program by Brendan Gregg to track which programs connected on which IPs

#!/usr/sbin/dtrace -s
#pragma D option defaultargs
#pragma D option quiet
inline int af_inet = 2;         /* AF_INET defined in bsd/sys/socket.h */
inline int af_inet6 = 30;       /* AF_INET6 defined in bsd/sys/socket.h */

dtrace:::BEGIN
{      TITLE = 10;
       title = 0;
       walltime=timestamp;
       printf("starting up ...\n");
       procs["0"]=" ";
}

/* syscall::connect stuff from Brendan Gregg
   http://dtracebook.com/index.php/Network_Lower_Level_Protocols:soconnect.d#Mac_OS_X
*/
syscall::connect*:entry
{
        /* assume this is sockaddr_in until we can examine family */
        this->s = (struct sockaddr_in *)copyin(arg1, sizeof (struct sockaddr));
        this->f = this->s->sin_family;
}
syscall::connect*:entry
/ this->f == af_inet
/
{
        this->a = (uint8_t *)&this->s->sin_addr;
        this->addr1 = strjoin(lltostr(this->a[0] + 0ULL), strjoin(".",
            strjoin(lltostr(this->a[1] + 0ULL), ".")));
        this->addr2 = strjoin(lltostr(this->a[2] + 0ULL), strjoin(".",
            lltostr(this->a[3] + 0ULL)));
        self->address = strjoin(this->addr1, this->addr2);
        self->start = timestamp;
}
syscall::connect*:return
/self->start/
{
        procs[self->address]=execname;
        printf(" --> %-16s %s \n", execname, self->address );
        self->address = 0;
        self->start = 0;
}

tcp:::send, tcp:::receive
/   title == 0 /
{   printf("     %9s %8s %8s  \n",
        "delta"    ,
        "send" ,
        "recd"
      );
     title=TITLE;
}

tcp:::send
{    delta=timestamp-walltime;
     walltime=timestamp;
     printf("send %9d  %8d < /   %8s %-15s %s\n",         delta/1000,         args[2]->ip_plength - args[4]->tcp_offset,
        "",
        args[2]->ip_daddr       ,
        curpsinfo->pr_psargs
      );
     procs[args[2]->ip_daddr]=curpsinfo->pr_psargs;
     title--;
}

tcp:::receive
/   args[2]->ip_saddr   != "127.0.0.1"  && procs[args[2]->ip_saddr] == ""  /
{     delta=timestamp-walltime;
      walltime=timestamp;
      printf("recd %9d  %8s > \   %-8d %-15s %s (missing proc name) \n",
        delta/1000,
        "",
        args[2]->ip_plength - args[4]->tcp_offset,
        args[2]->ip_saddr       ,
        execname
      );
}

tcp:::receive
/   args[2]->ip_saddr   != "127.0.0.1"  && procs[args[2]->ip_saddr] != ""  /
{     delta=timestamp-walltime;
      walltime=timestamp;
      printf("recd %9d  %8s > \   %-8d %-15s %s\n",
        delta/1000,
        "",
        args[2]->ip_plength - args[4]->tcp_offset,
        args[2]->ip_saddr       ,
        procs[args[2]->ip_saddr]
      );
    title--;
}

The output looks like


     elapsed  send    recd  IP           program
send     34    49 < /      74.125.239.35 kernel_task
send  58276    49 < /      74.125.239.35 Safari
send  87468    49 < /      74.125.239.35 Safari
send 255594    49 < /      74.125.239.35 Safari
recd  46989       > \ 8241 74.125.239.35 Safari
send     69    49 < /      74.125.239.35 kernel_task
recd  36360       > \ 8113 74.125.239.53 WebProcess
send     28    49 < /      74.125.239.53 kernel_task
send   4751 65393 < /       74.125.20.84 WebProcess

Still missing some of the program names Would be nice if something like this would work

dtrace -n 'mib:::tcpInDataInorderBytes { @[execname] = sum(args[0]);}'

but mibs don’t seem to be implemented on the Mac.

So all in all “Little Snitch” seems much better, but it’s pay for package, and DTrace, at least as far as I have been able to use it, is a bit lacking.

I’m sure someone out there could but together a more useful DTrace TCP script for the Mac. Looking forward to any revelations people might have.

I once heard the quipped “you ask for hamburger and complain when I give you steak” when someone complained about not wanting to learn DTrace and just wanting to use a standard tool. I’d say instead of steak for hamburger it’s more like someone gives you a whole side of beef hanging on a hook when someone is just asking for a hamburger, or maybe like giving you the whole cattle when just wanting a hamburger. It’s often a lot of work to get to the hamburger, or steak, from there, though with some insight, especially into the kernel code, one can do amazing things.

 

 

Uncategorized

Critical importance of data visualization

January 3rd, 2014

 

 

10214063904_6c6cfc7dfc_z

photo by David Blackwell.

Not sure if you can imagine or have ever experienced a meeting where you bring in your statspack or AWR report, all 30 pages of it, point out some glaring issues that anybody could see and proposed some precise solutions, only to have the management team’s eyes glaze over. Then after you finish your pitch they all start arguing as to what the problem might be despite your clear presentation of the problem and solution.
Have you ever had that same meeting with a printout of top activity from Oracle Enterprise Manager, with it’s load graph of average active sessions and it’s break down as to where the load comes from in terms of CPU and waits and what the top SQL and Session are, and then you explain the problem and solution and they all nod their heads?
Clear presentation of data using graphics are critical to how fast people can understand the information and how comfortable they are in interpreting the information.

 

Screen Shot 2013-12-30 at 12.04.52 PM

 

Edward Tufte wrote a seminal analysis of the decision to launch the space shuttle on January 28, 1986. Some have been critical of the analysis but for reasons that are orthogonal to what I find important . What I find important is the shockingly huge impact the presentation format of data can have on the the viewers interpretation.

On the night before the shuttle launch, the engineers  who designed the solid rocket boosters were concerned that it would be too cold to launch. Cold was an issue because the joints in the solid rocket booster were a type of rubber which becomes stiffer the colder it is. As the rubber became stiffer, it’s capability to seal the joints declined and it increased the danger of solid rocket fuel burning through.

Screen Shot 2013-12-30 at 12.05.04 PM

 

The engineers stayed up late putting together information and faxing it out to the launch control in Florida. The engineers were concerned and trying to prevent the launch the next day. The engineers had information about the damage to the solid rocket boosters from previous flights. On previous flights the rocket boosters  were collected and analyzed for damage after they fell back to the ocean after each launch.  The engineers used this data to show how in past launches that  damage had been related to temperature  on the solid rocket boosters.

Here is a fax showing  the “History of O-Ring damage on SRM field joints:

Screen Shot 2013-12-30 at 12.05.13 PMThe first problem as Tufte points out is that this fax uses three different naming conventions for the data from previous launches which is confusing. Circled in red are the 3 different naming conventions, date, flight# and SRM #

Screen Shot 2013-12-30 at 12.05.22 PM

The fax gives overwhelming detailed information on the damage but no information on the temperatures and the goal was to show a correlation between temperatures and damage.

The next fax shows temperatures but missing many of the damaged flights and includes damage from test fires in the desert that were test fired horizontally not vertically nor with the same stresses  as actual flight.

Screen Shot 2013-12-30 at 12.06.07 PM

 

Finally the inclusion of  tangential data and the exclusion of other data led the comment that there was damage at the hottest flight and the coldest flight.

Screen Shot 2013-12-30 at 12.10.14 PM

 

But the conclusions in the faxes were clear. Estimated temperature at launch was to be 29-38 degrees and the shuttle should not be launched below 53 degrees

Screen Shot 2013-12-30 at 12.10.35 PM

If we take the data that was faxed and plot the number of damage incidents at the temperature which they occur we get a graph like

Screen Shot 2013-12-30 at 12.11.43 PM

 

Based on this information do you think there is a correlation between temperature and damage? Would you have launched the shuttle the next day? Remember that there was tremendous pressure to launch the next day.

Well they did launch and the rest is history. As seen in the picture below there is a white flame coming from one of the o-rings in the solid rocket booster. This flame burned into the liquid fuel and the space shuttle exploded.

Screen Shot 2013-12-30 at 12.11.10 PM

 

It was a national tragedy which led to a congressional investigation. As part of the congressional investigation, the information was drawn up in to graphics.  The  graphics were actually worse than the original faxes because they introduced so much chart junk.

Screen Shot 2013-12-30 at 12.11.18 PM

Screen Shot 2013-12-30 at 12.11.36 PM

 

OK, lets look back at the original data

Screen Shot 2013-12-30 at 12.11.43 PM

Now let’s take that data and change the y-axis to represent not a simple count of damage but a scale of how bad the damage was, and we get

Screen Shot 2013-12-30 at 12.11.51 PM

 

Now include the flights that had no damage, a major piece of information, which makes a huge difference already

Screen Shot 2013-12-30 at 12.11.57 PM

 

Now mark damages of a different type of a different color which is only the one that occurred at 75 degreeScreen Shot 2013-12-30 at 12.12.04 PM

Now at 70 degrees there were both successes and failures, so normalize (average) the damage there

Screen Shot 2013-12-30 at 12.12.11 PM

 

Now we are starting to see some important information

 

Screen Shot 2013-12-30 at 12.13.16 PM

 

We are also starting to see a stronger indicator of correlation

Screen Shot 2013-12-30 at 12.13.24 PM

 

But probably the most important piece of information is still missing – the temperature at which the launch the next day would take place:

Screen Shot 2013-12-30 at 12.13.30 PM

 

X marks the spot of the predicted launch temperature for the next day, January 28, 1986. The launch the next day was well outside the known world. It was so far it out,  that it was almost as big a leap away from the known world as the size of the known world of data was.

In summary

  • NASA engineers, they guys that blew us away putting a man on the moon, can still fail at communicating data clear.
  • Congressional investigators, some of the top lawyers in the country, can still fail at communicating data clearly.
  • Data visualization seems obvious, but it is  difficult.

but lack of clarity can be devastating

Further reading

 

stevej

photo by Steve Jurvetson

graphics

Importance of Feedback

January 2nd, 2014

 

4386925065_1ef4a396b8_z

photo by  Idaho National Laboratory

The human brain works so well because it calculates outcomes as it takes actions feeding back the current results compared to the expected results  which allows immediate corrections if the two are not aligning.

Such a immediate comparison between expected results and actual is an important functionality to include into software in order to have the best results especially when it comes to usability and user friendliness. Such faster pace feedback is one of the motivating factors of agile development and continuous integration.

Software that doesn’t give any feedback until a job is supposedly finished is setting itself up for at worst failure or at least wasted time and effort. As  Cary Millsap recounts in one of his presentations “imagine practicing your put and after you hit the ball you have wait an hour to find out where your ball went.” That would make it tough to learn how to put better.

Here is a nice video that helps get this point across. The first two examples are visual. Go to 16:50 for a more typical programming code task, binary search.

Bret Victor – Inventing on Principle from CUSEC on Vimeo.

Thanks to John Beresniewicz for the link.

Another good reference on the subject of how the brain works “On Intelligence“. Thanks again to John for introducing me to this book.

Some of the ideas are the ideas that John and I wanted in Oracle Enterprise Manager in 10g. At  the time the means we had were limited.  When John and I first arrived at Oracle to work on Enterprise 10g, the only graphics  in the product were PNG images. There was no interactive jquery, no flash, no SVG. After much arguing we were able to get SVG in, but still the design work was limited mainly because of political factors. It’s amazing that there is so much political (ie non-empirical) argument about  creating interactive feedback driven interfaces. Sure they are more work but that work is well worth it.  Time are changing though especially with html5 and jquery and the future looks exciting.

Uncategorized