Top 60 Oracle Blogs

Recent comments

June 2008

More WAF please…

I’ll get to the point in a minute…  If you’ve spent any time “working” on setting up a home theater in your home, you’ve come across the WAF acronym in many of forums — it stands for Wife Acceptance Factor — and it is a cautionary tale of making sure you keep your setup easy enough so that you don’t end your marriage over your wife’s inability to enjoy Desperate Housewives because she doesn’t like programming the remote :-)

Back before HDTV and satellite TV it was pretty simple here in the US to set up and watch TV.  Generally there was only 1 cable involved (2 if you count the power cable).  If you bought a cable-ready TV you simply connected the cable from the cable company (RG6 coaxial, which carried both audio and video) into your TV and you were in business.  Moving TVs around your house was pretty simple too.  Oh, maybe you had a converter box to watch some pay channels, but for the most part you were good to go — with maybe 50-75 channels in the larger markets.

Things are getting a bit easier lately, but we’ve had a run of complication which I think has seriously slowed the adoption of HDTV and quality sound — the split of audio and video cables — the larger number of cable choices audio-only (optical, coax, patch); video-only (patch, coax, dvi) and mixed (hdmi) along with wonderful new things to learn about like HDCP and DRM.  None of which has made it any easier to make a TV have a good WAF anymore — let alone move them around your house.

The reason I bring this up is due to the shear number of software offers I’ve been getting lately for products that don’t seem to have a compelling ability to simplify things for me or my customers.  They claim to be “better” at some esoteric task, but at the cost of introducing another specialized skill requirement into my customer’s infrastructure.

I got into an interesting discussion with a virtualization consultant the other day who responded to a customer’s concern about the I/O performance of a database on VMWare by installing Virtuozzo for a special system.  I asked why they did that instead of looking to tune the database I/O or maybe scaling up the VMWare hardware or (gasp!) running the database on a dedicated server.  He replied that he recommended Virtuozzo because they wanted everything virtualized and that they didn’t have budget for tuning or new hardware.

Heck, I like Virtuozzo as a virtualization solution and even I thought this solution was all kinds of crazy.

Why add to the customers’ complexity by introducing yet another virtualization technology instead of helping them reduce complexity while still meeting their needs?  The only beneficiary to this appears to be the consultant who can charge fees to maintain this specialized system.  Or maybe the new employee they had to hire to learn and handle this special system.

Personally I got even more upset when I heard that the customer was a public school system — like a public school system needs internal IT complexity instead of simple, reliable systems that do the best job for them.

One-off’s like this are always a challenge — make sure you have a process by which you approve, manage and judge such efforts — understand when one-offs become your new direction, or when they need to be brought back into the fold.

Another use case for WaitProf – diagnosing “events in waitclass Other”

I recently diagnosed a performance issue where the “events in waitclass Other” occasionally took significant part of the session’s response time. For example Snapper (which reads wait event data from V$SESSION_EVENT) reported that during measuring 39.9% of the response time was spent on “events in waitclass Other”.


Do you hate arbitrary requirements?  You know the ones — like: the customer account number must be a 10-digit number without any leading zeros and no more than 3 repeated digits?  Don’t you always try to argue the user back into letting you use a simple sequence generator — maybe giving in on the leading zero requirement, but arguing against trying to make sure there aren’t 3 of the same digits in a row? :-)

Maybe if you thought there was a good reason, or authority or research on why that requirement was a good idea, then you’d see it as an interesting challenge rather than a burden?  Maybe if you read a post by Seth Godin about it?

Wonder if the user thinks that some of the database limitations are arbitrary?

So, today’s challenge — implement a stored procedure to generate such a serial number…

Killing an Oracle process from inside Oracle

I had a following situation few days ago – I was running a CREATE TABLE AS SELECT over a heterogenous services dblink. However I cancelled this command via pressing CTRL+C twice in Windows sqlplus (this actually just kills the client sqlplus and not the call).

Anyway, when I wanted to drop that table involved, this happened:

SQL> drop table MYTABLE;
drop table MYTABLE
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified

I can’t drop a table as someone is holding a lock on it. Fair enough, this was a dev environment used only by me, so I used DBA_OBJECTS.OBJECT_ID to find out the object ID of that table:

More Mass Market Oracle

Almost exactly one year ago, I wrote about the lack of hosted Oracle database packages.  Since then I haven’t seen much movement on that front, until last week, when STRATO AG, a German hosting company started offering a STRATO Oracle Server hosting package based on Parallels Virtuozzo Containers and Oracle Express Edition.  Here’s the press release.  I’m having a bit of trouble finding the package on the STRATO site, but if it’s true it’s another valuable option out there for ways to increase Oracle usage at the low end (where a lot of innovation takes place).  I’m curious how STRATO is handling the Oracle licensing issues…

cursor_space_for_time To Be Deprecated

If you haven’t seen the Meatlink note 565424.1 in the news yet, cursor_space_for_time parameter will be deprecated in Oracle and
That’s kind of good news, I hope this will eventually reduce the number of expert DBAs who set this parameter to true whenever they see any kind of shared pool / library cache latch contention.
On the other hand, spin_count was made an undocumented parameter long time ago, but is still heavily abused worldwide so I wouldn’t be surprised if the same happens to future _cursor_space_for_time…

Advanced Oracle Troubleshooting Guide, Part 6: Understanding Oracle execution plans with os_explain

Get ready for some more adventures in Oracle process stack!

Before proceeding though, please read this post about safety of different stack sampling approaches.

I have had few non-trivial Oracle troubleshooting cases, related to query hangs and bad performance, where I’ve wanted to know where exactly in execution plan the current execution is.

Remember, Oracle is just another program executing instructions clustered in functions on your server, so stack sampling can help out here as well.

So, I was looking into the following stack trace taken from an Oracle 10.1 database on Solaris SPARC, running a SQL with this execution plan.

Debugger dangers

Whenever I deliver training or conference presentations on advanced troubleshooting topics, I usually spend some time demonstrating how to get and interpret Oracle server process stack traces.

As I’ve mentioned before, stack traces are the ultimate indicators showing where in Oracle kernel (or whatever application) code the execution currently is (or where it was when a crash occurred). This is the reason Oracle Support asks for stack traces whenever there’s a crash or non-trivial hang involved, that’s why Oracle database dumps errorstacks when ORA-600’s and other exceptions occur.

There are multiple ways for getting stack traces for Oracle, but not all ways are equal. Some give you more contextual info, some less, but what I’m blogging about today is that some ways are less safe than others.

Short note on KGX Mutexes

I received a question on what’s the point of the use of Mutexes for Oracle cursors in library cache. For short intro, I’m pasting one of my fairly recent answers in Oracle forums about Oracle mutexes here:
In Oracle, latches and mutexes are different things and managed using different modules. KSL* modules for latches and KGX* for mutexes.
General mutex operatins require less CPU instructions than latch operations (as they aren’t as sophisticated as latches and don’t maintain get/miss counts as latches do).

So, there’s two posts, guess I’m on the blogging bandwagon…

As the subject says, there’s my first two real posts, so, I guess I’m blogging.  I won’t guarantee how active I’ll be here, or how much of what I write will be Oracle, as opposed to other stuff, but, for what it’s worth, here I am.