Debugging SQL Server Ytelse
SQL inskripsjon mot laptop og kode bakgrunn. Lær sql programmeringsspråk, datakurs, opplæring.
nylig har Vi jobbet med PROBLEMER med FEILSØKING AV SQL server-ytelsesproblemer for noen av våre store kunder som kjører SQL server som database. I denne artikkelen, jeg vil oppsummere hva jeg har lært av prosessen ved å beskrive noen trinn vi kan ta til problem-shoot ytelse problemet.
Kontroller SQL Server-Konfigurasjon
Kontroller at databaseserveren er konfigurert med nok ressurser, for eksempel ANTALL CPU-kjerner og mengde minne.
for å sjekke serverkonfigurasjonen kan du åpne» Systeminformasjon » – visningen:
for å kontrollere INNSTILLINGEN FOR SQL Server-minne,
- START SQL Server Management Studio.
- Høyreklikk på databaseforekomsten din og velg «Egenskaper».
- Klikk på» Minne «- tabellen i popup-vinduet «Serveregenskaper».
- Kontroller minneinnstillingene.
Kontroller At Øyeblikksbildsmodus Er på
Kontroller at øyeblikksbildsmodus er slått på for databasen. For å hindre AT SQL Server låses, bør øyeblikksbilde modus flagget være slått på. Kjør følgende spørring for å sjekke om flagget er på:
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name= '<database_name>'
hvis spørringen returnerer ‘1’, er stillbildemodus allerede slått på. Ellers kjører du følgende spørring for å slå den på.
ALTER DATABASE <database_name> SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
RELATERT: Definere Og Implementere Krav Grunnlinjer
Kontroller Databaseindekser
Kontroller databaseindeksene for å sikre at det ikke mangler indekser. Kjør følgende spørring for å vise alle alle indeksene i databasen (kreditt: tsql-Liste over alle indeks & indekskolonner I SQL Server DB – Stack Overflow):
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
Lagre spørringsresultatene i en tekstfil med tabulatordelte kolonner, slik at de kan importeres til et regnearkprogram senere.
Unngå Fragmentering
Kontroller at databaseindeksene ikke er fragmentert. Indeksene i databasen bidrar til å øke hastigheten på databasespørringen. Men når de blir fragmentert, kan spørringene løpe veldig sakte. Som en del av databasen vedlikehold, bør indeksene re-organisert eller re-bygget regelmessig.
Kjør følgende spørring for å kontrollere fragmenteringsprosenten for alle indekser i databasen( kreditt: Slik Kontrollerer Du Indeksfragmentering på Indekser i En Database):
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
Her er et utvalgsspørringsresultat for en database med svært fragmenterte indekser:
for indekser med sidetall større enn 1000, bør» avg_framentation_in_percent » holdes under 10%. Det spiller ingen rolle mye for små indekser. Som en tommelfingerregel kan indekser med fragmenteringsprosenter mellom 5% og 30% reorganiseres, og indekser med fragmenteringsprosenter større enn 30% bør gjenoppbygges.
for å omorganisere en enkelt indeks:
ALTER INDEX REORGANIZE
å gjenoppbygge en enkelt indeks:
ALTER INDEX REBUILD WITH (ONLINE = ON)
du kan også omorganisere eller bygge en indeks ved HJELP AV SQL Server Management Studio ved å høyreklikke på indeksen du vil bygge eller omorganisere.
Hvis det er mange defragmenterte indekser i databasen, kan du kjøre følgende spørring for å gjenoppbygge dem alle (kreditt: SQL SERVER – 2008 -2005-Gjenoppbygge Hver Indeks Av Alle Tabeller I Database-Gjenoppbygge Indeks Med FillFactor). Vær oppmerksom på at spørringen kan kjøre en stund for en stor database. Det anbefales å kjøre spørringen mens databasen er inaktiv eller frakoblet.
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
Vurder å sette opp vedlikeholdsjobb i SQL Server studio for å kjøre database indeks reorganisering regelmessig. Selv om gjenoppbygging av indekser i SQL Server sannsynligvis skal gjøres offline eller når systemet er inaktiv, kan indeksreorganisering gjøres online. Her er en god artikkel om dette emnet: Gjenoppbygge eller Omorganisere: SQL Server Index Vedlikehold.
hvis du vil sette opp en indeksreorganiseringsplan I SQL Server, høyreklikker du På «Management», deretter «Vedlikeholdsplaner» og velger «Ny Vedlikeholdsplan» eller «Veiviser For Vedlikeholdsplan». Følg instruksjonene for å opprette en plan.
RELATERT: Alternativer For Utgivelsesbehandling I Jama Connect
Kjør Manglende Indeksrapport
SQL Server inneholder et verktøy som analyserer databaseaktiviteter og anbefaler flere indekser som kan hjelpe med spørringsytelse. Rapporten kan gi oss noen ideer om hvorfor visse spørsmål er treg.
kjør følgende spørring etter at databaseforekomsten har blitt brukt en stund (kreditt: Ikke bare blindt lage de «manglende» indeksene!):
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
Les artikkelen Finne Manglende Indekser for å forstå utdataene fra denne spørringen.
Overvåk Databaseøkter
Bruk Aktivitetsmonitor til å overvåke databaseøkter. Microsoft SQL Server Management Studio kommer Med Activity Monitor, som kan brukes til å overvåke databaseøkter.
Se etter økter som er blokkert av andre økter i lang tid. Høyreklikk på økten og velg «Detaljer» for å vise detaljene i spørringen som er knyttet til prosessen.
Bruk Windows Resource Monitor
Windows Resource Monitor kan brukes til å overvåke minne og CPU-bruk AV SQL Server-prosessen for å sikre at det er nok minne i systemet og CPU-EN ikke er mettet. Vær oppmerksom på at DET er et kjent problem FOR SQL Server 2008 der minnefiguren som vises FOR SQL Server-prosessen I Resource Monitor ikke er riktig.
Identifiser Langsomme Spørringer
hvis vi har fastslått at ytelsen ikke er ressursrelatert, er neste trinn å identifisere langsomme spørringer som fører til dårlig ytelse.
følgende spørring returnerer de 100 trege spørringene som kjører for mer enn 300 ms (kreditt: Lange Kjørende Spørringer):
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
Her er et skjermbilde av noen eksempler på resultater:
når vi har samlet en liste over sakte spørringer, kan vi kjøre dem direkte på databasen og se på utførelsesplanene for å forstå disse spørringene.
Andre verktøy
her er en liste over andre verktøy som kan brukes til å feilsøke SQL Server-og Java-programmer:
- SQL Server Profiler: kan brukes til å identifisere sakte spørringer. DU kan starte DEN Fra SQL Server Management Studio
- VisualVM: kan brukes til å overvåke Java ressurser bruk og gjøre tråden dumper
- Java Mission Control / Flight recording: monitor og record system hendelser
- JProfiler: identifiser treg service eller database samtaler (utvikling, støttes ikke av 8.X distribusjon)
- New Relic: kan overvåke databaseytelse og registrere sakte spørringer
Sjekklister
her er en liste over informasjon som kan samles inn for å feilsøke SQL Server-problemer:
- Konfigurasjon Av Databaseserver (ANTALL CPU-kjerner, fysisk minne, diskplass, Windows Server-versjon, SQL Server-versjon, SQL Server-minne)
- Konfigurasjon Av Applikasjonsserver (antall CPU-kjerner, fysisk minne, diskplass, Java-kjerneminne)
- databaseindeksstatistikk
- SQL server mangler indeksrapport
- databaseserverminne og cpu-statistikk når serveren er treg
- operasjoner som gjør at systemet er treg
- sql server slow query report
- Databasetabellstatistikk
- Et par tråddumper fra Java-programmer tatt under trege operasjoner hvis aktuelt
databasefragmenteringsstatistikk
Konklusjon
Feilsøking AV YTELSESPROBLEMER FOR SQL server er ikke alltid rett frem. Men med de riktige verktøyene og tålmodigheten, bør vi kunne forstå årsaken til disse problemene. Håper informasjonen i denne artikkelen hjelper med det.
- Forfatter
- Siste Innlegg
- Feilsøking AV SQL Server-Ytelse-12. oktober 2016
- Overvåking Av Java-Programmer Som Kjører I Docker-Beholdere-juni 1, 2016