Welcome to Sign in | Help

Re: Sfaturi "Best practices" pt trecere de la 1 file per filegroup la mai multe

  •  04-10-2010, 1:20 AM

    Re: Sfaturi "Best practices" pt trecere de la 1 file per filegroup la mai multe

    Cind ai N file-uri intr-un filegroup SQL va distribui *alocarile* in mod balansat astfel incit fiecare file sa fie la fel de incarcat, proportional. Deci daca ai un file de 30GB care e full 33%, unul de 20GB  care e full 100% si unul de 10GB care e gol si *aloci* 100 de extent-uri (adica cite 8 pagini), ele vor fi alocate proportional cu *spatiul gol* in fiecare file: 67 de alocatii se duce la primul file (care are 20GB liberi) si 33 de alocatii se duc la al treilea (care are 10GB liber).

    Daca creezi o baza de date initiala cu N fieisere egale goale, atunci in mod normal ele se for 'umple' egal in timp.

    De retinut ca 'balansarea' se intimpla doar cind pagini sint *alocate*, deci daca pur si simplu adaugi fisiere nu se va intimpla nimic, initital. In timp se vor umple si balansa, dar initial nu vei vedea nici un efect.

    Ce poti face este:

    1) pui toate 24 de discuri in RAID 10 (12 raid 0 + 12 raid 0 si raid 1 intre cele doua), prezinti la SQL un singur volum si muti MDF-ul pe el. IO va fi stripped intre 12 discuri, si raid 1 it-i va da redundanta. 

    2) pui toate 24 de discuri in RAID10   (cite 2 in raid 1, si un raid 0 peste cele 12 perechi). Similar cu 1), dar este mai usor sa inlocuiesti un disk care face kaboom. Copiezi MDF-ul de 120 Gb pe acest volum, done.

    3) Daca vrei totusi sa imparti I/O-ul prin multiple-files poti sa adaugi un nou filegroup DATA, cu N file-uri egale. Apoi copiezi toate tabelele in DATA (ALTER TABLE ... MOVE TO ...). Apoi shrink PRIMARY filegroup, rezultatul este ca toate datele au fost mutate in alt fielgroup si sa-u balansat intre cele N files.

    4) muti tabelele individual, in functie de ce I/O te astepti.

    Cel mai usor este 1) sau 2). Pentru 4) trebuie sa intelegi bine aplicatia, si sa urmaresti statsitici per rowset (sys.dm_db_index_physical_stats, sys.dm_db_index_usage_stats). 3) este relativ simplu, dar resultatul este la fel ca 1) sau 2), doar ca trebuie/poti controla mai precis ce fisier se duce pe ce volum.

    In principiu mai poti face si sa adaugi N file-uri la PRIMARY si apoi sa faci ALTER INDEX ... ALL ... REBUILD la toate tabele, astfel incit sa se distribuie pe toate fisierele, dar n-as recomanda asta.

    Mai sint si alti factori care pot sa influenteze decizia:

     - vrei sa poti sa faci piece-meal restore? http://msdn.microsoft.com/en-us/library/ms177425.aspx. Trebuie filegroup-uri separate.
     - vrei sa folosesti partitioning si un sliding-window? http://msdn.microsoft.com/en-us/library/aa964122%28SQL.90%29.aspx. *Probabil* ca ai nevoie de filegrou-uri (nu e neaparat nevoie).
     - o sa adaugi o solutie de high-availability, gen Mirroring? gindeste-te cum reproduci in stand-by configuratia fizica din principal (aceleasi volume, aceleasi file path-uri etc)


    http://rusanu.com
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems