[pēdējo reizi atjaunots: 2014-06-06]
Datu bāzes optimizācija ir sarežģīts process. Ir simtiem lietu, ko jāzina un jāpielieto praksē, lai datu bāze strādātu pēc iespējas ātri. Šajā sadaļā apkopotas dažas no šīm lietām.Problēmu konstatēšana
SQL vaicājumu veidošana un testēšana parasti notiek SQL Server Management Studio vidē. Strādājot ar šo rīku, vaicājuma efektivitātes analīzei var izmantot kādas no metodēm-
- Vaicājuma IO statistika- (Liels IO var norādīt uz trūkstošiem/sliktiem indeksiem, neveiksmīgiem vaicājuma parametriem, lielu indeksu fragmentāciju/datu lapu pilnumu, neefektīvi uzrakstītu vaicājumu)
- Vaicājumu izpildes laiks- (Var redzēt patērēto procesora laiku un faktisko izpildes laiku. Var apskatīt vaicājuma sagatavošanas ilgumu izpildei- compile time).
- <Plānots: Vaicājuma izpildes plāns>
- SQL Server darbības analīzei neatsverami ir DMV skati un funkcijas. Draudzīgāku informāciju var iegūt izmantojot Catalog Views. Papildus informācijas ieguvei noder SQL Server iebūvētās funkcijas.
- Resursu prasīgākie vaicājumi, procedūras, trigeri
Veidi, kā uzlabot ātrdarbību
Katrs gadījums ir jāpēta atsevišķi un nav viena universāla veida, kā optimizēt datu bāzi. Šeit dažas idejas, kādos virzienos varētu domāt (punkti nav sakārtoti pēc svarīguma, katrs gadījums individuāls):
- SQL Server iestatījumi. Optimizēt lietas, kas visām datu bāzēm ir kopējas. Šajā emuārā:
- SQL Server parametrs: "max server memory (MB)"
- SQL Server parametrs: "max degree of parallelism"
- tempdb failu skaits
- SQL Server: Tūlītēja faila inicializācija
- Indeksi. Šķietami vienkārša lieta. Bieži arī efektīvākais veids, kā panākt labāku ātrdarbību. Tomēr daudzos gadījumos arī mulsinoši rezultāti. Šajā emuārā ir sērija, par indeksiem (patiesībā arī tabulām, indeksētiem skatiem)- Indeksi (pamati), kopsavilkuma raksts. Tomēr ja nav vēlme izskatīt visus rakstus, tad optimizācijas nolūkos vērts aplūkot rakstu- Indeksu apkope un vēl Indeksu izveide. Procesu mazliet varētu atvieglot DMV trūkstošo indeksu iegūšanai.
- Tabulu dalīšana (table partitioning). Glabājot vienu tabulu vairākās fiziskās daļās- Tabulu horizontālā dalīšana (Partitioned Tables).
- Dalīti (partitioned) indeksi
- Indeksu apkope II- ņem vērā dalītus (partitioned) indeksus
- OCV lai apskatītu dalītos (partitioned) objektus
- Faili, failu grupas SQL Server
- Vaicājuma mainīšana. Bieži vien vaicājumu ātrdarbību var uzlabot tikai pamainot vaicājumu.
- Union All. Izmantot katru reizi, kad vien vien pastāv izvēle starp Union un Union All- UNION un UNION ALL ātrdarbības salīdzinājums.
- Where daļā izvairīties no manipulācijām ar indeksa kolonnām- SARG optimizācija. un SARG optimizācija II.
- Izvairīties no Like atslēgvārda- Like atslēgvārds.
- Vaicājuma sadalīšana vairākās daļās
- .. šeit būs vēl
- Aprēķinātās kolonnas (persisted). Ar to palīdzību var samazināt darbību daudzumu, kas jāveic pie katras datu ielasīšanas- Aprēķinātās kolonnas.
- Determinētas funkcijas. Tās ir ātrākas par parastām funkcijām, tomēr salīdzinoši reti kad izmantojamas. Ja funkcijas kā tādas skaitās "sliktas", tad determinētas funkcijas patiesībā var būt ļoti labas- Determinētu funkciju izmantošana.
- Kursori. Kad iespējams, padomāt, vai nav kāds cits, efektīvāks, veids, kā panākt to pašu rezultātu neizmantojot kursorus. Piemēram, izmantojot SQL Server kursors bez kursora un varbūt derīga ideja rakstā Teksta savirknēšana.
<Plānots: Resursu slēgšana (locking)>
<Plānots: Kolonnu un indeksu statistika>
<Plānots: Ārējās atslēgas (foreign keys)>
<Plānots: Transakcijas izolācijas līmeņa mainīšana>