Infrastructura IT pentru întreprinderea dvs.
dezvoltatorii de aplicații și baze de date sunt susceptibile să se confrunte cu o foarte lungă de funcționare de utilități, cum ar fi BCP (programul de export de date), serviciul de date DTS și replicarea datelor, cantități mari de backup de date într-o varietate de surse. De exemplu, transmiterea imaginii de bază, care conține 500 MB de date, cu constrângeri asupra chei și indexurile între două servere puternice cu patru procesoare cu memorie RAM și 1 GB de disc matrice RAID 5 ar avea nevoie de 2 ore în timpul orelor de lucru sau de 1,5 ore pe timp de noapte. O astfel de performanță este inacceptabil pentru serverele industriale cu ceas de încărcare sau starea de stocare a datelor distribuite întreprindere în care modul de timp în afara orelor de vârf este prea mic pentru a asigura transferul unor cantități mari de date la toate serverele. Deci, cum puteți accelera procesul de distribuire a datelor necesare?
Mă voi concentra asupra faptului că doriți să optimizați procesul de copiere a imaginilor mari de date. Replicarea unui instantaneu de date copiază un set de date din SQL Server inițial când se numește replicare, chiar dacă alte cereri și modificări ale acelorași date apar simultan. Replicarea unui instantaneu copiază acest set de date imediat sau mai târziu pe un alt server SQL. SQL Server care primește datele le vede ca pe serverul sursă în momentul copierii, până când următoarea replicare actualizează setul complet de date. DTS copiază setul de date din sursa ODBC (sau OLE DB) la alt receptor ODBC țintă imediat. Atât sursa, cât și receptorul pot fi complet diferite furnizori de date ODBC. Bcp copiază un tabel sau o vizualizare de la SQL Server într-un format de fișier nativ, un fișier de caractere sau invers, dintr-un fișier într-o tabelă sau vizualizare a SQL Server.
Cum funcționează replicarea instantaneelor
În a doua etapă de distribuție a agentului de distribuție a agentului copii .bcp set de fișiere în baza de date sursă (abonatul) cu utilitarul distrib.exe. snapshot.exe si utilitati distrib.exe folosi BCP pentru a copia articolele la un moment dat, Instantaneu Agent copiază datele în punerea în aplicare fișierele .bcp din SELECT a unei propoziție simplă, care poate conține o coloană de filtru și clauza WHERE (pentru a filtra rândurile). Agentul Snapshot scrie apoi seturile de rezultate în fișierele .bcp. În cazul în care copiile agent de distribuție (inserări) fișierele .bcp într-un tabel de baze de date, este necesar să se elimine linia existentă, și introducerea de înregistrare și îndepărtarea, și reconstrui indexurile.
Înainte de începerea celei de-a doua etape a replicării datelor, trebuie să creați un mediu de lucru pentru acest lucru. Luați în considerare pașii care se efectuează implicit pentru a configura replicarea instantaneelor.
Ecranul 1: Atribuirea diferiților agenți de distribuție în diferite publicații.
Conectarea instantaneelor și alocărilor către agentul de distribuție. Funcția Enterprise Manager determină automat sarcina SQL Server pentru fiecare Agent de distribuție. Acești agenți efectuează replicarea trecând prin etapele de activitate. În mod implicit, activitatea agentului constă în trei faze - mesajul de pornire a agentului de logare, executarea agentului și detectarea opririi agentului necunoscut. Pe ecranul 3, acești pași sunt afișați în fila Steps din fereastra de proprietăți CGIS1-EGH-28 Properties-CGIS1. Ecranul 4 afișează comanda care rulează la stadiul Run agent atunci când se utilizează snapshot.exe.
Ecranul 4. Comanda pentru a porni Agentul Snapshot.
Sintaxa completă a comenzii este:
Figura 2. Fișiere script T-SQL (.idx) pentru definirea indexurilor schemelor.
În cele din urmă, datele sunt salvate în fișiere .bcp. Fiecare dintre articole are un set de fișiere cu extensia .sch. idx și .bcp.
De asemenea, în mod implicit, lucrarea Agent de distribuție efectuează aceiași pași ca Agentul instantaneu. Cu toate acestea, în faza Agent de execuție, distribuția.exe rulează, așa cum se vede în codul din ecranul 5. Sintaxa completă pentru această comandă este:
Ecranul 5. Comanda pentru a rula agentul de distribuție.
În primul rând, fișierul executabil distrib.exe aplică scheme din fișierele cu extensia .sch la baza de date de abonament (pentru confort am numit-o pasul sch). Următorul pas folosește fișierele .bcp pentru a suprascrie fișierele .bcp din tabelele create în etapa sch (pasul bcp). În cele din urmă, indexurile sunt utilizate din fișiere cu extensia .idx (pas idx).
Fișierul executabil Snapshot.exe generează un set de fișiere cu extensiile .sch și .idx în conformitate cu proprietățile articolului care sunt setate în fila Snapshot din dialogul de proprietăți al articolului corespunzător. De exemplu, așa cum se arată în ecranul 6,
Ecranul 6. Setați proprietatea articolului.
Selectarea șterge datele din tabelul existent care se potrivește cu declarația de filtru rând ( «șterge datele din tabelele existente, care se potrivesc cu starea filtrului") sub forma numită proprietate ADDRESS caseta de dialog, adăugați comanda DELETE FROM [adresa] în fișierul .sch (a se vedea. Figura 1) pentru articolul ADDRESS. Cu toate acestea, dacă selectați Ștergeți toate datele din tabelul existent (folosind trunchiază) ( «șterge toate datele din tabelele existente (folosind trunchiază)») (cm. Ecranul 6), va comanda TRUNCATE TABLE [ADRESA].
Figura 1. Fișiere de script T-SQL (.sch) pentru definirea schemei de articole.
Unde se așteaptă interferențele
Agenții instantanee și de distribuție își îndeplinesc sarcinile în funcție de sarcină, însă câteva astfel de sarcini pot interfera cu performanța serverului de baze de date, ceea ce va afecta negativ performanța. Să evaluăm performanța agenților prin aplicarea unui set standard de criterii.
Introducerea criteriilor de performanță. Pentru a determina timpul de execuție al unei aplicații, puteți evalua empiric implementarea acesteia sau puteți evalua matematic algoritmul acesteia. În această secțiune, voi face, și evaluarea empirică și matematică a implementării pașii agenților pentru a compara rezultatele obținute prin diferite metode. Pentru a studia timpul necesar, se consideră matematic că timpul de execuție al algoritmului crește cu creșterea cantității de date la intrare. Tendința de creștere a timpului de execuție arată modul în care algoritmul se calculează bine cu sarcina. De exemplu, dacă timpul petrecut pe dimensiunea de prelucrare a datelor n, crește liniar cu creșterea numărului de date (de exemplu, procesarea 1000 înregistrări durează 2 secunde, un tratament de 10 mii de intrări este de 20 sec.), Atunci timpul de execuție a algoritmului - liniar cu dimensiunea date. Această tendință de creștere în funcție de cantitatea de date se numește un algoritm dependent de timp și desemnat ca O (n) (sau din ordinul n) la o funcție liniară de timp. Algoritmul, care este întotdeauna completat în același timp, indiferent de cât de mult de date este solicitată pentru a introduce o valoare constantă în funcție de timpul pe care am desemnat ca O (c).
Întrucât agentul instantaneu nu încetinește replicarea instantaneului, agentul de distribuție trebuie să învinovățească totul. Aplicarea formulelor la pașii acestui agent vă va spune unde se produce interferența.
Optimizarea vitezei de execuție
Evident, interferența care apare atunci când utilizatorii încearcă să copieze o cantitate mare de date pot face inutilizarea replicării imaginilor la scară largă. Cu toate acestea, pot fi luate măsuri pentru a evita aceste probleme.
A scăpa de interferența cauzată de o instrucțiune DELETE. Puteți elimina cu ușurință obstacolele care creează o instrucțiune DELETE în etapa sch, alegând opțiunea „șterge toate datele din tabelul existent (folosind trunchiază)» pe fila Instantaneu în proprietățile de dialog articol caseta, ecranul 6. Ca rezultat, vom obține trunchia comanda
în loc de DELETE FROM
Din păcate, această idee nu funcționează din două motive. În primul rând, s-ar putea crede că ar trebui să utilizați .idx fișier creat agent instantaneu, în scopul de a recrea constrângerile cheie externă și indicii care au fost șterse script personalizate. Cu toate acestea fișier .idx nu include restricții privind cheile primare și unice, deoarece .idx Instantaneu Agent surprinde aceste chei ca indici în fișierul. De exemplu, în figura 2 UNIQUE fascicular INDEX [PK_ADDRESS] condiție cauzată de o cheie primară numit [PK_ADDRESS], dar continuă să existe doar ca un index. În al doilea rând, deși @schema_option sp_addarticle procedură stocată parametru vă permite să dezactivați script-agent instantaneu, și de a folosi parametrul @creation_script, setările parametrilor @creation_script dezactiva, de asemenea, generarea de .sch și fișiere script .idx. Prin urmare, nici un fișier .idx nu este disponibil pentru a reconstrui indexurile, fișierele șterse @creation_script. Setarea parametrului @creation_script într-un script personalizat nu atinge obiectivul.
Configurarea replicării instantanee
Ecranul 7. S-au modificat pașii de activitate pentru agentul de distribuție.
Ne adaptăm la mediul nostru
Singurul obstacol pentru optimizarea constă în faptul că între etapele picătură și recrea locuri de muncă agent de alocare pas meniurile, șterge toate indexurile și cheile de toate tabelele destinație pentru un singur abonat. Indici și chei de la distanță pot provoca executarea simultană a cererilor de încetinire și violare a constrângerilor cheie în timpul acestei ferestre. Cu toate acestea, pentru cele mai multe înclinat numai pentru citire cerință principală de stocare a datelor este că sincronizarea depozit de date și datele trimise trebuie să se facă rapid în cadrul a limitat afara orelor de vârf, cu un sprijin minim de cereri concurente. Optimizarea este adaptată foarte bine la aceste condiții.
Figura 3. Un exemplu de plan de execuție pentru clauza DELETE.
De ce nu replicarea tranzacțională?
Poate că cineva a avut o întrebare de ce nu am considerat replicarea tranzacțională să distribuie doar modificările într-un instantaneu mare către serverele vizate. Să analizăm un exemplu din lumea reală care ilustrează motivul alegerii mele. Deși utilizați replicarea tranzacțională, puteți să copiați numai modificările în loc de întregul instantaneu, ceea ce ar reduce foarte mult dimensiunea datelor, replicarea tranzacțională nu este aplicabilă în multe situații. De exemplu, sistemul de informații geografice (GIS) în care lucrez suportă o aplicație GIS care combină datele cu privire la un plan de sit, costul acestuia și utilizarea sa dorită. Cu toate acestea, aceste servicii nu sunt deservite de serviciile orașului. În schimb, două grupuri separate în fiecare dintre cele trei tabele, taxele și terenurile (precum și departamentul de construcții), sprijină datele în diferite formate. Un instantaneu complet al datelor din planul site-ului vine în formatul CAD Microstation? S, iar imaginile estimării costurilor și datelor de destinație ajung într-un format de text cu delimitatori. Aplicația GIS se așteaptă să prezinte date din tabelul SQL Server, nu aceste fișiere, așa că trebuie să importați fișierele în baza de date, să convertiți datele din diferite surse într-un singur set de scheme și să eliminați duplicate. De asemenea, deoarece fișierele importate sunt imagini complete în loc de un set de modificări și conversia nu este deloc una, stocarea unui set secvențial de modificări de date este prea dificilă și nu merită timpul. Descărcarea, conversia și îmbinarea seturilor complete de date externe este mai simplă și mai eficientă. Pentru a furniza un set complet de date importate către mai multe site-uri, copiem instantaneul complet.
În plus, dacă selectați opțiunea Ștergeți toate datele din tabela existentă (cu TRUNCATE) în caseta de dialog proprietăți articol, noul script elimină constrângerile cheii externe pentru tabela destinație din baza de date de subscriere prin executarea Noua procedură stocată sp_Msdropfkreferencingarticle în baza de date master. Trebuie reținut că agentul de distribuție nu restaurează aceste chei la distanță până la sfârșitul lucrării de replicare a instantaneului. Pasul de recreare în cazul meu restabilește toate constrângerile cheie și indici.
Distribuiți materialul împreună cu colegii și prietenii