# Suorituskyky

> Kuinka jäsentäjä käsittelee 100 Mt lokitiedostoja ilman, että palvelimesi muisti loppuu, ja mitä voit tehdä muunnosten nopeuden ylläpitämiseksi.

---

LLMS index: [llms.txt](/llms.txt)

---

DNS-vianmäärityslokit vilkkaalla toimialueen ohjaimella ovat suuria. `Convert-DNSDebugLogFile` on suunniteltu tätä varten: sitä on testattu yli 100 Mt:n lokitiedostoilla, ja se käsittelee ne minuuteissa tavallisella palvelinlaitteistolla.

## Miksi se on nopea

Et tarvitse tätä tietoa moduulin käyttämiseen, mutta se selittää havaitsemasi käyttäytymisen.

| Tekniikka | Huomattava vaikutus |
|---|---|
| `StreamReader` / `StreamWriter` 64 kt puskureilla | Tiedosto luetaan ja kirjoitetaan paloissa yhden suuren `Get-Content`-kutsun sijaan |
| Virtaava, yksinkertainen läpikäynti | Muistin käyttö pysyy suunnilleen samana riippumatta lokin koosta |
| Merkkijono-operaatiot (`.Substring()`, `.IndexOf()`) säännöllisten lausekkeiden sijaan | Huomattavasti vähemmän CPU-käyttöä per rivi, ja rivejä on miljoonia |
| CSV kirjoitetaan käsin `Export-Csv`-komennon sijaan | Ei objektiputken ylikuormitusta per tietue |
| Tilastojen kokoaminen hashtablen avulla | Yhteenvedot maksavat lähes mitään saman läpikäynnin aikana |

Tärkeä seuraus: **koko lokia ei koskaan pidetä muistissa kerralla.** 500 Mt:n loki ei tarvitse 500 Mt RAM-muistia. Tämä erottaa moduulin kotikutoisista skripteistä, jotka lukevat tiedoston, pilkkovat sen ja rakentavat objekteja — tuo lähestymistapa toimii hyvin 5 Mt:n näytteellä, mutta kaatuu oikealla DC:llä.

## Parhaan suorituskyvyn saaminen

### Muunna kiertävät palat, älä yhtä jättitiedostoa

Määritä DNS-palvelin kierrättämään loki hallittavissa olevassa koossa — 50–200 Mt on hyvä haarukka. Useat keskikokoiset tiedostot muuntuvat ennustettavasti ja ajoitettu tehtävä ehtii valmistua ajoissa. Yksi jatkuvasti kasvava tiedosto ei.

Kiertäminen antaa myös suljetut tiedostot käsiteltäväksi, mikä on muutenkin toivottavaa:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```

### Ohita yksityiskohtainen jäsentäminen, jos et tarvitse sitä

Jos DNS-palvelin kirjoittaa täydelliset pakettitiedot, niiden muuntaminen JSON-muotoon on muunnoksen kallein osa.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
```

Odota 30–50 % nopeampia suorituksia lokeilla, joissa on paljon yksityiskohtaisia lohkoja, sekä huomattavasti pienempi CSV. Saat silti kyselytason tiedot ja TCP/UDP-yksityiskohtaisen otsikkorivin `Information`-tietueessa. Katso [Parametrit ja asetukset](../03-parameters-and-options/).

### Suodata aikaisin

`-ContextFilter Packet` pudottaa palvelinmuistiinpanot ja tapahtumat ennen niiden kirjoittamista. Vähemmän tulostusta tarkoittaa vähemmän I/O:ta, pienempiä tiedostoja ja vähemmän työtä jälkikäsittelyssä.

### Pyydä vain tarvitsemasi

`-OutputType Statistic` ohittaa rivikohtaisen CSV:n kirjoittamisen kokonaan. Jos kojelaudallasi näytetään vain päivittäiset määrät, tämä on selvästi halvin vaihtoehto.

### Muunna paikallisesti, siirrä tulokset

Moduuli lukee SMB/UNC-polkuja, mutta 200 Mt:n raakaa lokia siirtäminen verkon yli keskitettyyn jäsentämiseen on hidas tapa. Muunna DNS-palvelimella ja siirrä sitten (pakattu) CSV — se on yleensä kymmenesosa tavuista. Tämä on suunnittelun taustalla [GPO-ohjatun keräyksen esimerkissä](../examples/gpo-driven-collection/).

### Pakkaa siirtoa ja arkistointia varten

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

Tämän muotoinen CSV kutistuu tyypillisesti 90 % tai enemmän. Pakkaus vaatii hieman CPU:ta suorituksen lopussa, mutta säästää paljon levytilaa ja verkon kaistaa myöhemmin.

## Kun suoritus on odotettua hitaampi

Tarkista nämä järjestyksessä:

1. **Levy, ei CPU.** Muunnos on I/O-raskas. Lokitiedosto vilkkaalla asemalla tai hidas linkki hallitsee suoritusaikaa.
2. **Yksityiskohtaiset lohkot.** Jos lokissa on täydelliset pakettitiedot etkä käyttänyt `-NoDetailsParsing`-valitsinta, aika kuluu niihin.
3. **Tiedoston koko.** Yksi monigigatavun loki kestää kauan joka tapauksessa. Korjaa tämä kierrätyksellä, älä parametreilla.
4. **Virustorjunta.** Sekä lähdelokin että tuotetun CSV:n reaaliaikainen tarkistus voi kaksinkertaistaa I/O-kustannukset. Poissulku lokihakemistolle on yleinen ja järkevä toimenpide.
5. **Muistipaine.** Moduuli käyttää virtausta, joten sen ei pitäisi olla syy — mutta palvelin, joka jo käyttää swap-tilaa, hidastaa kaikkea.

Lisää oireita ja korjauksia on koottu [Vianmääritykseen](../08-troubleshooting/).
