PowerSQL 1.1: true quality coding incorporates performance - be a hero

Not to be outdone by the DB Optimizer 1.0 release this past Tuesday, the PowerSQL team put out a great point release of PowerSQL (within 4 months of the 1.0 release). There are some key additions to this release, including cross platform Explain Plans, Quick Fixes for Oracle, and support for Oracle 11g (keeping with our tradition of database currency).

With this version of PowerSQL, we really want to empower the developer to generate quality code at a level beyond syntactically and semantically validated code - at a level beyond what any other SQL IDE has provided in the past.

Explain plans allow the developer to get a cost estimate on the execution path of the SQL they have created at the click of a button (without ever having to run the SQL). This plan can point to high cost areas within the SQL code that may offer opportunities for optimization. This is an invaluable feature to have at the fingertips of the application developer who is looking to build speed into their code before it gets thrown over the wall for a code review, saving loads of time in terms of iterations on the quality assurance side of the development lifecycle.

To add even more power to the editor, we have included Quick Fixes for Oracle (will be cross-platform in the next release). As you type in the editor, SQL Code Assist is already checking for syntax and semantic (validating object names) errors as you type - now we have added Quick Fixes into the mix. This handy feature looks for code quality and optimization issues as you type, and will flag them with a light bulb or a squiggly yellow underline in real time - we will flag issues such as cartesian products, suppressed indexes, and incompatible data types. AND we suggest best practices that can be implemented with a simple click to transform your code and save you the keystrokes.

It’s a fun exercise to purposefully craft a simple cartesian product, see the light bulb come on, run an explain plan to see the associated cost, fix the cartesian product automatically from the suggested Quick Fix, and then run the explain plan again to see the performance gains. This is the kind of stuff that makes developers into heroes!

Give PowerSQL 1.1 a try and let me know what you think (http://www.embarcadero.com/products/powersql/index.html).

DB Optimizer: essential equipment for the performance guru

My name is Greg Nerpouni, and I am the proud product manager of Embarcadero’s newly released database optimization tool called DB Optimizer.

DB Optimizer is the only product on the market that allows a user to develop, test, profile, and tune in a single, easy-to-use tool. And it accomplishes this with an amazingly clean look and feel - as well as a streamlined work-flow. Despite the fact that yesterday was the official launch date, I have been getting this tool in front of select audiences for the past two months. The response has been overwhelmingly positive, which is a great confidence booster as we take a very deliberate and highly anticipated step into the database optimization realm.

There are a couple key elements that were met with high regard during our beta (and even alpha) development cycles. The first is our use of wait time analysis and the graphical manner in which we represent this method of performance analysis. Wait time analysis is a low cost method of sampling data from database system tables in order to gather statistics on database-specific wait events, telling you exactly where your slow queries or stored routines are getting held up. It is a practical method for quickly discovering bottlenecks, and the way that DB Optimizer graphically represents this data allows for equally quick diagnosis and subsequent optimization - even by those who have never previously considered themselves performance gurus!

Another key element was the ease with which users were able to install DB Optimizer, register a data source, and get to profiling a database within a few minutes. DB Optimizer is an agent-less desktop tool that will help you focus your attention on the problems that will yield the highest performance gains for your efforts, independent of database platform you are running.

I hope you will take DB Optimizer out for a test drive and let me know what you think (http://www.embarcadero.com/products/db_optimizer/index.html).

What are you waiting for?

DB Optimizer 1.0 released today, a major step reaffirming our attention on database performance related issue. Plus yet another product built on Eclipse.

It is hard to believe there is so much power behind something this beautiful. The team has really delivered some great workflow as well. All this adds up to very nice user experience. Give it a try, you will find that there are many ways to partition the performance information that is being presented and find root areas where tuning can be provided. However I personally like to look at the SQL with the greatest number of executions which by the way is conveniently summed by applying some sophisticated predicate analyst and then let the tools automatic tuning capability tell me how to make it faster. It is so easy you quickly forget how hard it was to do that before this tool. Try it for yourself and let me know what you think.

Also I would like welcome all the Embarcaderian visitors to Toronto this week. We have a lot of internal training going on this week which includes some exciting hands on workshops on Wednesday. I suspect a lot of these workshops will be showing up on the web in blog format in blaugust. More on that later.

DBOptimizer is GA on Tuesday the 15th!

There is a lot going on at the moment. The Embarcadero worldwide SC force (Code *and* DatabaseGear) are all gathered in Toronto for training. I should be there but have some other stuff going on at the moment requiring my attention elsewhere.

Greg N, Wassim and the Romanian team have cranked out their 2nd big product this year in DB Optimizer! We are excited as it is a product that reinforces our direction towards true proactive resolution-based software to determine database performance issues. Moreover, it includes all the tooling to help fix the errant problems it detects...while providing solid guidance to developers on the nuances in writing high performant code the first time.

We wrote this in Java, highly leveraging the Eclipse infrastructure as an RCP in this release, with plug-ins forthcoming.

So what did the team build? Well, DB Optimizer can be more or less broken down into three core bodies of functionality:

1) A powerful SQL IDE: We built this on the PowerSQL code to ensure the whole product fundamentally had a killer SQL IDE underlying it to start with. Once developers start extracting SQL to tune or profiler. we wanted them using the best tooling for SQL development, and PowerSQL is its kissing cousin also built on Eclipse so it fit naturally.
2) Database profiling: This is entirely new, built from the ground up profiling leveraging each of the database platforms (Oracle, Sybase, SQL Server and DB2) access points to gain critical wait time analytical data to truly zero in on the source of a database's performance degradation.
3) SQL Tuning: This release will be Oracle only with other platforms rolling out in succession. Users will be able to do some really productive things like batch tuning a collection of SQL scripts.

