direct I/O in NTFS

giovedì 10 maggio 2007 alle 10:52 | Pubblicato su Backup and Recovery, Installation and Configuration, Performance Tuning | 2 commenti

Nel mio tentativo di approfondire le mie conoscenze di Oracle riguardo al supporto per il database stamattina mi sono accorto di non aver mai verificato se le installazioni che in passato ho fatto su Windows, su filesystem NTFS, usassero il DIRECT I/O ovvero l’accesso a disco non bufferizzato (in realtà non mi ero proprio posto il problema). Allora ho verificato sul nostro database di test, versione 9.2.0.6, come fosse configurato. Il parametro per dire a Oracle di usare l’accesso non bufferizzato ai file su filesystem (per i filesystem che lo supportano) è FILESYSTEMIO_OPTIONS che permette anche l’impostazione dell’accesso asincrono. Ho verificato che sul nostro database tale parametro ha il valore di default secondo la documentazione, cioè niente, vuoto.

Spiego meglio l’origine dei miei dubbi e il motivo che mi ha spinto ad approfondire il tema. Nei giorni scorsi sul newsgroup comp.databases.oracle.server su un thread si è discusso di backup su NFS (è qui mi allaccio dritto dritto al mio ultimo post). Ora nella mia esperienza ci sono un sacco di installazioni di Oracle 9iR2 su piattaforma Windows (2000 e 2003) su filesystem NTFS. Su tante installazioni sono capitati casi di corruzioni di file, talvolta inspiegabili, perchè sui log di Oracle venivano segnalati o problemi inputati al sistema operativo o corruzioni logiche non meglio definite, e in alcuni casi sui log di windows (il fantastico Event Viewer) non compariva niente, in altri dei messaggi di cui dopo parlo meglio. Questo, associato alla filosofia “meno strati software ci sono meno casini ci sono”, mi ha fatto pensare che forse abilitando il DIRECT I/O su NFTS avrebbe potuto ridurre le possibilità di problemi. E’ bene precisare però che questo non toglierebbe nessuno strato software, se non la parte che gestisce la bufferizzazione del filesystem.

Per prima cosa è partita la ricerca sul Metalink per verificare se il settaggio del parametro FILESYSTEMIO_OPTIONS con NTFS avesse controindicazioni e se la cosa fosse certificata. Sul metanlink non ho trovato la risposta, allora ho cercato nel manuale di installazione di Oracle su Windows: anche li nulla. A questo punto la ricerca è passata a Google. E’ qui ho avuto la prima sorpresa, il primo link che ho trovato era al sito di Howard Rogers su una pagina in cui si rispondeva ad un post dell’autore sul tema “buffered i/o . Li ho trovato la seguente affermazione:

The NTFS came along and did direct I/O anyway; and other file systems got developed or got improved, and now direct I/O is ubiquitous… but it wasn’t always like that, and I guess we live with the consequences.”

Anche seguendo un altro link ho trovato un’affermazione analoga, pure in alcuni vecchi thread dello stesso newsgroup comp.databases.oracle.server. Questo combaciava con il fatto che non trovavo informazioni sul parametro FILESYSTEMIO_OPTIONS con NTFS.

Ora però c’era un’altro dubbio, ricordavo in passato di aver visto sull’Event Viewer di un server un messaggio di warning riguardo operazioni di paging. Per fortuna (si fa per dire) ho trovato il messaggio che ricordavo, in realtà sul server ho trovato due tipi di errori:

Uno

Event Type: Warning
Event Source: Disk
Event Category: None
Event ID: 51
Date: 05/09/2007
Time: 18:20:00
User: N/A
Computer: server2
Description:
An error was detected on device \Device\Harddisk3\DR3 during a paging operation.

e due:

Event Type: Warning
Event Source: Ftdisk
Event Category: None
Event ID: 50
Date: 04/13/2007
Time: 07:31:40
User: N/A
Computer: serverL2
Description:
{Lost Delayed-Write Data} The system was attempting to transfer file data from buffers to \Device\HarddiskVolume5. The write operation failed, and only some of the data may have been written to the file.
Ora, da una ricerca su Google per tali errori sono capitato su tre interessanti pagine del supporto Microsoft:

  1. Information about Event ID 51
  2. “Lost Delayed-Write Data” Error Message Under Extreme File System Stress
  3. Description of the Event ID 50 Error Message

In particolare al secondo link ho trovato la seguente informazione:

“It is important to remember that not all I/O is buffered I/O by Cache Manager. Programs can set a FILE_FLAG_NO_BUFFERING”

Quindi in realtà NFTS è bufferizzato, ma supporta il DIRECT I/O tramite l’utilizzo del flag FILE_FLAG_NO_BUFFERING all’apertura del file.

A questo punto allora ho ricercato sul Metalink il parametro FILE_FLAG_NO_BUFFERING e finalmente ho chiuso il cerchio e chiarito i miei dubbi sulle affermazioni precedenti in cui si diceva che NTFS non è bufferizzato e quindi supporta sempre il DIRECT I/O. Nella nota 114421.1 c’è scritto:

Oracle on NT bypasses the filesystem buffer cache completely by
using the FILE_FLAG_NO_BUFFERING option on opening files with
CreateFile(). Oracle also uses the FILE_FLAG_WRITE_THROUGH option.
So there is no real caching difference between raw I/O and NTFS I/O.”

Quindi Oracle per Windows ha cablato nel codice il settaggio di accesso non bufferizzato su filesystem NTFS.

2 commenti »

RSS feed for comments on this post. TrackBack URI

  1. finalmente qualcosa che chiarisce alcuni concetti del Direct I/O.
    Quindi significa che per quanto riguarda NTFS, Oracle usa comunque sempre la modalità no buffer e quindi il DIRECT I/O a meno che si imposti diversamente tramite il parametro filesystemio_options ?

  2. Io non credo che Oracle abbia previsto la disabilitazione del DIRECT I/O tramite l’impostazine del parametro FILESYSTEMIO_OPTIONS. In ogni caso non ne ho la certezza e non ho modo di verificarlo, occorrerebbe tracciare le chiamate di sistema fatte da Oracle e indivuduare quella di apertura dei file (cosa che in linux o windows si può fare con truss). In ogni caso se l’avessero previsto non vedo perchè avrebbero dovuto cablarlo come hanno fatto e non lasciarlo attivabile dall’opzione com’è per default sulle altre piattaforme.


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: