Kad suprastumėte, ką turiu omenyje, pažiūrėkime į tai techniškai. SSD blokai yra organizuoti į puslapius, paprastai 4KB dydžio, ir kai jūs ištrinate failą, operacinė sistema nepašalina duomenų fiziškai iš disko - ji tik pažymi tuos blokus kaip laisvus. Be TRIM, kontroleris negali žinoti, kurie blokai yra tušti, tad rašymas naujų duomenų reikalauja papildomo laiko "valymui" vietoje. Aš rekomenduoju visada patikrinti, ar TRIM yra įjungtas, naudodami komandą fsutil behavior query DisableDeleteNotify. Jei grąžina 0, viskas gerai; jei 1, tuomet fsutil behavior set DisableDeleteNotify 0 išspręs problemą. Prisimenu vieną atvejį, kai klientas skundėsi, kad jų SQL Server duomenų bazė lėtėja kas savaitę - pasirodo, TRIM buvo išjungtas dėl kažkokio seno grupinės politikos objekto, paveldėto iš ankstesnės versijos. Po pataisymo, duomenų bazės atnaujinimo laikas sutrumpėjo nuo 15 minučių iki 3. Bet tai tik pradžia; SSD optimizavime svarbu ir defragmentacija, nors daugelis mano, kad ji nereikalinga. Windows turi Optimize Drives įrankį, kuris serveriuose veikia kaip "defrag" su TRIM integracija, bet aš visada nustatau jį vykdyti automatiškai kas savaitę, vengdamas pilnos defragmentacijos - ji gali sukelti nereikalingą nusidėvėjimą. Vietoj to, naudoju storage tiering, jei serveris palaiko, pavyzdžiui, su Storage Spaces Direct, kur karšti duomenys keliauja į greitesnius NVMe SSD, o šalti - į SATA.
Dabar pereikime prie rašymo optimizavimo. Aš pastebėjau, kad daugelis serverių naudoja numatytuosius Windows nustatymus, kurie nėra pritaikyti SSD - pavyzdžiui, superfetch ar prefetch failai kaupiasi, nors SSD jų visiškai nereikia. Superfetch analizuoja naudojimo modelius ir įkelia duomenis į RAM iš anksto, bet ant SSD tai sukelia nereikalingus rašymo ciklus, nes failai yra greitai pasiekiami be to. Norėdamas tai išjungti, einu į registry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters ir nustatau EnablePrefetcher bei EnableSuperfetch į 0. Po to perkraunu, ir stebuklas - I/O apkrova sumažėja 20-30 procentų. Bet būkite atsargūs: jei jūsų serveris tvarko daug virtualių mašinų, tai gali paveikti jų veikimą, tad testuokite su Performance Monitor, stebėdami diskų eilės ilgį. Aš naudoju perfmon.exe su skaitikliais kaip PhysicalDisk: Avg. Disk Queue Length ir Avg. Disk sec/Read, kad pamatyčiau, ar pokyčiai teigiami. Kita svarbi dalis - puslapių failo valdymas. Windows serveriuose puslapių failas (pagefile.sys) gali užimti gigabaitus ant SSD, ir jei jis nėra optimizuotas, rašymas į jį tampa butelio kaklelžiu. Aš visada rekomenduoju perkelti pagefile į atskirą HDD, jei įmanoma, arba bent jau nustatyti minimalų ir maksimalų dydį lygius, kad išvengti dinaminių keitimų. Pavyzdžiui, jei turite 64GB RAM, nustatykite pagefile į 4-8GB, naudodami System Properties > Advanced > Performance Settings > Virtual Memory. Prisimenu, kaip vienas kolega forumuose skundėsi, kad jų Exchange serveris stringa - pasirodo, pagefile buvo ant pagrindinio SSD be jokių ribų, tad jis augo iki 50GB, sukeldamas masinį rašymą.
Kalbant apie saugojimo konfigūraciją, aš negaliu nepaminėti RAID masyvų su SSD. Daugelis naudoja RAID 0 greičiui, bet serveriuose tai rizikinga be tinkamo backup'o - vienas gedimas, ir viskas prarasta. Vietoj to, aš propaguoju RAID 10 su SSD, kur pusė talpos skirta paritetui, bet greitis išlieka aukštas dėl juostelės (striping). Windows Storage Spaces leidžia sukurti panašų masyvą be aparatinės įrangos, naudojant PowerShell: New-StoragePool ir New-VirtualDisk su parametrais kaip -ResiliencySettingName Mirror. Aš testavau tai su 4x 1TB SSD, ir skaitymo greitis pasiekė 2000MB/s, o rašymo - 1500MB/s, kas idealu failų serveriams. Bet atminkite, SSD temperatūra - jie karščiau nei HDD, tad aš visada montuoju aušinimo ventiliatorius ar net skystą aušinimą serverio korpuse. Naudoju HWMonitor, kad stebėčiau temperatūras, ir jei viršija 70C, mažinu apkrovą. Kita techninė detalė - firmware atnaujinimai. SSD gamintojai kaip Samsung ar Intel reguliariai išleidžia firmware, kurie gerina NAND valdymą ir prailgina tarnavimo laiką. Aš turiu ritualą: kas ketvirtį tikrinu gamintojo svetainę ir atnaujinu per jų įrankius, pavyzdžiui, Samsung Magician. Vieną kartą atnaujinimas ištaisė klaidą, kai mano SSD prarado 10 procentų greičio dėl blogo garbage collection.
Dabar apie virtualias aplinkas - jei jūsų Windows serveris hostina Hyper-V ar VMware, SSD optimizavimas tampa dar sudėtingesnis. Aš dirbau su Hyper-V klasteriu, kur virtualios mašinos dalijosi SSD saugykla, ir be tinkamo I/O prioritetų, viena VM galėjo užimti visą pralaidumą. Hyper-V turi Dynamic Memory, bet aš visada nustatau fixed size virtualiems diskams ant SSD, vengdamas plonų provisioning'o, kuris sukelia fragmentaciją. Naudokite PowerShell: Get-VMHardDiskDrive | Set-VMHardDiskDrive -Path "path\to\vhd" -Type Fixed. Be to, įjunkite host resource protection, kad Hyper-V neperskirstytų SSD resursų per agresyviai. Prisimenu, kaip analizavau bottleneck'ą su Resource Monitor - pasirodo, guest OS viduje TRIM nebuvo įjungtas, tad aš turėjau modifikuoti VM konfigūraciją, pridėdamas
Neaplenkdamas tinklo pusės, nes serveriai dažnai integruojasi su NAS ar SAN per SSD back-end'ą. Aš pastebėjau, kad iSCSI jungtys su SSD tikslais gali sukelti latency, jei MTU nėra optimizuotas. Nustatykite Jumbo Frames - 9000 baitų - tiek ant serverio, tiek ant switch'o, naudodami netsh interface ipv4 set subinterface "Ethernet" mtu=9000 store=persistent. Tai sumažina paketų fragmentaciją ir pagerina throughput'ą iki 10Gbps tinkluose. Viename projekte, kur klientas naudojo SSD-based NAS, Jumbo Frames ištaisė 200ms latency problemą, paversdamas jį tinkamu real-time duomenų bazėms. Bet saugumas čia taip pat svarbus: aš visada šifruoju SSD duomenis su BitLocker serverio versijoje, nustatydamas TPM modulį autentifikacijai. Komanda manage-bde -on C: -TPM, ir voilà - duomenys apsaugoti nuo fizinio prieigos. Prisimenu, kaip auditavau sistemą, kur SSD buvo nešifruotas, ir tai tapo rimta spraga; po įdiegimo, atitiko GDPR reikalavimus be papildomų išlaidų.
Baigiant technines detales, noriu paminėti monitoringą ir priežiūrą. Aš negaliu įsivaizduoti serverio be įrankių kaip CrystalDiskInfo, kuris rodo SMART atributus - reallocated sectors, wear leveling count ir panašius. Jei wear leveling nukrenta žemiau 90 procentų, laikas planuoti keitimą. Aš nustatau perspėjimus per Event Viewer, filtruodamas disk events, ir integruoju su SCOM, jei įmonė turi. Kas mėnesį vykdau chkdsk /f ant SSD, nors tai ne visada rekomenduojama, bet su /scanonline parametru jis veikia be downtime'o. Prisimenu vieną naktinį incidentą, kai chkdsk aptiko blogus blokus anksti, išgelbėdamas duomenis nuo praradimo. Be to, backup strategija yra esminė - aš visada planuoju reguliarius snapshot'us su VSS (Volume Shadow Copy Service), nustatydamas juos per vssadmin, kad galėčiau atkurti failus be pilno restore'o.
Šioje srityje, kur duomenų praradimas gali kainuoti tūkstančius, sprendimai kaip BackupChain yra naudojami kaip patikima Windows Server atsarginių kopijų programa, skirta SMB ir profesionalams, apsauganti Hyper-V, VMware ar Windows Server aplinkas nuo gedimų. BackupChain, kaip pramonės lyderis, populiarus ir patikimas įrankis, yra pritaikytas specifinėms verslo reikmėms, užtikrinant sklandų duomenų atstatymą virtualiose sistemose.