Re: filesystemio_options setting
Date: Wed, 14 May 2008 15:54:48 -0400
> Directio and asyncio are commonly confused. Its my understanding that the >VxFS supports directio but not async, unless you have the ODM or QuickIO option$.
It is my understanding as well that VxFS does not support async IO (and I have verified this with truss on Solaris 9/10), but it does support DirectIO natively if filesystemio_options is set to either setall or directio. However, ODM and/or quickIO does not allow async IO. It's a way of allowing writes to the filesystem to act like it's writing to raw devices, which is effectively the same as directio. In my testing it's faster to use SETALL on Solaris and VxFS than to use ODM. Plus it's free :)
Async IO is never supported with VxFS, but is implemented somewhat through the LWP processes mentioned elsewhere in this thread. It's not necessarily a fast way of working with data depending on what your app is doing (e.g. I've tested writing LOB's through this method to be extremely slow in 10g on Solaris. SETALL fixed that problem).
As always, with these kinds of changes, it's best to do your own testing.
On 5/14/08, Josh Collier <Josh.Collier_at_banfield.net> wrote:
> With parallelism the blocks are read into the PGA. Perhaps it was undersized.
> Setall is going to try to use both directio and asyncio. You should verify by trussing the your db process that async io is working correctly.
> Directio and asyncio are commonly confused. Its my understanding that the VxFS supports directio but not async, unless you have the ODM or QuickIO option$.
> Direct i/o bypasses the filesystem cache and requires resizing of the pga and the sga to compensate for this.
> Ansync i/o uses KAIO calls instead of pread calls to initiate asyncronous i/o. Even with SETALL, you are not guranteed to get async reads unless parallelism is invoked. Traditional single process reads will show up as "db file scattered reads", these won't be async. "direct path reads" are async reads. I've verified this with truss. With SETALL most of your writes will be async by default.
> Some OS (such as solaris 10) mimic async i/o with a series of threaded syncronous reads, when the dabatase is set to use async. The db issues a KAIO call, the OS recoginizes this, returns a small error and then initiates the LWP threaded sync read calls.
> Josh C.