I've been around the block enough times to see that the bricks look the same. I have seen the same performance issues repeated at untold companies with the biggest issue being identification and performance tuning for Java applications.
To be specific, it is the Java communications with DB2 for z/OS that has profoundly perplexed me and my z/OS colleagues. Java, from my perspective, has sometimes been a performance nightmare on z/OS systems. By using the Distributed Data Facility (DDF) for communication, we use a one-size-fits-all approach by using a single Workload Manager service policy. This isn’t because we want to, but because we have to. To make matters worse, these connections come in sufficiently generic that there is NO WAY to figure out what Java application created this thread or multiple threads.
I can't tell you the number of times I would hear a Java programmer wander into my cube and tell me that they have a problem but they don't know where it is. "..Jeff, can you look at...” in which case I'd say, "STOP! Look at what? A thread? I have hundreds of them. Which one?". And you wonder why DBAs get a reputation as being difficult to work with! But that is another story...
Recently, I joined the IBM Data Studio Enablement team. One of our charters is to articulate the value of Data Studio, pureQuery, DB2 Optimization Expert, and a few other tools. OK, I am an old "green screen" guy. A teammate accused me of not embracing our products to which I answered that I am reluctant to jump on any bandwagon unless I see a true value - Not just as an IBMer, but as a z/OS DB2 System Programmer. How can I "sell" a product if I am not "sold" on the value myself?
Guess what? I found the product combination that is going to change the way Java and DB2 for z/OS work in performance. It is Data Studio Developer with pureQuery. Why? Because I can now uniquely identify the Java thread correlation ID with a unique name which means I can now see it on OMEGAMON for DB2 and I can redirect this work to a service class in Workload Manager specifically used for Java work. (See this demo for an example of how you can see the unique names in OMEGAMON.)
The tooling in Data Studio Developer allows the programmer to quickly develop the Java structures necessary to access DB2 for z/OS. In addition, Java application developers can now easily bind a package, which accesses DB2 for z/OS, used by the Java application. Finally!! We’ve had this DB2/application access technique forever with COBOL using CICS. Now we have it with Java, too.
As a result of having a statically-bound package for Java code with a type 4 driver, I can now set up a Workload Manager service policy for Java DB2 calls as it passes through subsystem type DDF using a PK rule. To go one step further, WLM could be set up with a JAVAHIGH and a JAVALOW service classes. Then, these classes can be prioritized, have a time goal applied for period 1 and a velocity goal applied for period 2. Then, using the naming rule PK for package name, these service classes can be referenced to specific service classes.
Not too many products really flip my switch, but this combination of Data Studio Developer and Data Studio pureQuery Runtime is one of them. Dynamic SQL tuning with Java and DB2 for z/OS has been my nemesis for a very long time. pureQuery gets Java code as close to "well-tuned" as I have ever seen. I would recommend Data Studio Developer and pureQuery to anyone struggling with an out-of-control distributed environment going against DB2 for z/OS as the DB-tier.
-- Jeff Sullivan