Miglioramenti delle prestazioni per SQL Server in Windows NT

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

160606
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
Una nuova interfaccia è stata aggiunta come un miglioramento delle prestazioni per SQL Server durante l'esecuzione in Windows NT. Questo miglioramento prevede funzionalità di I/O a dispersione XY o raccolta.
Informazioni

Che cos'è/XY raccolta?

A dispersione XY o raccolta è una tecnica standard che utilizzata in alcune situazioni di I/O a elevate prestazioni. In genere fa riferimento per i trasferimenti di accesso diretto alla memoria (DMA). Un blocco di dati specifico può esistere in memoria come buffer discreti diversi. Senza la raccolta o a dispersione XY, durante l'impostazione di un trasferimento di memoria su disco, il sistema operativo eseguirà spesso un trasferimento per ogni buffer, o blocco spostarli in un singolo buffer più grandi prima di avviare il trasferimento. Entrambi questi sono inefficiente. È preferibile se del sistema operativo/driver/hardware raccoglie i dati dai percorsi distinti in memoria e trasferisce i "in luogo" come una singola operazione. Allo stesso modo, input dal disco, se il blocco di dati è organizzato direttamente per il necessarie posizioni di memoria senza blocco intermedio sposta e così via, è più veloce.

Specifica di interfaccia

ReadFileScatter

