Megosztás a következőn keresztül:


Kitöltési tényező megadása indexhez

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a témakör azt ismerteti, hogy mi a kitöltési tényező, és hogyan adhatja meg a kitöltési tényező értékét egy SQL Server-indexen az SQL Server Management Studio vagy a Transact-SQL használatával.

A fill-factor lehetőség az indexadatok tárolásának és teljesítményének finomhangolására szolgál. Az index létrehozásakor vagy újraépítésekor a kitöltési tényező értéke határozza meg, hogy az egyes levélszintű oldalakon hány százalékban legyenek kitöltve adatok, a fennmaradó részeket pedig szabad helyként kell tárolni az egyes lapokon a jövőbeli növekedéshez. Ha például 80-as kitöltési tényezőt ad meg, az azt jelenti, hogy az egyes levélszintű lapok 20 százaléka üres marad, és helyet ad az indexbővítésnek, amikor az adatokat hozzáadják az alapul szolgáló táblához. Az üres terület nem az index végén, hanem az indexsorok között van lefoglalva.

A kitöltőfaktor értéke 1 és 100 közötti százalék, a kiszolgálószintű alapértelmezett érték pedig 0, ami azt jelenti, hogy a levélszintű lapok kapacitással vannak kitöltve.

Note

A 0 és a 100 fill-factor értékek minden szempontból megegyeznek.

ebben a témakörben

Mielőtt hozzákezdene

Teljesítménnyel kapcsolatos szempontok

Oldalfelosztások

A helyesen kiválasztott kitöltőtényező-érték csökkentheti a lehetséges oldalfelbontásokat azáltal, hogy elegendő helyet biztosít az indexbővítéshez, mivel az adatok hozzáadva lesznek az alapul szolgáló táblához. Amikor új sort ad hozzá egy teljes indexlaphoz, az adatbázismotor a sorok körülbelül felét áthelyezi egy új lapra, hogy helyet biztosítson az új sornak. Ezt az átszervezést lapfelosztásnak nevezzük. A lapok felosztása teret ad az új rekordoknak, de időt vehet igénybe, és erőforrás-igényes művelet. Emellett töredezettséget is okozhat, amely fokozott I/O-műveleteket okoz. Gyakori oldalfelosztások esetén az index új vagy meglévő kitöltési tényező érték használatával újraépíthető az adatok újraterjesztéséhez. További információ: Indexek átrendezése és újraépítése.

Bár az alacsony, nem aero kitöltési tényező értéke csökkentheti a lapok felosztásának követelményét az index növekedésével, az indexnek több tárterületre van szüksége, és csökkentheti az olvasási teljesítményt. Még a sok beszúrási és frissítési művelethez készült alkalmazás esetében is az adatbázis olvasási száma általában 5-10-es tényezővel túllépi az adatbázis-írások számát. Ezért az alapértelmezetten kívüli kitöltési tényező megadása csökkentheti az adatbázis olvasási teljesítményét a kitöltési tényező beállításával fordítottan arányos mennyiséggel. Egy 50-es kitöltési tényező értéke például két alkalommal csökkentheti az adatbázis olvasási teljesítményét. Az olvasási teljesítmény csökken, mert az index több lapot tartalmaz, ezért növeli az adatok lekéréséhez szükséges lemez I/O-műveleteket.

Adatok hozzáadása a táblázat végéhez

A nem 0 vagy 100 közötti kitöltési tényező előnyös lehet a teljesítmény szempontjából, ha az új adatok egyenletesen oszlanak el a táblában. Ha azonban az összes adatot hozzáadja a táblázat végéhez, az indexlapok üres területe nem lesz kitöltve. Ha például az indexkulcs oszlop egy IDENTITY oszlop, az új sorok kulcsa mindig növekszik, és az index sorai logikailag hozzá lesznek adva az index végéhez. Ha a meglévő sorok a sorok méretét meghosszabbító adatokkal frissülnek, használjon 100-nál kisebb kitöltési tényezőt. Az egyes oldalakon lévő plusz bájtok segítenek minimalizálni a sorokban lévő extra hossz által okozott oldaleloszlásokat.

Biztonság

Permissions

ALTER engedély szükséges a táblához vagy a nézethez. A felhasználónak tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, illetve a db_ddladmin és db_owner rögzített adatbázis-szerepköröknek.

Az SQL Server Management Studio használata

Kitöltési tényező megadása a Table Designer használatával

  1. Az Object Explorerben a pluszjelre kattintva bontsa ki azt az adatbázist, amely azt a táblát tartalmazza, amelyen meg szeretné adni az index kitöltési tényezőjét.

  2. A pluszjelre kattintva bontsa ki a Táblák mappát.

  3. Kattintson a jobb gombbal arra a táblára, amelyen meg szeretné adni az index kitöltési tényezőjét, és válassza Tervezéslehetőséget.

  4. A Táblatervező menüben kattintson Indexek/Kulcsokelemre.

  5. Jelölje ki a megadni kívánt kitöltési tényezőt tartalmazó indexet.

  6. Bontsa ki a Kitöltési specifikáció-et, válassza ki a Kitöltési tényező sort, és adja meg a kívánt kitöltési tényezőt ebben a sorban.

  7. Kattintson a Bezárás gombra.

  8. A Fájl menüben válassza a Mentéstable_namelehetőséget.

Kitöltési tényező megadása indexben az Object Explorer használatával

  1. Az Object Explorerben a pluszjelre kattintva bontsa ki azt az adatbázist, amely azt a táblát tartalmazza, amelyen meg szeretné adni az index kitöltési tényezőjét.

  2. A pluszjelre kattintva bontsa ki a Táblák mappát.

  3. Kattintson a pluszjelre annak a táblának a kibontásához, amelyre az index kitöltési tényezőjét meg szeretné adni.

  4. A pluszjelre kattintva nyissa meg a Indexek mappát.

  5. Kattintson a jobb gombbal a megadni kívánt kitöltési tényezővel rendelkező indexre, és válassza a Tulajdonságoklehetőséget.

  6. A Válasszon egy lapot, válassza a Beállításoklehetőséget.

  7. A Kitöltési tényező sorban adja meg a kívánt kitöltési tényezőt.

  8. Kattintson az OK gombra.

Transact-SQL használata

Kitöltési tényező megadása meglévő indexben

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon kattintson Új lekérdezéselemre.

  3. Másolja és illessze be a következő példát a lekérdezési ablakba, és kattintson a Végrehajtásgombra. A példa újraépít egy meglévő indexet, és alkalmazza a megadott kitöltési tényezőt az újraépítési művelet során.

    USE AdventureWorks2022;  
    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  
    

Egy másik módszer a kitöltési tényező megadására egy indexben

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon kattintson Új lekérdezéselemre.

  3. Másolja és illessze be a következő példát a lekérdezési ablakba, és kattintson a Végrehajtásgombra.

    USE AdventureWorks2022;  
    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  
    

További információ: ALTER INDEX (Transact-SQL).