Amélioration des performances pour SQL Server sous Windows NT

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

160606
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Résumé
Une nouvelle interface a été ajoutée comme une amélioration des performances pour SQL Server lors de l'exécution sous Windows NT. Cette amélioration implique la fonctionnalité de ventilation/regroupement.
Plus d'informations

Qu'est-ce que le nuage de points/Gather ?

Ventilation/regroupement est une technique standard utilisée dans certaines situations d'e/S hautes performances. Il fait généralement référence à des transferts d'accès direct à la mémoire (DMA). Un bloc de données donné peut-être exister dans la mémoire comme plusieurs tampons discrètes. Sans ventilation/regroupement, lorsque vous paramétrez un transfert de mémoire sur disque, le système d'exploitation peut faire souvent un transfert pour chaque tampon ou bloc de les déplacer vers un seul tampon plus grand avant de lancer le transfert. Ces deux sont inefficaces. Il est préférable si le système d'exploitation/pilote/matériel rassemble les données à partir d'emplacements discrètes de la mémoire et les transfère «en place» en une seule opération. De même, à l'entrée à partir du disque, si le bloc de données est disséminée directement aux nécessaires emplacements en mémoire sans bloc intermédiaire déplace et ainsi de suite, il est plus rapide.

Spécification d'interface

ReadFileScatter

La fonction ReadFileScatter lit les données à partir d'un fichier, en commençant à la position indiquée par l'offset dans le fichier dans la structure OVERLAPPED et distribue les données dans plusieurs mémoires tampons utilisateur.
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   );				

Paramètres

hFile


Identifie le fichier à lire. Le handle de fichier doit avoir été créé avec GENERIC_READ l'accès au fichier.

Le fichier doit être ouvert à l'aide de FILE_FLAG_OVERLAPPED pour spécifier asynchrone e/S et FILE_FLAG_NO_BUFFERING spécifier e/S non mise en cache.

aSegmentArray

Désigne un tableau de pointeurs segments. Un segment est une mémoire tampon où une partie des données transférées doit être placée. Page système en taille réelle et doit être alignée sur une limite de taille de page sont des segments.

Le segment de mémoire peut être alloué à l'aide de VirtualAllocVlm ou peut être normal 32-bit adresser la mémoire mais pas les deux.

NNumberOfBytesToRead

Spécifie le nombre d'octets à lire à partir du fichier.

lpReserved

Réservé doit être NULL.

lpOverlapped

Pointe vers une structure OVERLAPPED. Cette structure est obligatoire et doit pointer vers une structure OVERLAPPED valide.

L'opération de lecture démarre au décalage spécifié dans la structure OVERLAPPED et ReadFileScatter peut renvoyer avant la fin de l'opération de lecture. Dans ce cas, ReadFileScatter renvoie la valeur FALSE et la fonction GetLastError renvoie ERROR_IO_PENDING. Cela permet au processus appelant de continuer pendant que l'opération de lecture. L'application peut utiliser soit GetOverlappedResult/HasOverlappedIoCompleted pour notification d'achèvement d'e/S ou GetQueuedCompletionStatus en mains propres de terminaison d'e/S.

Valeurs de retour

Si la fonction réussit, la valeur de retour est différent de zéro. Si la fonction échoue, la valeur de retour est zéro. Pour obtenir des informations d'erreur étendues, appeler GetLastError. Si ReadFileScatter tente de lecture au-delà de la fin du fichier, la fonction renvoie zéro et GetLastError renvoie ERROR_HANDLE_EOF

Remarques

Chaque FILE_SEGMENT_ELEMENT est de 64 bits. Les 64 bits sont utilisés pour calculer le pointeur de la mémoire tampon ; par conséquent, les applications doivent zéro explicitement les derniers 32 bits de l'élément sur les systèmes qui ne prennent pas en charge les pointeurs 64 bits.

WriteFileGather

