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


Szál- és feladatarchitektúra útmutató

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

Operációs rendszer feladatütemezése

A szálak az operációs rendszer által végrehajtott legkisebb feldolgozási egységek, és lehetővé teszik az alkalmazáslogika több egyidejű végrehajtási útvonalra való elválasztását. A szálak akkor hasznosak, ha az összetett alkalmazások több olyan feladatot is ellátnak, amelyek egyszerre végrehajthatók.

Amikor egy operációs rendszer végrehajt egy alkalmazáspéldányt, létrehoz egy folyamatot a példány kezeléséhez. A folyamat rendelkezik egy végrehajtási szállal. Ez az alkalmazáskód által végrehajtott programozási utasítások sorozata. Ha például egy egyszerű alkalmazás egyetlen, sorosan végrehajtható utasításkészlettel rendelkezik, az adott utasításkészlet egyetlen feladatként, és csak egy végrehajtási útvonal (vagy szál) van az alkalmazáson keresztül. Az összetettebb alkalmazások több feladatot is tartalmazhatnak,, amelyek nem sorosan, hanem egyidejűleg is végrehajthatók. Egy alkalmazás ezt úgy teheti meg, hogy minden tevékenységhez külön folyamatokat indít el, ami erőforrás-igényes művelet, vagy elindítja a viszonylag kevésbé erőforrás-igényes szálakat. Emellett minden szál ütemezhető végrehajtásra a folyamathoz társított többi száltól függetlenül.

A szálak lehetővé teszik az összetett alkalmazások számára, hogy hatékonyabbá tegyék a processzor (CPU) használatát még az egyetlen processzorral rendelkező számítógépeken is. Egy CPU-val egyszerre csak egy szál hajtható végre. Ha egy szál olyan hosszú ideig futó műveletet hajt végre, amely nem használja a processzort, például egy lemez olvasása vagy írása, a szálak egy másika az első művelet befejezéséig hajtható végre. Ha képes a szálak végrehajtására, miközben más szálak várnak egy művelet befejezésére, az alkalmazás maximalizálhatja a processzorhasználatot. Ez különösen igaz a többfelhasználós, lemezes I/O-igényes alkalmazásokra, például egy adatbázis-kiszolgálóra. A több CPU-val rendelkező számítógépek processzoronként egyszerre egy szálat hajthatnak végre. Ha például egy számítógép nyolc CPU-val rendelkezik, egyszerre nyolc szálat is végrehajthat.

SQL Server-feladatütemezés

Az SQL Server hatókörében egy kérés egy lekérdezés vagy köteg logikai ábrázolása. A kérések a rendszerszálak, például ellenőrzőpont vagy naplóíró által megkövetelt műveleteket is jelölik. A kérések egész életük során különböző állapotokban léteznek, és várakozásokat halmozhatnak fel, ha a kérés végrehajtásához szükséges erőforrások nem érhetők el, például zárolások vagy reteszek. A kérelmek állapotáról további információt a sys.dm_exec_requestscímű témakörben talál.

Feladatok

A tevékenység azt a munkaegységet jelöli, amelyet a kérés teljesítéséhez el kell végezni. Egy vagy több tevékenység hozzárendelhető egyetlen kérelemhez.

  • A párhuzamos kérések több aktív feladattal rendelkeznek, amelyeket egyidejűleg hajtanak végre soros helyett, egy szülőfeladat (vagy koordinációs feladat) és több gyermekfeladat. A párhuzamos kérelmek végrehajtási tervének lehetnek soros ágai – a terv olyan területei, ahol az operátorok nem párhuzamosan futnak. A szülőfeladat felelős a soros operátorok végrehajtásáért is.
  • A soros kérelmeknek csak egy aktív feladatuk van egy adott időpontban a végrehajtás során. A feladatok életciklusuk során különböző állapotokban léteznek. A tevékenységállapotokkal kapcsolatos további információkért lásd: sys.dm_os_tasks. A FELFÜGGESZTETT állapotú tevékenységek a tevékenység végrehajtásához szükséges erőforrásokra várnak, hogy elérhetővé váljanak. További információ a várakozási feladatokról: sys.dm_os_waiting_tasks.

Munkavállalók

Az SQL Server munkaszála, más néven munkás vagy szál, az operációs rendszer szálának logikai ábrázolása. soros kérelmekvégrehajtásakor az SQL Server adatbázismotorja egy feldolgozót hoz létre az aktív feladat végrehajtásához (1:1). párhuzamos kéréseksormódban végrehajtásakor az SQL Server adatbázismotorja hozzárendel egy feldolgozót a hozzájuk rendelt feladatok végrehajtásáért felelős gyermek feldolgozók koordinálásához (szintén 1:1), az úgynevezett szülőszál (vagy koordináló szál). A szülőszálhoz egy szülőfeladat van társítva. A szülőszál a kérés belépési pontja, és még azelőtt létezik, hogy a motor elemezni tudná a lekérdezést. A szülőszál fő feladatai a következők:

  • Párhuzamos vizsgálat koordinálása.
  • Párhuzamos gyermekmunkások indítása.
  • Gyűjtse össze a párhuzamos szálak sorait, és küldje el az ügyfélnek.
  • Helyi és globális összesítések végrehajtása.

Jegyzet

Ha egy lekérdezési terv soros és párhuzamos ágakkal rendelkezik, a párhuzamos feladatok egyike felelős a soros ág végrehajtásáért.

Az egyes tevékenységekhez létrehozott munkaszálak száma a következőktől függ:

  • Az, hogy a kérelem jogosult-e a párhuzamosságra, amit a Lekérdezésoptimalizáló határoz meg.

  • Mi a tényleges elérhető párhuzamossági fok (DOP) a rendszerben, az aktuális terhelés alapján. Ez eltérhet a becsült DOP-tól, amely a kiszolgáló maximális párhuzamossági fokának (MAXDOP) konfigurációján alapul. A MAXDOP kiszolgálókonfigurációja például 8 lehet, a futtatókörnyezetben elérhető DOP azonban csak 2 lehet, ami befolyásolja a lekérdezés teljesítményét. A memóriaterhelés és a feldolgozók hiánya két olyan feltétel, amely futásidőben csökkenti a rendelkezésre álló DOP-t.

Jegyzet

A maximális párhuzamossági (MAXDOP) korlát tevékenységenként van beállítva, nem kérésenként. Ez azt jelenti, hogy egy párhuzamos lekérdezés végrehajtása során egyetlen kérés több feladatot is létrehozhat a MAXDOP-korlátig, és minden tevékenység egy feldolgozót fog használni. További információ a MAXDOP-ról: A kiszolgáló konfigurációs beállításának maximális párhuzamossági fokának konfigurálása.

Ütemezők

Az ütemező, más néven SOS-ütemező kezeli azokat a munkaszálakat, amelyek feldolgozási időt igényelnek a feladatok nevében végzett munka elvégzéséhez. Minden ütemező egy egyedi processzorra (CPU-ra) van leképezve. Azt az időt, amikor egy feldolgozó aktív maradhat egy ütemezőben, operációsrendszer-kvantumnak nevezzük, legfeljebb 4 ms-tal. Kvantumideje lejárta után a munkavállaló átadja idejét más munkavállalóknak, akiknek hozzá kell férniük a CPU-erőforrásokhoz, és megváltoztatja az állapotát. A dolgozók közötti együttműködést a CPU-erőforrásokhoz való hozzáférés maximalizálása érdekében kooperatív ütemezésneknevezzük, amelyet más néven nem preemptív ütemezésként is ismerünk. A dolgozó állapotának változása viszont továbbítódik a munkáshoz társított feladatra, és a feladathoz társított kérésre. A munkavállalói állapotokkal kapcsolatos további információkért lásd: sys.dm_os_workers. További információ az ütemezőkről: sys.dm_os_schedulers.

Összefoglalva, egy kérés egy vagy több feladatot indíthat a munkaegységek végrehajtásához. Minden tevékenység egy munkaszálhoz van hozzárendelve,, aki a feladat végrehajtásáért felelős. Minden munkaszálat ütemezni kell (egy ütemezőre) a feladat aktív végrehajtásához.

Fontolja meg a következő forgatókönyvet:

  • Az 1. feldolgozó egy hosszú ideig futó feladat, például egy olvasási lekérdezés, amely a lemezalapú táblákon végzett olvasási műveleteket használja. Az 1. feldolgozó úgy találja, hogy a szükséges adatoldalak már a pufferkészletben vannak, így nem kell várnia az I/O-műveletekre, és a teljes kvantumot felhasználhatja a hozam előtt.
  • A 2. feldolgozó rövidebb, ezredmásodperc alatti feladatokat végez, ezért a teljes kvantum kimerülése előtt hozamra van szükség.

Ebben a forgatókönyvben és az SQL Server 2014-ig (12.x) az 1. feldolgozó lényegében monopolizálja az ütemezőt, mivel hosszabb kvantumideje van.

Az SQL Server 2016-tól (13.x) kezdődően a kooperatív ütemezés magában foglalja a Large Deficit First (LDF) ütemezést. LDF-ütemezés esetén a kvantumhasználati minták monitorozása biztosítja, hogy egy feldolgozó szál ne monopolizáljon egy ütemezőt. Ugyanebben a forgatókönyvben a 2. munkavállaló ismétlődően használhat kvantumokat még azelőtt, hogy az 1. munkavállaló számára több kvantum lenne engedélyezve. Ezáltal megakadályozza, hogy az 1. munkavállaló barátságtalan módon monopolizálja az ütemezőt.

Párhuzamos tevékenységek ütemezése

Képzeljen el egy MaxDOP 8-tal konfigurált SQL Servert, és a CPU-affinitás 24 processzorhoz (ütemezőkhöz) van konfigurálva a 0. és 1. NUMA-csomóponton. A 0 és 11 közötti ütemezők a 0. NUMA-csomóponthoz, a 12–23. ütemezők pedig az 1. NUMA-csomóponthoz tartoznak. Egy alkalmazás a következő lekérdezést (kérést) küldi el az adatbázismotornak:

SELECT h.SalesOrderID,
    h.OrderDate,
    h.DueDate,
    h.ShipDate
FROM Sales.SalesOrderHeaderBulk AS h
INNER JOIN Sales.SalesOrderDetailBulk AS d
    ON h.SalesOrderID = d.SalesOrderID
WHERE (h.OrderDate >= '2014-3-28 00:00:00');

Borravaló

A példa lekérdezés a AdventureWorks2016_EXT mintaadatbázis adatbázis használatával hajtható végre. A Sales.SalesOrderHeader és Sales.SalesOrderDetail táblákat 50-szer bővítették, és átnevezték Sales.SalesOrderHeaderBulk és Sales.SalesOrderDetailBulk.

A végrehajtási terv két tábla közötti Hash Join-t mutat, és mindegyik operátor párhuzamosan hajtódik végre, amit a sárga kör két nyíllal jelez. Minden párhuzamossági operátor egy másik ág a tervben. Ezért a következő végrehajtási tervben három ág található.

párhuzamos lekérdezési tervet ábrázoló diagram.

Jegyzet

Ha egy végrehajtási tervet faként képzel el, a ág a terv azon része, amely egy vagy több operátort csoportosít a Párhuzamossági operátorok között, amelyeket más néven Exchange Iteratoroknak neveznek. A tervoperátorokról további információt a Showplan Logikai és Fizikai Operátorok Referenciájábantalál.

Bár a végrehajtási tervben három ág található, a végrehajtás során bármikor csak két ág hajthat végre egyszerre ebben a végrehajtási tervben:

  1. Az az ág, amelyben a fürtözött indexvizsgálatot használják a Sales.SalesOrderHeaderBulk (az illesztés bemeneti oldala), önállóan hajtja végre.
  2. Ezután az ág, amelyben a fürtözött indexvizsgálati használ az Sales.SalesOrderDetailBulk (az illesztés mintavételi bemenete) párhuzamosan fut azzal az ággal, ahol a Bitmap létrejött, és jelenleg a kivonategyezés fut.

A Showplan XML azt mutatja, hogy 16 munkavégzőszál foglalt volt, és a 0. NUMA-csomóponton használták:

<ThreadStat Branches="2" UsedThreads="16">
  <ThreadReservation NodeId="0" ReservedThreads="16" />
</ThreadStat>

A szálfoglalás biztosítja, hogy az adatbázismotor elegendő feldolgozószállal rendelkezik a kéréshez szükséges összes feladat végrehajtásához. A szálak több NUMA-csomóponton is lefoglalhatók, vagy csak egy NUMA-csomópontban foglalhatók le. A szálfoglalás futásidőben történik a végrehajtás megkezdése előtt, és az ütemező terhelésétől függ. A fenntartott feldolgozói szálak száma általánosan a concurrent branches * runtime DOP képletből származik, és kivételként kezeli a szülő-munkaszálat. Az egyes ágak munkaszálaik számában a MaxDOP értékének megfelelően vannak korlátozva. Ebben a példában két egyidejű ág van, és a MaxDOP értéke 8, ezért 2 * 8 = 16.

Referenciaként tekintse meg az élő végrehajtási tervet Élő lekérdezési statisztikák, ahol egy ág befejeződött, és két ág egyidejűleg fut.

élő párhuzamos lekérdezési tervet bemutató diagram.

Az SQL Server adatbázismotor egy munkavégző szálat rendel egy aktív tevékenység végrehajtásához (1:1), amely a lekérdezés végrehajtása során a sys.dm_os_tasks DMV lekérdezésével figyelhető meg, ahogyan az alábbi példában látható:

SELECT parent_task_address, task_address,
       task_state, scheduler_id, worker_address
FROM sys.dm_os_tasks
WHERE session_id = <insert_session_id>
ORDER BY parent_task_address, scheduler_id;

Borravaló

A parent_task_address oszlop mindig NULL értékű a szülőfeladathoz.

Borravaló

Egy nagyon forgalmas SQL Server adatbázismotoron számos aktív tevékenység látható, amelyek túllépik a fenntartott szálak által beállított korlátot. Ezek a tevékenységek olyan ághoz tartozhatnak, amelyet már nem használnak, és átmeneti állapotban vannak, és karbantartásra várnak.

Itt van az eredményhalmaz. Figyelje meg, hogy a jelenleg végrehajtó ágakhoz 17 aktív tevékenység tartozik: a fenntartott szálaknak megfelelő 16 gyermekfeladat, valamint a szülőfeladat vagy a koordinációs tevékenység.

szülő_feladat_cím feladat cím feladat_állapot ütemező_azonosító munkavállaló_címe
NULLA 0x000001EF4758ACA8 FELFÜGGESZTETT 3 0x000001EFE6CB6160
0x000001EF4758ACA8 0x000001EFE43F3468 FELFÜGGESZTETT 0 0x000001EF6DB70160
0x000001EF4758ACA8 0x000001EEB243A4E8 FELFÜGGESZTETT 0 0x000001EF6DB7A160
0x000001EF4758ACA8 0x000001EC86251468 FELFÜGGESZTETT 5 0x000001EEC05E8160
0x000001EF4758ACA8 0x000001EFE3023468 FELFÜGGESZTETT 5 0x000001EF6B46A160
0x000001EF4758ACA8 0x000001EFE3AF1468 FELFÜGGESZTETT 6 0x000001EF6BD38160
0x000001EF4758ACA8 0x000001EFE4AFCCA8 FELFÜGGESZTETT 6 0x000001EF6ACB4160
0x000001EF4758ACA8 0x000001EFDE043848 FELFÜGGESZTETT 7 0x000001EEA18C2160
0x000001EF4758ACA8 0x000001EF69038108 FELFÜGGESZTETT 7 0x000001EF6AEBA160
0x000001EF4758ACA8 0x000001EFCFDD8CA8 FELFÜGGESZTETT 8 0x000001EFCB6F0160
0x000001EF4758ACA8 0x000001EFCFDD88C8 FELFÜGGESZTETT 8 0x000001EF6DC46160
0x000001EF4758ACA8 0x000001EFBCC54108 FELFÜGGESZTETT 9 0x000001EFCB886160
0x000001EF4758ACA8 0x000001EC86279468 FELFÜGGESZTETT 9 0x000001EF6DE08160
0x000001EF4758ACA8 0x000001EFDE901848 FELFÜGGESZTETT 10 0x000001EFF56E0160
0x000001EF4758ACA8 0x000001EF6DB32108 FELFÜGGESZTETT 10 0x000001EFCC3D0160
0x000001EF4758ACA8 0x000001EC8628D468 FELFÜGGESZTETT 11 0x000001EFBFA4A160
0x000001EF4758ACA8 0x000001EFBD3A1C28 FELFÜGGESZTETT 11 0x000001EF6BD72160

Figyelje meg, hogy a 16 gyermekfeladat mindegyikéhez más munkaszál van hozzárendelve (az worker_address oszlopban látható), de az összes feldolgozó ugyanahhoz a nyolc ütemezőből álló készlethez van hozzárendelve (0,5,6,7,8,9,10,11), és hogy a szülőfeladat a készleten kívüli ütemezőhöz van rendelve (3).

Fontos

Ha egy adott ág első párhuzamos tevékenységkészlete ütemezve van, az adatbázismotor ugyanazt az ütemezőkészletet fogja használni a többi ágon végzett további feladatokhoz. Ez azt jelenti, hogy ugyanazt az ütemezőkészletet fogja használni a teljes végrehajtási terv összes párhuzamos tevékenységéhez, csak a MaxDOP korlátozza.

Az SQL Server adatbázismotor mindig ugyanabból a NUMA-csomópontból próbál ütemezőket hozzárendelni a feladat végrehajtásához, és egymás után (ciklikus időszeleteléses módon) hozzárendelni őket, ha az ütemezők elérhetők. A szülőfeladathoz rendelt munkaszál azonban más NUMA-csomópontba helyezhető, mint a többi tevékenység.

A munkaszál csak a kvantuma (4 ms) alatt maradhat aktív az ütemezőben, és a kvantum eltelte után vissza kell adnia az ütemezőt, hogy egy másik feladathoz rendelt munkaszál aktívvá válhasson. Amikor egy dolgozó kvantuma lejár, és már nem aktív, a megfelelő feladat egy FIFO sorba kerül FUTTATHATÓ állapotban, amíg újra FUTÓ állapotba nem kerül, feltéve, hogy a feladat nem igényel hozzáférést azokhoz az erőforrásokhoz, amelyek jelenleg nem érhetők el, például egy retesz vagy zárolás. Ebben az esetben a feladat FELFÜGGESZTETT állapotba kerül, nem pedig FUTTATHATÓ állapotba, mindaddig, amíg ezek az erőforrások elérhetők nem lesznek.

Borravaló

A fenti DMV kimenet alapján az összes aktív feladat FELFÜGGESZTETT állapotban van. A várakozási feladatokra vonatkozó további részletek a sys.dm_os_waiting_tasks DMV lekérdezésével érhetők el.

Összefoglalva, a párhuzamos kérések több feladatot is elindítanak. Minden feladatot egyetlen munkaszálhoz kell hozzárendelni. Minden munkaszálat egyetlen ütemezőhöz kell hozzárendelni. Ezért a használatban lévő ütemezők száma nem haladhatja meg az ágankénti párhuzamos tevékenységek számát, amelyet a MaxDOP-konfiguráció vagy a lekérdezési tipp állít be. A koordináló szál nem járul hozzá a MaxDOP korláthoz.

Szálak hozzárendelése CPU-khoz

Alapértelmezés szerint az SQL Server minden példánya elindítja az egyes szálakat, és az operációs rendszer a terhelés alapján elosztja a szálakat az SQL Server példányai között a processzorok (CPU-k) között. Ha a folyamat affinitása engedélyezve van az operációs rendszer szintjén, akkor az operációs rendszer minden szálat hozzárendel egy adott CPU-hoz. Ezzel szemben az SQL Server adatbázismotor az SQL Server munkaszálakat rendeli ütemezőkhöz, amelyek egyenletesen osztják el a szálakat a processzorok között, körkörös elosztás szerint.

Ha többfeladatos munkát szeretne végezni, például ha több alkalmazás is hozzáfér ugyanahhoz a processzorkészlethez, az operációs rendszer néha áthelyezi a feldolgozó szálakat a különböző CPU-k között. Bár az operációs rendszer szempontjából hatékony, ez a tevékenység csökkentheti az SQL Server teljesítményét nagy rendszerterhelések esetén, mivel az egyes processzorgyorsítótárak ismételten újratöltődnek adatokkal. A cpu-k adott szálakhoz való hozzárendelése ezen feltételek mellett javíthatja a teljesítményt azáltal, hogy megszünteti a processzorok újrabetöltését, és csökkenti a processzorok közötti áttelepítést (ezáltal csökkentve a környezetváltást); a szál és a processzor közötti ilyen társítást processzor-affinitásnak nevezzük. Ha az affinitás engedélyezve van, az operációs rendszer minden szálat hozzárendel egy adott CPU-hoz.

Az affinitási maszk beállítás a(z) ALTER SERVER CONFIGURATIONhasználatával van beállítva. Ha az affinitási maszk nincs beállítva, a SQL Server egy példánya egyenletesen elosztja a munkavégző szálakat a nem maszkolt ütemezők között.

Figyelem

Ne konfigurálja a cpu-affinitást az operációs rendszerben, és ne konfigurálja az affinitási maszkot az SQL Serveren. Ezek a beállítások ugyanazt az eredményt próbálják elérni, és ha a konfigurációk inkonzisztensek, előfordulhat, hogy kiszámíthatatlan eredmények érhetők el. További információ: affinitásmaszk beállítás.

A szálkészletezés segít optimalizálni a teljesítményt, ha nagy számú ügyfél csatlakozik a kiszolgálóhoz. Általában minden lekérdezéskéréshez külön operációsrendszer-szál jön létre. Ha azonban több száz kapcsolat van a kiszolgálóval, lekérdezési kérésenként egy szál használata nagy mennyiségű rendszererőforrást képes felhasználni. A maximális feldolgozószál-beállítás lehetővé teszi, hogy az SQL Server feldolgozószálak készletét hozza létre nagyobb számú lekérdezési kérés kiszolgálásához, ami javítja a teljesítményt.

A könnyű készletmegosztási lehetőség használata

Fontos

Az SQL Server 2025 -től (17.x) kezdődően a lehetőség által engedélyezett lightweight pooling funkció elavult, és az SQL Server egy későbbi verziójában tervezik az eltávolítást. Az ismert stabilitási és kompatibilitási problémák miatt a Microsoft azt javasolja, hogy ne használja ezt a funkciót az SQL Server bármely verziójában.

Előfordulhat, hogy a szálkörnyezetek közötti váltással járó többletterhelés nem túl nagy. Az SQL Server legtöbb példánya nem lát teljesítménybeli különbséget az egyszerűsített készletezési beállítás 0 vagy 1 értékre állítása között. Az SQL Server azon példányai, amelyek a könnyűsúlyú feladatkezelésből profitálhatnak, azok, amelyek egy olyan számítógépen futnak, amely az alábbi jellemzőkkel rendelkezik:

  • Nagy méretű, több processzoros kiszolgáló
  • Az összes PROCESSZOR a maximális kapacitás közelében fut
  • A kontextusváltás magas szintű

Ezek a rendszerek kismértékű teljesítménynövekedést tapasztalhatnak, ha a könnyített összesítési érték 1.

Fontos

Ne használjon száloptikás ütemezést rutinműveletekhez. Ez csökkentheti a teljesítményt azáltal, hogy gátolja a környezetváltás rendszeres előnyeit, és mivel az SQL Server egyes összetevői szálas módban nem működnek megfelelően. További információért lásd: könnyű készletezés.

Szál- és szálvégrehajtás

A Microsoft Windows egy numerikus prioritású rendszert használ, amely 1 és 31 közötti tartományt használ a szálak végrehajtási ütemezéséhez. A nulla az operációs rendszer használatára van fenntartva. Ha több szál is végrehajtásra vár, a Windows a legmagasabb prioritással küldi el a szálat.

Alapértelmezés szerint az SQL Server minden példánya 7 prioritású, amelyet normál prioritásnak nevezünk. Ez az alapértelmezett beállítás elegendő prioritást biztosít az SQL Server-szálak számára ahhoz, hogy elegendő cpu-erőforrást szerezzenek be anélkül, hogy hátrányosan érintenék más alkalmazásokat.

Fontos

Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

A prioritás növelése konfigurációs beállítással növelheti a szálak prioritását egy SQL Server-példányról 13-ra. Ezt magas prioritásnak nevezzük. Ez a beállítás magasabb prioritást biztosít az SQL Server-szálak számára, mint a legtöbb más alkalmazás. Így az SQL Server-szálak általában akkor lesznek ütemezve, amikor készen állnak a futtatásra, és nem kerülnek kiszorításra más alkalmazások szálai által. Ez javíthatja a teljesítményt, ha egy kiszolgáló csak SQL Server-példányokat futtat, és nem futtat más alkalmazásokat. Ha azonban memóriaigényes művelet történik az SQL Serverben, akkor más alkalmazások valószínűleg nem rendelkeznek elég magas prioritással az SQL Server-szál előkezeléséhez.

Ha több SQL Server-példányt futtat egy számítógépen, és csak néhány példány esetében kapcsolja be a prioritás növelését, a normál prioritással futó példányok teljesítménye hátrányosan befolyásolhatja. Emellett a kiszolgálón lévő egyéb alkalmazások és összetevők teljesítménye is csökkenhet, ha a prioritás növelése be van kapcsolva. Ezért csak szigorúan ellenőrzött körülmények között szabad használni.

Gyakori elérésű processzor hozzáadása

Fontos

Az SQL Server 2025 (17.x) verziójától kezdve a hot add CPU funkció kivezetés alatt áll, és az SQL Server egy későbbi verziójában tervezik eltávolítani. Ismert stabilitási problémák miatt a Microsoft azt javasolja, hogy ne használja ezt a funkciót az SQL Server felügyeletében az SQL Server bármely verziójában.

A Hot add CPU funkció lehetővé teszi, hogy a processzorokat dinamikusan adjuk hozzá egy futó rendszerhez. A CPU-k hozzáadása fizikailag történhet új hardverek hozzáadásával, logikailag online hardverparticionálással vagy virtuálisan egy virtualizálási rétegen keresztül.

A CPU forró hozzáadásának követelményei:

  • Olyan hardverre van szükség, amely támogatja a processzor forró hozzáadását.
  • A Windows Server Datacenter vagy az Enterprise kiadás támogatott verzióját igényli. A Windows Server 2012-től kezdve a hot add funkció támogatott a Standard kiadásban.
  • Sql Server Enterprise kiadást igényel.
  • Az SQL Server nem konfigurálható a soft NUMA használatára. További információ a soft NUMA-ról: Soft-NUMA (SQL Server).

Az SQL Server nem használja automatikusan a processzorokat a hozzáadásuk után. Ez megakadályozza, hogy az SQL Server olyan processzorokat használ, amelyek más célra is hozzáadhatók. Cpu-k hozzáadása után hajtsa végre a RECONFIGURE utasítást, hogy az SQL Server felismerje az új CPU-kat elérhető erőforrásként.

Ha a affinitás64 maszk van konfigurálva, az affinitás64 maszkot módosítani kell az új CPU-k használatához.

Ajánlott eljárások az SQL Server 64-nél több processzort tartalmazó számítógépeken való futtatásához

Hardverszálak hozzárendelése processzorokhoz

Ne használja az affinitási maszkot és az affinitás64 maszkkiszolgáló konfigurációs beállításait a processzorok adott szálakhoz való kötéséhez. Ezek a lehetőségek legfeljebb 64 CPU-ra korlátozódnak. Ehelyett használja az ALTER SERVER CONFIGURATION SET PROCESS AFFINITY lehetőséget.

Tranzakciónapló fájlméretének kezelése

A tranzakciónapló-fájl méretének növeléséhez ne támaszkodjon az automatikus növekedésre. A tranzakciónapló növelésének soros folyamatnak kell lennie. A napló kiterjesztése megakadályozhatja a tranzakcióírási műveleteket a naplókiterjesztés befejezéséig. Ehelyett helyezze előre a naplófájlok helyét úgy, hogy a fájlméretet olyan értékre állítja, amely elég nagy ahhoz, hogy támogassa a környezet tipikus számítási feladatait.

Indexműveletek maximális párhuzamossági fokának beállítása

Az indexműveletek, például az indexek létrehozása vagy újraépítése javítható a sok CPU-val rendelkező számítógépeken, ha ideiglenesen az adatbázis helyreállítási modelljét a tömegesen naplózott vagy egyszerű helyreállítási modellre állítja. Ezek az indexműveletek jelentős naplótevékenységet eredményezhetnek, és a naplók versengése hatással lehet az SQL Server által választott párhuzamosság (DOP) legjobb fokára.

A kiszolgáló konfigurációs maximális párhuzamossági fokának (MAXDOP) beállítása mellett érdemes lehet módosítani az indexműveletek párhuzamosságát a MAXDOP beállításhasználatával. További információ: Párhuzamos indexelési műveletek konfigurálása. A párhuzamossági kiszolgáló konfigurációs beállításainak maximális fokának beállításával kapcsolatos további információkért és irányelvekért lásd: A párhuzamossági kiszolgáló konfigurációs beállításának maximális fokának konfigurálása.

