Welcome to Sign in | Help
in Search

fragmentarea orizontala a unui tabel

Last post 11-09-2006, 1:04 PM by xmldeveloper. 8 replies.
Sort Posts: Previous Next
  •  10-11-2006, 9:41 AM 308

    fragmentarea orizontala a unui tabel

    Salut,

    Sunt nou pe aci, si am venit cu o intrebare, deja :). Incerc sa fac ceva teste folosing un sistem distribuit format pentru inceput dintr-un SQL Server 2005 si un MSDE. Vreau sa fac o partitionare orizontala a unui tabel cu cam 1 mil de inregistrari ce exista pe SQL Server 2005, sa zicem in 2-3 bucati. Faza ce ma intereseaza este ca cum as putea sa creez unul dintre fragmente direct pe MSDE-ul care este legat ca si linked server. Am incercat cu functiile create partition function si create partition scheme dar nu imi rezolva problema pentru ca le creaza tot la nivel de SQL Server 2005.

    Vreau sa stiu daca procedez corect, si daca nu as dori o sugestie despre felul in care as putea sa fac o astfel de fragmentare orizontala pe 2 sau mai multe servere de SQL si apoi pentru clienti sa fie absolut transparent chestia de fragmentare.

     

    Merci mult,

    Daniel.
     

     


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
    Filed under:
  •  10-11-2006, 10:55 AM 311 in reply to 308

    Re: fragmentarea orizontala a unui tabel

    Aruncati o privire aici: Understanding Federated Database Servers


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  10-11-2006, 2:03 PM 317 in reply to 308

    Re: fragmentarea orizontala a unui tabel

    Va dau o idee: duceti o parte din randuri (din numarul de 1 milion) pe o baza de date de pe MSDE (tinand cont si de limitarile de performanta), si anume pe acelea rar folosite sau de data veche (istoricul) si apoi construiti linked servers pe SS2005 care trebuie sa fie motorul principal al sistemului dvs.

     


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  10-11-2006, 2:07 PM 318 in reply to 317

    Re: fragmentarea orizontala a unui tabel

    Vreau sa va intreb, ar fi mai bine ca in loc de MSDE sa folosesc SQL 2005 Express, tinand cont de performanta?? Mai ales ca MSDE nu este obligatoriu sa faca parte din acest sistem distribuit.

    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  10-11-2006, 3:00 PM 319 in reply to 318

    Re: fragmentarea orizontala a unui tabel

    Desigur, la SQL 2005, limitarile de performanta de care vorbeam aici sunt mai putin restrictive ca la MSDE de exemplu, dimensiunea maxima

    a bazei de date a crescut la 4 Gb (de aceea sugeram un calcul al dimensionii celor 1 milion de randuri care sa respecte acest lucru).


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  10-11-2006, 6:29 PM 323 in reply to 319

    Re: fragmentarea orizontala a unui tabel

    In plus SQL Express nu mai are limitarea de utilizatori.

    In MSDE peste 5 conexiuni simultane performanta este limitata.

    http://blogs.msdn.com/sqlexpress/archive/2004/07/01/171005.aspx


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  10-12-2006, 3:08 PM 338 in reply to 323

    Re: fragmentarea orizontala a unui tabel

    Multumesc pentru informatii si linkuri.

     

    Daniel  

     


    MCP (C Sharp)
    Software Engineer,
    Cluj Napoca
  •  11-09-2006, 11:07 AM 814 in reply to 311

    Re: fragmentarea orizontala a unui tabel

    xmldeveloper:

    Articolul asta e destul de vag, nu prea intra in detalii. Pentru a arata cat de "tare" e SQL Server 2000, Microsoft a realizat o implementare cu servere multiple care la vremea respectiva (2000) era cea mai mare baza de date expusa pe Internet (daca nu ma insel 140TB) si continea o vasta colectie de fotografii realizate de satelitii NASA. Iata cum se face concret o asemenea implementare:

    - Se defineste baza de date principala (front-end server) pe SQL Server Enterprise Edition (singurul care suporta Indexed Views), cu un calcul atent de planning astfel incat acest server sa poata gazdui tabelele mici, indecsii tabelei principale si un TEMPDB "generos";

    - Se defineste baza de date pe cateva servere secundare (back-end servers), si se implementeaza acolo doar tabela principala, apoi aceste servere se declara ca linked servers in serverul principal; aici Microsoft a folosit tot Enterprise Edition (ca merge mai bine si nu a trebuit sa-si cumpere licente), dar in principiu putem sa folosim si editii mai ieftine;

    - Se declara pe serverul front-end un Indexed View care concateneaza datele tabelei principale distribuite pe serverele back-end si care e folosit pe post de tabela principala in aplicatie.

    - Se implementeaza un algoritm de hashing prin care sa se decida pe care din serverele back-end trebuie sa stea un anume rand din tabela principala (la n servere valorile hash sunt 0..n-1);

    - Se declara pe Indexed View triggere INSTEAD OF INSERT, INSTEAD OF UPDATE si INSTEAD OF DELETE, care folosing algoritmul de hashing de mai sus delega respectiva operatie serverului back-end responsabil cu respectivul rand de date.

    Trebuie sa remarcam ca aceasta implementare nu scaleaza orizontal prea grozav: nu putem sa mai adaugam inca un server back-end cand vrem noi, pentru ca asta implica schimbarea algoritmului de hash si ar necesita salvarea si re-incarcarea datelor. Putem totusi dubla numarul de servere si muta jumatate din date pe serverele noi, dar asta implica oricum operatii manuale si script-uri custom.

    De asemenea, SQL Server nu e prea "tare" in calcule sau manipulari de string-uri, asa ca calcularea hash-ului pune unele probleme in SQL Server 2000 (Microsoft a folosit o procedura "extinsa", adica scrisa in C++, ca sa evite penalitatile de performanta); aici vestea buna e ca in SQL Server 2005 aceasta problema se poate rezolva elegant implementand algoritmul de hash intr-o functie .NET.

     


    Petru Moldovan, MCSE, MCDBA
  •  11-09-2006, 1:04 PM 816 in reply to 814

    Re: fragmentarea orizontala a unui tabel

    Cred ca era vorba de TerraServer http://www.terraserver.microsoft.com/about.aspx?n=AboutTechSql

    SQL Server 2005 are propria functie de hash - HashBytes.


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems