december 19, 2021

hibakeresés SQL Server Performance

hibakeresés SQL Server Performance

SQL felirat ellen laptop és a kód háttérben. Ismerje meg az sql programozási nyelvet, számítógépes tanfolyamokat, képzést.

a közelmúltban az SQL server teljesítményével kapcsolatos hibaelhárítási problémákon dolgoztunk néhány nagy ügyfelünknél, akik adatbázisként futtatják az SQL Servert. Ebben a cikkben összefoglalom, amit a folyamatból tanultam, leírva néhány lépést, amelyet megtehetünk a hibaelhárítási teljesítmény kérdésében.

ellenőrizze az SQL Server konfigurációját

győződjön meg arról, hogy az adatbázis-kiszolgáló elegendő erőforrással van konfigurálva, például a CPU-magok számával és a memória mennyiségével.

a kiszolgáló konfigurációjának ellenőrzéséhez nyissa meg a” Rendszerinformációk ” nézetet:

az SQL Server teljesítményének hibakeresése

az SQL Server memória beállításának ellenőrzése,

  1. indítsa el az SQL Server Management Studio alkalmazást.
  2. kattintson a jobb gombbal az adatbázis példányára, majd válassza a “Tulajdonságok”lehetőséget.
  3. kattintson a “memória” táblára a “szerver tulajdonságai” felugró ablakban.
  4. ellenőrizze a memória beállításait.

az SQL Server teljesítményének hibakeresése

ellenőrizze, hogy a pillanatkép mód be van-e kapcsolva

ellenőrizze, hogy a pillanatkép mód be van-e kapcsolva az adatbázisban. Az SQL Server zárolásának megakadályozása érdekében be kell kapcsolni a pillanatkép mód jelzőt. Futtassa a következő lekérdezést annak ellenőrzéséhez, hogy a zászló be van-e kapcsolva:

SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name= '<database_name>'

ha a lekérdezés ‘1’ értéket ad vissza, akkor a pillanatkép mód már be van kapcsolva. Ellenkező esetben futtassa a következő lekérdezést a bekapcsoláshoz.

ALTER DATABASE <database_name> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

kapcsolódó: Követelmények meghatározása és végrehajtása alapvonalak

Adatbázis-indexek ellenőrzése

ellenőrizze az adatbázis-indexeket, hogy megbizonyosodjon arról, hogy nincsenek hiányzó indexek. Futtassa a következő lekérdezést az adatbázis összes indexének felsorolásához (hitel: tsql-az összes index listája & index oszlopok az SQL Server DB-Stack Overflow alkalmazásban):

SELECT t.name TableName, col.name ColumnName, ind.name IndexNameFROM sys.indexes indINNER JOIN sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_idINNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_idINNER JOIN sys.tables t ON ind.object_id = t.object_idWHERE (ind.is_primary_key = 0 AND t.is_ms_shipped = 0)ORDER BY t.name, col.name, ind.name

mentse a lekérdezés eredményeit egy szöveges fájlba, tabulátorral tagolt oszlopokkal, hogy később importálhatók legyenek egy táblázatkezelő alkalmazásba.

kerülje a töredezettséget

győződjön meg arról, hogy az adatbázis indexei nem töredezettek. Az indexek az adatbázisban segít felgyorsítani adatbázis lekérdezés. De amikor szétaprózódnak,a lekérdezések nagyon lassan futhatnak. Az adatbázis-karbantartás részeként az indexeket rendszeresen újra kell szervezni vagy újra kell építeni.

futtassa a következő lekérdezést az adatbázis összes indexének töredezettségi százalékának ellenőrzéséhez (hitel: Hogyan ellenőrizhető az Index töredezettsége az adatbázisban lévő indexeken):

SELECT dbschemas.Jama Software AS 'Schema', dbtables.Jama Software AS 'Table', dbindexes.Jama Software AS 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count, dbindexes.fill_factorFROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstatsINNER JOIN sys.tables dbtables ON dbtables. = indexstats.INNER JOIN sys.schemas dbschemas ON dbtables. = dbschemas.INNER JOIN sys.indexes AS dbindexes ON dbindexes. = indexstats. AND indexstats.index_id = dbindexes.index_idWHERE indexstats.database_id = DB_ID()ORDER BY indexstats.avg_fragmentation_in_percent DESC

