Spécifier un facteur de remplissage pour un indexSpecify Fill Factor for an Index

CETTE RUBRIQUE S’APPLIQUE À : ouiSQL Server (à compter de la version 2016)ouiAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Cette rubrique explique ce qu'est le facteur de remplissage et comment spécifier une valeur de facteur de remplissage sur un index dans SQL Server 2017SQL Server 2017 à l'aide de SQL Server Management StudioSQL Server Management Studio ou de Transact-SQLTransact-SQL.This topic describes what fill factor is and how to specify a fill factor value on an index in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

L'option de facteur de remplissage permet de paramétrer précisément les performances et le stockage des données d'index.The fill-factor option is provided for fine-tuning index data storage and performance. Lorsqu'un index est créé ou régénéré, la valeur du facteur de remplissage détermine le pourcentage d'espace sur chaque page de niveau feuille à remplir de données, réservant ainsi le reste de chaque page comme espace disponible pour une croissance future.When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. Par exemple, une valeur de facteur de remplissage de 80 signifie que 20 pour cent de chaque page de niveau feuille reste vide afin que les index puissent s'étendre à mesure que des données sont ajoutées à la table sous-jacente.For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. L'espace vide est réservé entre les lignes d'index plutôt qu'à la fin de l'index.The empty space is reserved between the index rows rather than at the end of the index.

La valeur du facteur de remplissage est un pourcentage de 1 à 100 et la valeur par défaut à l'échelle du serveur est 0, ce qui signifie que les pages de niveau feuille sont entièrement remplies.The fill-factor value is a percentage from 1 to 100, and the server-wide default is 0 which means that the leaf-level pages are filled to capacity.

Note

Les valeurs du facteur de remplissage 0 et 100 sont identiques à tous les égards.Fill-factor values 0 and 100 are the same in all respects.

Dans cette rubriqueIn This Topic

Avant de commencerBefore You Begin

Considérations relatives aux performancesPerformance Considerations

Fractionnements de pagesPage Splits

Une valeur de facteur de remplissage correctement choisie peut réduire les risques de fractionnements de pages en fournissant suffisamment d'espace pour l'extension des index à mesure que des données sont ajoutées à la table sous-jacente. Lorsqu'une nouvelle ligne est ajoutée à une page d'index complète, le Moteur de base de donnéesDatabase Engine déplace environ la moitié des lignes vers une nouvelle page afin de faire de la place pour la nouvelle ligne.A correctly chosen fill-factor value can reduce potential page splits by providing enough space for index expansion as data is added to the underlying table.When a new row is added to a full index page, the Moteur de base de donnéesDatabase Engine moves approximately half the rows to a new page to make room for the new row. Ce type de réorganisation est désigné par l'expression « fractionnement de pages ».This reorganization is known as a page split. Un fractionnement de pages fait de la place pour de nouveaux enregistrements, mais cette opération peut prendre du temps et est gourmande en ressources.A page split makes room for new records, but can take time to perform and is a resource intensive operation. En outre, il peut causer une fragmentation qui accroît les opérations d'E/S.Also, it can cause fragmentation that causes increased I/O operations. Lorsque des fractionnements de pages se produisent fréquemment, vous pouvez régénérer l'index à l'aide d'une valeur de facteur de remplissage nouvelle ou existante afin de redistribuer les données.When frequent page splits occur, the index can be rebuilt by using a new or existing fill-factor value to redistribute the data. Pour plus d’informations, consultez Réorganiser et reconstruire des index.For more information, see Reorganize and Rebuild Indexes.

Bien qu'une faible valeur de facteur de remplissage, différente de 0, puisse réduire la nécessité de fractionner les pages à mesure que l'index s'étend, ce dernier a besoin de davantage d'espace de stockage et peut diminuer les performances de lecture.Although a low, nonzero fill-factor value may reduce the requirement to split pages as the index grows, the index will require more storage space and can decrease read performance. Même pour une application orientée vers de nombreuses opérations d'insertion et de mise à jour, le nombre de lectures effectuées dans la base de données est généralement 5 à 10 fois plus élevé que le nombre d'écritures.Even for an application oriented for many insert and update operations, the number of database reads typically outnumber database writes by a factor of 5 to 10. Par conséquent, la spécification d'un facteur de remplissage différent de la valeur par défaut peut diminuer les performances de lecture dans la base de données selon un coefficient inversement proportionnel au facteur de remplissage défini.Therefore, specifying a fill factor other than the default can decrease database read performance by an amount inversely proportional to the fill-factor setting. Par exemple, un facteur de remplissage de 50 peut diminuer de moitié les performances de lecture dans la base de données.For example, a fill-factor value of 50 can cause database read performance to decrease by two times. Les performances de lecture diminuent, car l'index contient davantage de pages, ce qui augmente le nombre d'opérations d'E/S disque nécessaires à la récupération des données.Read performance is decreased because the index contains more pages, therefore increasing the disk IO operations required to retrieve the data.

Ajout de données à la fin de la tableAdding Data to the End of the Table

Un facteur de remplissage différent de 0 ou 100 peut être bénéfique pour les performances si les nouvelles données sont réparties de manière égale dans l'ensemble de la table.A nonzero fill factor other than 0 or 100 can be good for performance if the new data is evenly distributed throughout the table. Toutefois, si toutes les données sont ajoutées à la fin de la table, l'espace vide dans les pages d'index n'est pas rempli.However, if all the data is added to the end of the table, the empty space in the index pages will not be filled. Par exemple, si la colonne clé de l'index est une colonne IDENTITY, la clé des nouvelles lignes augmente sans cesse et les lignes d'index sont ajoutées logiquement à la fin de l'index.For example, if the index key column is an IDENTITY column, the key for new rows is always increasing and the index rows are logically added to the end of the index. Si les lignes existantes sont mises à jour avec des données qui font augmenter la taille des lignes, utilisez un facteur de remplissage inférieur à 100.If existing rows will be updated with data that lengthens the size of the rows, use a fill factor of less than 100. Les octets supplémentaires de chaque page permettent de réduire les fractionnements de pages provoqués par l'augmentation de la taille des lignes.The extra bytes on each page will help to minimize page splits caused by extra length in the rows.

SécuritéSecurity

PermissionsPermissions

Nécessite une autorisation ALTER sur la table ou la vue.Requires ALTER permission on the table or view. L’utilisateur doit être membre du rôle serveur fixe sysadmin ou des rôles de base de données fixes db_ddladmin et db_owner .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Utilisation de SQL Server Management StudioUsing SQL Server Management Studio

Pour spécifier un facteur de remplissage à l'aide du Concepteur de tablesTo specify a fill factor by using Table Designer

  1. Dans l'Explorateur d'objets, cliquez sur le signe plus (+) pour développer la base de données qui contient la table pour laquelle vous souhaitez spécifier un facteur de remplissage d'index.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. Cliquez sur le signe plus (+) pour développer le dossier Tables .Click the plus sign to expand the Tables folder.

  3. Cliquez avec le bouton droit sur la table pour laquelle vous souhaitez spécifier un facteur de remplissage d’index et sélectionnez Conception.Right-click the table on which you want to specify an index’s fill factor and select Design.

  4. Dans le menu Concepteur de tables , cliquez sur Index/Clés.On the Table Designer menu, click Indexes/Keys.

  5. Sélectionnez l'index avec le facteur de remplissage que vous souhaitez spécifier.Select the index with the fill factor that you want to specify.

  6. Développez Spécification du remplissage, sélectionnez la ligne Facteur de remplissage et entrez le facteur de remplissage que vous souhaitez dans la ligne.Expand Fill Specification, select the Fill Factor row and enter the fill factor you want in the row.

  7. Cliquez sur Fermer.Click Close.

  8. Dans le menu Fichier , sélectionnez Enregistrernom_table.On the File menu, select Savetable_name.

Pour spécifier un facteur de remplissage dans un index à l'aide de l'Explorateur d'objetsTo specify a fill factor in an index by using Object Explorer

  1. Dans l'Explorateur d'objets, cliquez sur le signe plus (+) pour développer la base de données qui contient la table pour laquelle vous souhaitez spécifier un facteur de remplissage d'index.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. Cliquez sur le signe plus (+) pour développer le dossier Tables .Click the plus sign to expand the Tables folder.

  3. Cliquez sur le signe plus (+) pour développer la table pour laquelle vous souhaitez spécifier un facteur de remplissage d'index.Click the plus sign to expand the table on which you want to specify an index’s fill factor.

  4. Cliquez sur le signe plus (+) pour développer le dossier Index .Click the plus sign to expand the Indexes folder.

  5. Cliquez avec le bouton droit sur l’index avec le facteur de remplissage que vous souhaitez spécifier et sélectionnez Propriétés.Right-click the index with the fill factor that you want to specify and select Properties.

  6. Sous Sélectionner une page, sélectionnez Options.Under Select a page, select Options.

  7. Dans la ligne Facteur de remplissage , entrez le facteur de remplissage souhaité.In the Fill factor row, enter the fill factor that you want.

  8. Cliquez sur OK.Click OK.

Utilisation de Transact-SQLUsing Transact-SQL

Pour spécifier un taux de remplissage dans un index existantTo specify a fill factor in an existing index

  1. Dans l' Explorateur d'objets, connectez-vous à une instance de Moteur de base de donnéesDatabase Engine.In Object Explorer, connect to an instance of Moteur de base de donnéesDatabase Engine.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.On the Standard bar, click New Query.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.Copy and paste the following example into the query window and click Execute. L'exemple reconstruit un index existant et applique le facteur de remplissage spécifié pendant l'opération de reconstruction.The example rebuilds an existing index and applies the specified fill factor during the rebuild operation.

    USE AdventureWorks2012;  
    GO  
    -- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index   
    -- with a fill factor of 80 on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD WITH (FILLFACTOR = 80);   
    GO  
    

Autre méthode permettant de spécifier un facteur de remplissage dans un indexAnother way to specify a fill factor in an index

  1. Dans l' Explorateur d'objets, connectez-vous à une instance de Moteur de base de donnéesDatabase Engine.In Object Explorer, connect to an instance of Moteur de base de donnéesDatabase Engine.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.On the Standard bar, click New Query.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    /* Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index on the HumanResources.Employee table with a fill factor of 80.  
    */  
    
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)   
    WITH (DROP_EXISTING = ON, FILLFACTOR = 80);   
    GO  
    

    Pour plus d’informations, consultez ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).