Verificare fragmentare index pe o anumita tabela si defragmentarea lui in caz de necesitate

Rezolvare problema (Fix IT)

Situatie

Se intampla deseori ca, dupa un timp, un query sau o procedura care se executa rapid sa se execute mult mai incet, timpul de executie chiar dublandu-se uneori.

 

 

Simptome

Acest lucru se intampla din cauza lipsei de mentenanta asupra obiectelor din bazele de date , iar , in cazul de fata, este vorba despre lipsa de mentenanta asupra indexilor.

Cand ne intalnim cu situatia de mai sus trebuie sa ne uitam in query-ul respectiv (sau in procedura respectiva) sa vedem ce obiecte (tabele) sunt folosite si, pt fiecare in parte, sa verificam fragmentarea indexilor si daca este cazul, sa ii defragmentam.

Solutie

Ca sa putem face acest lucru din interfata trebuie sa intram pe baza respectiva si sa expandam folderul Tables

Mai departe , sub folderul Tables, cautam prima tabela pe care am gasit-o apelata in textul procedurii sau al query-ului si apasam pe semnul +  din stanga ei si apoi expandam folderul Indexes

In folderul Indexes dam click dreapta pe primul index si alegem Properties.

Se va deschide fereastra Index properties, ca mai jos:

In aceasta fereastra dam click pe Fragmentation (in partea stanga) si in partea dreapta se va afisa pe primul rand fragmentarea indexului iar mai jos diferite date despre acest index. (si acele date au rolul lor in fragmentarea sau defragmentarea unui index dar acesta va fi subiectul unui alte postari, pt ca e mult de vorbit despre acele optiuni)

In cazul de fata este vorba despre un index foarte fragmentat, mai exact 87.5%.

Pentru a-l defragmenta dam cancel la fereastra de mai sus dam din nou click dreapta pe index si alegem Reorganize

 

Va fi afisata fereastra Reorganize index, ca mai jos:

Se lasa bifata optiunea Compact large object column data si se da OK.

In functie de cat de mare este tabela respectiv cat de mare este dimensiunea index-ului, reorganizarea lui se va face mai rapid sau mai lent. Pt indexii mici, de cativa MB, se face aproape instant. Pt indexii mari, de cativa GB sau zeci de GB poate dura si cateva ore o reorganizare a lor.

Dupa ce am dat OK , cand defragmentarea este gata, fereastra dispare.

Tocmai am reusit cu succes sa defragmentam un index.

Mergem din nou pe index, dam click dreapta, alegem Properties si meregm din nou pe Fragmentation:

Observam ca fragmentarea a scazut la 60%. Nu este ideal, dar este mult mai bine.

De ce a scazut doar la 60% este o discutie mai lunga, si are legatura in parte cu optiunile de care vorbeam mai sus  (care sunt prezente in fereastra de properties a indexului), dar pe de alta parte are legatura cu modul in care am ales sa facem defragmentarea lui.

Mai exact, dupa ce am dat clik dreapta pe el am ales Reorganize.

Dar, daca mai dam o data clik dreapta pe el observam ca avem si optiunea Rebuild:

Haideti sa alegem aceasta optiune.

Va fi afisata fereastra Rebuild Indexes care este aproape identica cu fereastra Reorganize indexes (cu exceptia optiunii Compact large object column data, care aici nu exista).

Alegem OK si, la fel, dupa ce operatiunea se termina fereastra dispare.

Mergem din nou pe index, click dreapta, Properties si din fereastra de proprietati alegm din nou Fragmentation:

Observam ca fragmentarea a mai scazut, ajungand acum putin sub 54%.

Explicatii pt aceste diferente:

Operatia de Reorganize este o operatie care se executa ONLINE, adica indexul ramane online si ramane valabil pt query-urile care se executa pe server.

Operatia de Rebuild este (pt toate editiile de SQL Server mai putin editia Enterprise de la SQL 2008 R2 in sus) o operatie offline, adica index-ul nu este disponibil pt query-urile care se executa pe server pana nu se termina operatia de Rebuild.

De aceea, in 90% din cazuri o operatia de Rebuild va defragmenta mai bine indexul decat o operatia de Reorganize.

Inca o diferenta mare este ca, daca in timpul operatiei de Reorganize vreau sa opresc aceasta operatie, ce s-a defragmentat pana atunci ramane defragmentat, pe cand, in cazul operatiei de Rebuild, daca opresc aceasta operatie index-ul nu revine online pana nu se face rollback la stadiul initial. (aceast lucru poate dura mult timp, in functie de dimensiunea indexului).

Ca si rezumat, daca avem nevoie sa facem o operatie de defragmentare in timpul programului de lucru probabil ca alegerea corecta este Reorganize.

 

Tip solutie

Permanent

Voteaza

(21 din 46 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?