itt található egy minta lekérdezési eredmény egy erősen töredezett indexekkel rendelkező adatbázishoz:

az SQL Server teljesítményének hibakeresése

az 1000-nél nagyobb oldalszámmal rendelkező indexek esetében az “avg_framentation_in_percent” értéket 10% alatt kell tartani. Nem számít sokat a kis indexek számára. Alapszabályként az 5-30% közötti fragmentációs százalékos indexeket újra lehet szervezni, a 30% – nál nagyobb fragmentációs százalékos indexeket pedig újra kell építeni.

egyetlen index Újrarendezése:

ALTER INDEX REORGANIZE

egyetlen index újjáépítése:

ALTER INDEX REBUILD WITH (ONLINE = ON)

az indexet az SQL Server Management Studio használatával is átszervezheti vagy újraépítheti, ha jobb egérgombbal kattint az újjáépíteni vagy átszervezni kívánt indexre.

ha sok töredezettségmentesített index van az adatbázisban, akkor a következő lekérdezést futtathatja az összes újjáépítéséhez (hitel: SQL SERVER – 2008 -2005-az adatbázis – Újjáépítési Index összes táblájának minden indexének újjáépítése a FillFactor segítségével). Felhívjuk figyelmét, hogy a lekérdezés egy nagy adatbázis esetén egy ideig futtatható. Javasoljuk, hogy futtassa a lekérdezést, miközben az adatbázis tétlen vagy offline állapotban van.

DECLARE @TableName VARCHAR(255)DECLARE @sql NVARCHAR(500)DECLARE TableCursor CURSOR FORSELECT OBJECT_SCHEMA_NAME()+'.'+name AS TableNameFROM sys.tablesOPEN TableCursorFETCH NEXT FROM TableCursor INTO @TableNameWHILE @@FETCH_STATUS = 0BEGINSET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD'PRINT @sqlEXEC (@sql)FETCH NEXT FROM TableCursor INTO @TableNameENDCLOSE TableCursorDEALLOCATE TableCursorGO

fontolja meg a karbantartási feladat beállítását az SQL Server studio alkalmazásban az adatbázisindex-újraszervezés rendszeres futtatásához. Bár az indexek újjáépítése az SQL Serverben valószínűleg offline állapotban vagy tétlen állapotban történik, az index átszervezése online is elvégezhető. Itt van egy jó cikk erről a témáról: újjáépítés vagy átszervezés: SQL Server Index karbantartás.

index reorganizációs terv beállításához az SQL Server rendszerben kattintson a jobb gombbal a “kezelés”, majd a “Maintenance Plan Követés” elemre, majd válassza az “új Maintenance Plan követés” vagy a “Maintenance Plan követés varázsló”lehetőséget. Kövesse az utasításokat a terv létrehozásához.

 az SQL Server teljesítményének hibakeresése

az SQL Server teljesítményének hibakeresése

RELATED: Release Management Options in Jama Connect

hiányzó Indexjelentés futtatása

az SQL Server olyan eszközt biztosít, amely elemzi az adatbázis-tevékenységeket, és további indexeket javasol, amelyek segíthetnek a lekérdezés teljesítményében. A jelentés néhány ötletet adhat nekünk arról, hogy bizonyos lekérdezések miért lassúak.

a jelentés létrehozásához futtassa a következő lekérdezést, miután az adatbázispéldányt egy ideig használta (hitel: Ne csak vakon hozza létre ezeket a “hiányzó” indexeket!):

SELECT d., s = OBJECT_SCHEMA_NAME(d.), o = OBJECT_NAME(d.), d.equality_columns, d.inequality_columns, d.included_columns, s.unique_compiles, s.user_seeks, s.last_user_seek, s.user_scans, s.last_user_scan, s.avg_total_user_cost, s.avg_user_impactFROM sys.dm_db_missing_index_details AS dINNER JOIN sys.dm_db_missing_index_groups AS gON d.index_handle = g.index_handleINNER JOIN sys.dm_db_missing_index_group_stats AS sON g.index_group_handle = s.group_handleWHERE d.database_id = DB_ID() AND OBJECTPROPERTY(d., 'IsMsShipped') = 0

olvassa el a hiányzó indexek keresése című cikket, hogy megértse a lekérdezés kimenetét.

monitor Database Sessions