La fonction WriteFileGather regroupe les données provenant de plusieurs mémoires tampons et écrit les données dans un fichier. La fonction est conçue pour l'opération asynchrone. La fonction commence à écrire des données dans le fichier à la position spécifiée par la structure 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   );				

Paramètres

hFile


Identifie le fichier à écrire dans. Le handle de fichier doit avoir été créé avec accès GENERIC_WRITE au fichier. Le fichier doit être ouvert à l'aide de FILE_FLAG_OVERLAPPED pour spécifier asynchrone e/S et FILE_FLAG_NO_BUFFERING spécifier e/S non mise en cache.

aSegmentArray

Désigne un tableau de pointeurs segments. Un segment est une mémoire tampon où une partie des données transférées doit être placée. Page système en taille réelle et doit être alignée sur une limite de taille de page sont des segments. Le segment de mémoire peut être alloué à l'aide de VirtualAllocVlm ou peut être normal 32-bit adresser la mémoire, mais pas les deux.

NNumberOfBytesToWrite

Spécifie le nombre d'octets à écrire dans le fichier.

Contrairement au système d'exploitation MS-DOS, Windows NT interprète la valeur de zéro que la spécification d'une opération d'écriture null. Une opération d'écriture null n'écrit pas tous les octets mais provoque l'horodatage à modifier.

lpReserved

Réservé doit être NULL.

LpOverlapped

Pointe vers une structure OVERLAPPED. Cette structure est obligatoire et doit pointer vers une structure OVERLAPPED valide. L'opération d'écriture commence à l'offset spécifié dans la structure OVERLAPPED et WriteFileGather peut retourner avant la fin de l'opération d'écriture. Dans ce cas, WriteFileGather renvoie la valeur FALSE et la fonction GetLastError renvoie ERROR_IO_PENDING. Cela permet au processus appelant poursuivre le traitement pendant que l'opération d'écriture en cours terminée. L'application peut utiliser soit GetOverlappedResult/HasOverlappedIoCompleted pour collecter les e/S notification d'achèvement ou GetQueuedCompletionStatus pour chercher des e/S achèvement.

Valeurs de retour

Si la fonction réussit, la valeur de retour est différent de zéro. Si la fonction échoue, la valeur de retour est zéro. Pour obtenir des informations d'erreur étendues, appeler GetLastError.

Remarques

Chaque FILE_SEGMENT_ELEMENT est de 64 bits. Les 64 bits sont utilisés pour calculer le pointeur de la mémoire tampon ; par conséquent, les applications doivent zéro explicitement les derniers 32 bits de l'élément sur les systèmes qui ne prennent pas en charge les pointeurs 64 bits.

Si la partie du fichier est verrouillé par un autre processus et l'opération d'écriture superpose à la partie verrouillée, cette fonction échoue.

Contrairement au système d'exploitation MS-DOS, Windows NT interprète les zéro octets à écrire que la spécification d'une opération d'écriture null et WriteFileGather ne pas tronquer ou étendre le fichier. Pour tronquer ou étendre un fichier, utilisez la fonction SetEndOfFile.
Statut
Windows NT 4.0 Service Pack 2 a introduit une nouvelle interface qui agit comme un amplificateur de performances pour SQL Server lors de l'exécution sous Windows NT. Cette amélioration implique la ventilation/regroupement et la fonctionnalité d'entrée/sortie.

Pour plus d'informations sur l'obtention du dernier service pack pour Windows NT 4.0, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
152734Comment faire pour obtenir le dernier Pack de Service Windows NT 4.0
prodnt SQL

Avertissement : Cet article a été traduit de manière automatique

Propriétés

ID d'article : 160606 - Dernière mise à jour : 02/12/2014 17:49:27 - Révision : 1.1

  • Microsoft Windows NT Workstation 4.0 Édition Développeur
  • Microsoft Windows NT Server 4.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbnetwork KB160606 KbMtfr
Commentaires