Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Async I/O is NOT supppressed for filesystem datafiles in 8.1.5?

Re: Async I/O is NOT supppressed for filesystem datafiles in 8.1.5?

From: El Toro <medawsonjr_at_yahoo.com>
Date: 28 Dec 2001 17:25:47 -0800
Message-ID: <2e1cd2b.0112281725.5337502d@posting.google.com>


yong321_at_yahoo.com (Yong Huang) wrote in message news:<b3cb12d6.0112281536.59d4eab4_at_posting.google.com>...
> It looks like AIO is indeed used on filesystem based files, but kaio()
> is not. We shouldn't be confused about the terminology. The question
> "is AIO used or not" should be more specific about libaio or kaio.

Again, I'm aware of this. As you'll note in my original posting, I wrote:

". . .I've verified this by running a 'truss' on the DBWR process, noticing all the LWP processes spawned to perform the user-level library AIO after a failed 'kaio()' call (tell-tale signs of AIO)."

It's the spawning of the LWPs, each doing a pwrite64(), that showed me that my 8.1.5 instance was performing AIO against my datafiles. There's no confusion about the terminology here. If I were using raw devices, or Veritas Quick I/O, the 'kaio()' call would NOT have failed.

> >Much later, in the footnotes, the author acknowledges that "Certain
> Oracle
> >8.1 releases suppress AIO use on ordinary filesystem files ".
> Suppress? How?
>
> The logic used was essentially "if file is not character special, then
> use pread/pwrite directly".

AH! Now you're understanding where I'm coming from. THIS is the issue about which I'm posting. Sun, AND Oracle, claim that some versions of Oracle will suppress use of async I/O if it determines that there is a filesystem involved. This is done by using the 'fstat()' call. While no documentation appears to go into any detail about the actual code, I do know that in the stat struct that fstat() returns, there is a member named st_rdev. This member of the structure  ONLY gets initialized to a number if it's used against a special file (character or block). Therefore, I think I can safely assume this is what they use. But back to the main issue. . .

Later documentation from Sun, and Metalink DocID#214480.999, both specify that the 8i releases that will suppress AIO on filesystems are 8.1.5 and 8.1.6. It goes on to read that even if you set disk_asynch_io to 'true', async I/O STILL would NOT be used.

So, imagine my surprise when I trussed my DBWR process, only to find it making libaio calls to my datafiles -- and my Oracle version is 8.1.5! This is throwing my team into a state of confusion, as you might imagine.

And I seriously doubt that Oracle makes a distinction between a local filesystem and an NFS-mounted one (from NetApp). The 'fstat()' call will return info on it as it would for a locally-mounted one. Neither would be characterized as a character or block special file.

I have a ticket open on Metalink, to which an Oracle rep sent me a nonexistent BugId. So the ticket is still open, and I'm awaiting a new response from him.

My purpose in posting this was to see if any of you had discovered this before to determine in what case Oracle *actually* suppresses AIO on filesystems. It appears that there is no such case, despite the claims of both Sun and Oracle docs.

So, if you could, also, please forward this to your knowledgeable friend at Sun, it would be greatly appreciated. My team and I are anxiously awaiting a satisfactory explanation. Thanks in advance. Received on Fri Dec 28 2001 - 19:25:47 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US