Ultimately we created a really easy to use product with truly clever UI approaches to ensure familiarity across all of the database types the product supports. Download DB Optimizer from our products page on the 15th. I'll have some deeper dive demos and other forthcoming Q and A's with Greg N in the days to come.

Uprising

Apologies for the lack of posts. You may flog me at the next trade show, meeting, airport…wherever we meet up next. Things have been hectic both professionally and personally for me so the ability to stay focused for 10 minutes to dump out thoughts on my blog have been few and far between.

By now you’ve heard about our successful closing of the acquisition of the CodeGear tools division from Borland. To say we are excited is a true understatement. I think my new team mate Michael Swindell said it best in his blog post, commenting about the close, but more specifically about the opportunity the company has to lead the industry in manufacturing the world’s premier independent tooling for software professionals. Maybe it’s the season with the 4th of July upon us (here in the US that is...), but the independence factor is so utterly intriguing to me to continue pushing on for our customers that I am now frothing at the mouth.

I look at companies like ours and the users of our wares like modern day artisans (all puns intended..) or craftsman. But whereas a craftsman in the late 19th century could have forged a name and a trade in a medium such as iron or wood, modern day software professionals simply do not have that luxury…or specificity. An old boss of mine used to call situations like that ‘CLMs’ or Career Limiting Moves. You embrace something tightly…like a specific segment of technology…and before you know it you are a dinosaur. Your skill set is outdated and your inefficiencies become obvious fairly quickly.

So the opportunity is to keep inventing for our customers. Keep providing ways our users can obtain the breadth they need to manage against a variety of ‘platforms’ (this could mean languages, OSs, lifecycles & methodologies, large vendor stacks like Microsoft or Oracle and more) but also provide depth (e.g. all of what you would need to be effective against your platform….but tooled in a way that is understandable and downright instructional). I scan around the industry and there isn’t anything quite like us given the types of products we offer and more importantly more than 3 million users who truly believe in the products and had a lot to do in their creation. Continuing to tap into that resource base will be huge to ensure we are ahead of the curve…anticipating what users will want to ensure they gain a competitive edge….and a leg up that their job roles will be enriched by learning new technologies in a familiar and trusted way.

This brings me to some more personal things: I’ve had a job role change! For the last 3 years, I have served at the company’s vice president of product management. An amazing job to have, blessed with an amazing team who got it done every day and continue to do so with a larger team of PM’s and product marketing pros Michael Swindell will now lead up. Moving forward, I will be Embarcadero’s Chief Evangelist, splitting duties with my cohort in crime, David I. I’ll handle the DatabaseGear side of the biz, David I, CodeGear’s. I've never worked in a marketing capacity, but this is a dream job! Above, I speak of tapping into our most valuable resource: our customer base. The core of what I need to do going forward is to ensure the customers know what we’re up to intimately while tapping into their knowledge and turning that massive information pool back into the company’s R & D machinery to produce next generation product. At the end of the day, I can’t help cheer leading and inspiring those to continue to push on and do great things…to be great leaders in our community. I’ve always been that way and Wayne’s asked me to go and take this even deeper. I need to grow the community. Build out the Developer Network platform to accommodate DatabaseGear customers and anyone interested in database technologies. Wax poetic on the cool stuff we’ve got brewing in R & D. Research new stuff that may affect the job role of a data management professional. Sweet.


I’ll be preaching the Embarcadero gospel. See you in church sometime.
EA/Studio DBArtisan Rapid SQL Data Modeling ER/Studio Business Process Modeling BPMN Embarcadero Technologies CodeGear Delphi JBuilder

CM/Data Selective Compare

One of the hidden gems of CM/Data is the selective compare feature in which users can specify a where clause to filter data in a table to compare. Common uses of this include:

  • Focus on data created or updated recently (e.g. Create_Date is in the previous seven days
  • Include only reference data (e.g. Is_Ref_Data is true)
  • Compare data by a related table (e.g. Country_ID = 0 or Office_Code = 'TOR')

But when focusing on data, sometimes the column isn't quite so obvious or is tables away. When things get very complicated you can always opt to create a view, but consider this example:


In the above schema, the Customer table refers to Regions which in turn refer to Country entries. Now, suppose I only wanted to compare Canadian customers, I could write a selective compare where clause listing each of the 13 provinces and territories, but I'm certainly not going to do that for the 50 U.S. states.

The answer lies in using a SQL subquery, and Brad gets full credit for coming up with this:

Above, we've specified that we only want to compare rows in Customer that have Region_ID values in the set of Canadian regions. The above example is fairly straightforward but with the size and volume of data in centres around the world, focusing in on what you really want to compare and synchronize can save valuable time and effort.