Databaseprofiler og log over langsomme forespørgsler
De lærende vil aktivere profileringsværktøjet, angive en slowms-tærskel og forespørge i system.profile for at finde de mest ressourcekrævende handlinger.
Databaseprofiler og log over langsomme forespørgsler er en gratis MongoDB Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i MongoDB Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Hvorfor profilering er vigtig
MongoDB kan køre tusindvis af forespørgsler i sekundet, men en håndfuld langsomme forespørgsler kan sænke en hel applikation. Databaseprofileringsværktøjet og loggen over langsomme forespørgsler er dine vigtigste værktøjer til at finde disse ressourcekrævende operationer. De registrerer detaljer om forespørgslernes udførelse — varighed, undersøgte dokumenter og indeksbrug — så du kan identificere og løse flaskehalse, før brugerne mærker dem.
Profileringsniveauer: 0, 1 og 2
Profileringsværktøjet har tre niveauer: Niveau 0 — deaktiveret, intet registreres. Niveau 1 — registrerer operationer, der tager længere tid end grænsen slowms (standard er 100 ms). Dette er den anbefalede indstilling i produktion. Niveau 2 — registrerer alle operationer uanset varighed. Niveau 2 er nyttigt under fejlfinding, men skaber for meget skriveoverhead til vedvarende brug i produktion.
// Enable level 1 profiling with 50ms threshold
db.setProfilingLevel(1, { slowms: 50 })
// Enable level 2 (capture everything)
db.setProfilingLevel(2)
// Turn profiling off
db.setProfilingLevel(0)Samlingen system.profile
Profilerede operationer skrives til den capped-samling system.profile i hver database. Hvert dokument i denne samling repræsenterer én operation og indeholder: op (operationstype), ns (navneområde), command (forespørgslen eller opdateringen), millis (varighed), keysExamined, docsExamined, nreturned og træet execStats.
// Find the 5 slowest operations in the last hour
db.system.profile.find({
ts: { $gt: new Date(Date.now() - 3600000) }
}).sort({ millis: -1 }).limit(5).pretty()Vigtige felter i et profileringsdokument
De mest informative felter i en profileringspost er: millis — den samlede forløbne tid. docsExamined — hvor mange dokumenter MongoDB læste for at opfylde forespørgslen. keysExamined — antal undersøgte indeksindgange. nreturned — hvor mange dokumenter der blev returneret. En sund forespørgsel har docsExamined / nreturned tæt på 1; et forhold på 1000:1 tyder på et manglende eller ineffektivt indeks.
// Inspect ratio of docsExamined to nreturned
db.system.profile.find({},{
millis: 1, docsExamined: 1, nreturned: 1, command: 1
}).sort({ millis: -1 }).limit(10)
// If docsExamined >> nreturned, you need a better indexGrænsen slowms
slowms er grænsen i millisekunder for profilering på niveau 1. Kun operationer, der tager længere tid end denne værdi, registreres. Standardværdien er 100 ms; du kan sænke den til 20–50 ms for at fange flere operationer under en undersøgelse og derefter hæve den til 100 ms (eller højere) i produktion for at reducere overhead. Indstillingen gælder pr. database og gemmes ikke ved genstarter, medmindre den angives i mongod.conf.
// Set via mongod.conf (persists across restarts)
// operationProfiling:
// mode: slowOp
// slowOpThresholdMs: 100
// Or dynamically at runtime (applies until restart)
db.adminCommand({ profile: 1, slowms: 20 })Læsning af loggen over langsomme forespørgsler
Selv når profileringsværktøjet er deaktiveret, skriver MongoDB langsomme operationer til sin logfil. Hver post i loggen over langsomme forespørgsler indeholder operationstype, navneområde, varighed, forespørgselsform og planoversigt. Loglinjer med COLLSCAN i feltet planSummary mangler med sikkerhed et indeks. Logmeddelelser begynder med Slow query og vises ved logningsdetaljeringsniveau 0.
// In the mongod log (or Atlas Log viewer), look for lines like:
// 2025-01-15T10:23:45 COMMAND mydb.orders command: find { filter: { status: 'pending' } }
// planSummary: COLLSCAN
// keysExamined: 0 docsExamined: 150000 nreturned: 23
// protocol: op_msg 1250msAtlas Performance Advisor
MongoDB Atlas indeholder Performance Advisor, som automatisk analyserer dine logge over langsomme forespørgsler og anbefaler indeks. Det grupperer lignende forespørgsler efter deres forespørgselsform (filterstruktur uden værdier), viser den gennemsnitlige udførelsestid og genererer den nøjagtige createIndex-kommando, du skal bruge. Det er den hurtigste måde at identificere manglende indeks i produktion på uden manuelt at fortolke logge.
Effektiv forespørgsel i system.profile
Du kan filtrere system.profile efter operationstype, navneområde eller et hvilket som helst felt. Almindelige analysemønstre er: find alle samlingsscanninger, find alle langsomme aggregeringer, og find alle operationer på en bestemt samling. Sortér efter millis i faldende rækkefølge for at se de værste tilfælde først.
// Find all collection scans recorded by the profiler
db.system.profile.find({
'execStats.stage': 'COLLSCAN'
}).sort({ millis: -1 })
// Find slow ops on a specific collection
db.system.profile.find({
ns: 'mydb.orders',
millis: { $gt: 200 }
}).sort({ millis: -1 })Ydelsesoverhead ved profilering
Hver profileringspost er en skrivning til den capped-samling system.profile, hvilket medfører en lille, men målbar overhead. Niveau 1 (kun langsomme operationer) er sikkert for de fleste arbejdsbelastninger i produktion. Niveau 2 (alle operationer) kan øge svartiden med 5–20 % på travle klynger og bør kun køres under korte fejlfindingssessioner. Vend altid tilbage til niveau 0 eller 1 efter en profileringssession.
// Check current profiling level and threshold
db.getProfilingStatus()
// { was: 1, slowms: 100, sampleRate: 1 }currentOp: Opdagelse af løbske forespørgsler i realtid
db.currentOp() viser alle handlinger, der i øjeblikket udføres på serveren — ikke kun langsomme handlinger, der allerede er afsluttet. Brug den til at opdage langvarige forespørgsler i realtid, identificere låse og afslutte løbsk kørende handlinger med db.killOp(opid). Kombiner den med profileringsværktøjet for at få et komplet billede af tidligere og aktuelle langsomme handlinger.
// Find all ops running longer than 5 seconds
db.currentOp({
active: true,
secs_running: { $gt: 5 }
})
// Kill a specific runaway op by opid
db.killOp(12345)Profileringsarbejdsgang: Undersøg og løs
En praktisk profileringsarbejdsgang: 1) Indstil profileringsniveau 1 med en tærskel på 50 ms. 2) Lad systemet køre i 15–30 minutter under reel trafik. 3) Forespørg i system.profile, sorteret efter millis i faldende rækkefølge. 4) Kør explain('executionStats') på den samme forespørgsel for hver langsom forespørgsel. 5) Opret det manglende indeks. 6) Sæt profileringsværktøjet tilbage til den normale tærskel. Gentag, indtil alle kritiske forespørgsler bruger indeks.
Hurtigt tjek
Test din forståelse af begreberne MongoDB og NoSQL-databaser fra denne lektion.
Opsummering af lektionen
I denne lektion lærte du, at profileringsniveau 1 registrerer langsomme handlinger over slowms-tærsklen i system.profile, at høje forhold mellem docsExamined og nreturned samt COLLSCAN i planSummary identificerer manglende indeks, og at db.currentOp() gør det muligt at opdage og afslutte langvarige forespørgsler i realtid. Dernæst undersøger vi ESR-princippet til design af optimale sammensatte indeks.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Databaseprofiler og log over langsomme forespørgsler” gratis?
Ja — hele teksten til “Databaseprofiler og log over langsomme forespørgsler” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af MongoDB Academy-kurset, skal du opgradere til CoddyKit PRO. MongoDB Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Databaseprofiler og log over langsomme forespørgsler”?
De lærende vil aktivere profileringsværktøjet, angive en slowms-tærskel og forespørge i system.profile for at finde de mest ressourcekrævende handlinger. Du øver dig i MongoDB Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på MongoDB Academy?
Der kræves ingen tidligere erfaring. MongoDB Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Databaseprofiler og log over langsomme forespørgsler”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne MongoDB Academy-lektion?
Ja. Alle MongoDB Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Databaseprofiler og log over langsomme forespørgsler
- Reglen for præfiks i sammensatte indeks og ESR-princippet
- Indekskrydsning kontra sammensatte indeks
- Tip til optimering af aggregeringspipelines