használja Activity Monitor figyelemmel kíséri adatbázis sessions. Microsoft SQL Server Management Studio jön Activity Monitor, amelyet fel lehet használni, hogy figyelemmel kíséri az adatbázis ülés.

az SQL Server teljesítményének hibakeresése

keresse meg azokat a munkameneteket, amelyeket más munkamenetek hosszú ideig blokkolnak. Kattintson a jobb gombbal a munkamenetre, majd válassza a “Részletek” lehetőséget a folyamathoz társított lekérdezés részleteinek megjelenítéséhez.

az SQL Server teljesítményének hibakeresése

A Windows Resource Monitor használata

A Windows Resource Monitor az SQL Server folyamat memóriájának és CPU-használatának ellenőrzésére használható, hogy megbizonyosodjon arról, hogy elegendő memória van-e a rendszerben, és a CPU nem telített. Felhívjuk figyelmét, hogy van egy ismert probléma az SQL Server 2008 esetében, ahol a Resource monitorban az SQL Server-folyamat memóriaértéke nem megfelelő.

 az SQL Server teljesítményének hibakeresése

az SQL Server teljesítményének hibakeresése

lassú lekérdezések azonosítása

ha megállapítottuk, hogy a teljesítmény nem erőforrásokhoz kapcsolódik, a következő lépés a lassú lekérdezések azonosítása, amelyek rossz teljesítményhez vezetnek.

a következő lekérdezés a top 100 lassú lekérdezést adja vissza, amelyek több mint 300 ms-on futnak (hitel: hosszú futású lekérdezések):

SELECT st.text, qp.query_plan, qs.*FROM ( SELECT TOP 50 * FROM sys.dm_exec_query_stats ORDER BY total_worker_time DESC) AS qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS stCROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qpWHERE qs.max_worker_time > 300 OR qs.max_elapsed_time > 300

itt van egy képernyőfelvétel néhány minta eredményéről:

az SQL Server teljesítményének hibakeresése

miután összegyűjtöttük a lassú lekérdezések listáját, közvetlenül az adatbázisban futtathatjuk őket, és megnézhetjük a végrehajtási terveket, hogy megértsük ezeket a lekérdezéseket.

egyéb eszközök

itt található az SQL Server és Java alkalmazások hibaelhárításához használható egyéb eszközök listája:

  • SQL Server Profiler: lassú lekérdezések azonosítására használható. Meg lehet kezdeni az SQL Server Management Studio
  • VisualVM: lehet használni, hogy figyelemmel kíséri a Java erőforrások használatát, és hogy szál guba
  • Java Mission Control/Flight recording: monitor és rekord rendszer események
  • JProfiler: azonosítani lassú szolgáltatás vagy adatbázis hívások (fejlesztés, nem támogatja a 8.x deployment)
  • New Relic: figyelemmel kísérheti az adatbázis teljesítményét és rögzítheti a lassú lekérdezéseket

ellenőrző listák

itt található az SQL Server problémák elhárításához gyűjthető információk listája:

  1. adatbáziskiszolgáló konfigurációja (CPU magok száma, fizikai memória, lemezterület, Windows Server verzió, SQL Server verzió, SQL Server memória beállítások)
  2. alkalmazáskiszolgáló konfigurációja (CPU magok száma, fizikai memória, lemezterület, Java core Memória beállítások)
  3. Adatbázis index statisztika
  4. Adatbázis töredezettségi statisztika
  5. SQL server hiányzó index jelentés
  6. adatbáziskiszolgáló memóriája és CPU statisztikája, ha a kiszolgáló lassú
  7. a rendszer lassúságát okozó műveletek
  8. SQL Server lassú lekérdezési jelentés
  9. Database table statistics
  10. néhány szál guba Java alkalmazások során a lassú műveletek adott esetben

következtetés

hibakeresés SQL server teljesítmény problémák nem mindig egyenes előre. De a megfelelő eszközökkel és türelemmel meg kell értenünk ezeknek a problémáknak az okát. Remélem, hogy a cikkben szereplő információk segítenek ebben.

  • szerző
  • Legutóbbi hozzászólások
Sean Tong legújabb hozzászólásai (az összes megtekintése)
  • hibakeresés SQL Server teljesítmény-október 12, 2016
  • Monitoring Java futó alkalmazások belül Docker konténerek-június 1, 2016

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.