La funzione ReadFileScatter legge i dati da un file, a partire dalla posizione indicata dall'offset del file nella struttura OVERLAPPED e distribuisce i dati in più buffer utente.
BOOL ReadFileScatter(<WWBLOCKQUOTE>    HANDLE hFile,                         // handle of file to read    FILE_SEGMENT_ELEMENT aSegmentArray[], // array of buffer segments thatreceives data    DWORD nNumberOfBytesToRead,           // number of bytes to read    LPDWORD lpReserved,                   // reserved must be NULL    LPOVERLAPPED lpOverlapped             // address of structure for data   );				

parametri

hFile


Identifica il file da leggere. L'handle di file necessario creato con GENERIC_READ accesso al file.

Il file deve essere aperto utilizzando FILE_FLAG_OVERLAPPED per specificare asincrono I/O e FILE_FLAG_NO_BUFFERING per specificare I/O non memorizzato nella cache.

aSegmentArray

Punta di una matrice di puntatori ai segmenti. Un segmento è un buffer di memoria in cui verranno collocata parte dei dati trasferiti. I segmenti sono dimensioni di pagina di sistema e deve essere allineato a un limite di dimensione di pagina.

Al segmento di memoria da allocare utilizzando VirtualAllocVlm, oppure può essere normale indirizzo 32-bit memoria ma non entrambi.

NNumberOfBytesToRead

Specifica il numero di byte da leggere dal file.

lpReserved

Riservato deve essere NULL.

lpOverlapped

Punta a una struttura OVERLAPPED. Questa struttura è obbligatorio e deve puntare a una struttura OVERLAPPED valida.

L'operazione di lettura inizia in corrispondenza dell'offset specificato nella struttura OVERLAPPED e ReadFileScatter potrebbe restituire prima che l'operazione di lettura sia stata completata. In questo caso, ReadFileScatter restituisce FALSE e la funzione GetLastError restituisce ERROR_IO_PENDING. Questo consente di continuare mentre l'operazione di lettura al termine il processo chiamante. L'applicazione è possibile utilizzare entrambi GetOverlappedResult/HasOverlappedIoCompleted di notifica di completamento I/O o GetQueuedCompletionStatus per prelevare il completamento I/O.

valori restituiti

Se la funzione ha esito positivo, il valore restituito è diverso da zero. Se la funzione non riesce, il valore restituito è zero. Per ottenere informazioni dettagliate sull'errore, chiamare GetLastError. Se ReadFileScatter tenta di leggere oltre la fine del file, la funzione restituisce zero e GetLastError restituisce ERROR_HANDLE_EOF

note

Ogni FILE_SEGMENT_ELEMENT è costituito da 64 bit. Tutti i 64 bit vengono utilizzati per calcolare il puntatore del buffer; di conseguenza, le applicazioni devono zero in modo esplicito i 32 bit superiore dell'elemento nei sistemi che non supportano i puntatori a 64 bit.

WriteFileGather

La funzione WriteFileGather raccoglie i dati dai buffer più e scrive i dati in un file. La funzione è progettata per l'operazione asincrona. La funzione Avvia la scrittura dei dati nel file nella posizione specificata dalla struttura OVERLAPPED.
BOOL WriteFileGather(    HANDLE hFile,                // handle to file to write to    FILE_SEGMENT_ELEMENT aSegmentArray [], // array of buffer segmentscontaining the data    DWORD nNumberOfBytesToWrite,    // number of bytes to write    LPDWORD lpReserved,             // Reserved must be NULL    LPOVERLAPPED lpOverlapped       // pointer to structure needed foroverlapped I/O   );				

parametri

hFile


Identifica il file da scrivere. L'handle di file necessario creato con accesso al file GENERIC_WRITE. Il file deve essere aperto utilizzando FILE_FLAG_OVERLAPPED per specificare asincrono I/O e FILE_FLAG_NO_BUFFERING per specificare I/O non memorizzato nella cache.

aSegmentArray

Punta di una matrice di puntatori ai segmenti. Un segmento è un buffer di memoria in cui verranno collocata parte dei dati trasferiti. I segmenti sono dimensioni di pagina di sistema e deve essere allineato a un limite di dimensione di pagina. Il segmento di memoria può essere allocato utilizzando VirtualAllocVlm, oppure può essere memoria indirizzo normale a 32 bit, ma non entrambi.

NNumberOfBytesToWrite

Specifica il numero di byte da scrivere nel file.

A differenza del sistema operativo di MS-DOS, Windows interpreta un valore pari a zero come specificare un'operazione di scrittura null. Un'operazione di scrittura null non scrive i byte, ma di causare il timestamp modificare.

lpReserved

Riservato deve essere NULL.

LpOverlapped

Punta a una struttura OVERLAPPED. Questa struttura è obbligatorio e deve puntare a una struttura OVERLAPPED valida. L'operazione di scrittura inizia in corrispondenza dell'offset specificato nella struttura OVERLAPPED e WriteFileGather potrebbe restituire prima che l'operazione di scrittura sia stata completata. In questo caso, WriteFileGather restituisce FALSE e la funzione GetLastError restituisce ERROR_IO_PENDING. Questo consente il processo chiamante di continuare l'elaborazione mentre viene completata l'operazione di scrittura. L'applicazione può utilizzare entrambi GetOverlappedResult/HasOverlappedIoCompleted di I/O notifica di completamento o GetQueuedCompletionStatus per prelevare I/O completamento.

valori restituiti

Se la funzione ha esito positivo, il valore restituito è diverso da zero. Se la funzione non riesce, il valore restituito è zero. Per ottenere informazioni dettagliate sull'errore, chiamare GetLastError.

note

Ogni FILE_SEGMENT_ELEMENT è costituito da 64 bit. Tutti i 64 bit vengono utilizzati per calcolare il puntatore del buffer; di conseguenza, le applicazioni devono zero in modo esplicito i 32 bit superiore dell'elemento nei sistemi che non supportano i puntatori a 64 bit.

Se parte del file è bloccata da un altro processo e l'operazione di scrittura si sovrappone la parte bloccata, questa funzione non riesce.

A differenza del sistema operativo di MS-DOS, Windows interpreta zero byte da scrivere come specificare un'operazione di scrittura null e WriteFileGather non troncare o estendere il file. Per troncare o estendere un file, utilizzare la funzione di SetEndOfFile.
Status
Windows NT 4.0 Service Pack 2 ha introdotto una nuova interfaccia che agisce come un enhancer delle prestazioni per SQL Server durante l'esecuzione in Windows NT. Questo miglioramento implica a dispersione XY o raccolta e la funzionalità di input/output.

Per ulteriori informazioni su come ottenere il service pack più recente per Windows NT 4.0, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
152734Come ottenere il più recente di Windows NT 4.0 Service Pack
prodnt SQL

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 160606 - Ultima revisione: 02/07/2014 18:21:10 - Revisione: 1.1

  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbnetwork KB160606 KbMtit
Feedback