A munkaszálak maximális számának beállítása opció

Az SQL Server dinamikusan konfigurálja a maximális feldolgozói szálakat kiszolgálókonfigurációs beállítást indításkor. Az SQL Server a rendelkezésre álló CPU-k és a rendszerarchitektúra alapján határozza meg a kiszolgáló konfigurációját az indítás során, dokumentált képlethasználatával.

Ez a beállítás egy speciális lehetőség, és csak tapasztalt adatbázis-szakembernek kell módosítania.

Ha arra gyanakszik, hogy teljesítményproblémáról van szó, akkor valószínűleg nem a munkavégző szálak rendelkezésre állása. Az ok valószínűleg valami olyan, mint az I/O művelet, ami miatt a munkaszálak várakozni kényszerülnek. A maximális munkaszál-beállítás módosítása előtt érdemes megtalálni a teljesítményproblémák kiváltó okát. Ha azonban manuálisan kell beállítania a feldolgozószálak maximális számát, ezt a konfigurációs értéket mindig a rendszeren található PROCESSZORok számának legalább hétszeresére kell állítani. További információ: A maximális feldolgozói szálak konfigurálása.

Az SQL Trace és az SQL Server Profiler használatának elkerülése

Azt javasoljuk, hogy éles környezetben ne használja az SQL Trace-t és az SQL Profilert. Az eszközök futtatásának többletterhelése a processzorok számának növekedésével is nő. Ha az SQL Trace-t éles környezetben kell használnia, korlátozza a nyomkövetési események számát a minimálisra. Gondosan profilozza és tesztelje a terhelés alatt lévő nyomkövetési eseményeket, és kerülje a teljesítményt jelentősen befolyásoló eseménykombinációk használatát.

Fontos

Az SQL Trace és az SQL Server Profiler elavult. A Microsoft.SqlServer.Management.Trace SQL Server Trace és Replay objektumokat tartalmazó névtér is elavult.

Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

Használja helyette a Bővített események parancsot. Kiterjesztett események további információiért tekintse meg a következőket: Gyors kezdési útmutató: Kiterjesztett események az SQL Serverben, valamint az SSMS XEvent Profiler.

Jegyzet

Az Analysis Services számítási feladataihoz készült SQL Server Profiler nem elavult, és továbbra is támogatott lesz.

A tempdb adatfájlok számának beállítása

A fájlok száma a (logikai) processzorok számától függ a gépen. Általános szabályként, ha a logikai processzorok száma kisebb vagy egyenlő nyolcnál, használja ugyanazt az adatfájlokat, mint a logikai processzorok. Ha a logikai processzorok száma meghaladja a nyolcat, használjon nyolc adatfájlt, majd ha a versengés folytatódik, növelje az adatfájlok számát 4 többszörösével, amíg a versengés elfogadható szintre nem csökken, vagy módosítsa a számítási feladatot/kódot. Ne feledkezzen meg a tempdbegyéb javaslatairól sem, amelyek a SQL Servertempdb teljesítményének optimalizálását tárgyaló részben találhatók.

Az tempdbegyidejűségi igényeinek gondos figyelembevételével azonban csökkentheti az adatbázis-kezelés többletterhelését. Ha például egy rendszer 64 CPU-val rendelkezik, és általában csak 32 lekérdezés használ tempdb, a tempdb fájlok számának 64-esre emelése nem növeli a teljesítményt.

64-nél több processzort használó SQL Server-összetevők

Az alábbi táblázat felsorolja az SQL Server-összetevőket, és jelzi, hogy használhatnak-e több 64 PROCESSZORt.

Folyamat neve Végrehajtható program Több mint 64 processzor használata
SQL Server adatbázismotor Sqlserver.exe Igen
Jelentési szolgáltatások Rs.exe Nem
Analysis Services As.exe Nem
Integrációs szolgáltatások Is.exe Nem
Szolgáltatásközvetítő Sb.exe Nem
Full-Text Keresés Fts.exe Nem
SQL Server-ügynök Sqlagent.exe Nem
SQL Server Management Studio Ssms.exe Nem
SQL Server beállítása Setup.exe Nem