Mai multe despre optimizare

Documente similare
PowerPoint Presentation

PowerPoint Presentation

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

PHP (II)

PowerPoint Presentation

RZOLVARE EXERCITIU ZODII declare cursor distributie_zodie is select nume_zodie, count(*) distributie from zodiac z join utilizatori u on to_date(to_ch

PowerPoint Presentation

Microsoft Word - Curs_07.doc

PowerPoint Presentation

proiectarea bazelor de date

PowerPoint Presentation

Managementul Resurselor Umane

Aggregating Data

ADRIAN TRIF BAZE DE DATE APLICAŢII ACCESS UTPRESS Cluj-Napoca, 2019 ISBN

Microsoft Word - Curs 11 - PHP.doc

PowerPoint Presentation

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Laborator02

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Baze de date - Anul 2 Laborator 8 Limbajul de definire a datelor (LDD) (partea I) În general, instrucţiunile LDD sunt utilizate pentru definirea struc

Laborator5_SQL_an2

Laborator 3

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Baze de date-Anul 2 (semestrul 2)

Baze de date

Microsoft Word - CarteC.doc

Database Management Systems Cap 2. Structured Query Language (1)

Utilizarea îmbinării corespondenței pentru crearea şi imprimarea scrisorilor şi a altor documente Dacă utilizați îmbinarea corespondenței când doriți

Utilizare Internet

PowerPoint Presentation

Microsoft Word - lab_access.doc

Paradigme de programare

Limbaje de Programare Curs 5 – Siruri de caractere

Prezentarea calculatorului

Paradigme de Programare

Microsoft Word - Fisa disciplinei_BD2_DM_ doc

Limbaje de Programare Curs 6 – Functii de intrare-iesire

PowerPoint Presentation

PowerPoint Presentation

Prezentarea calculatorului

SUBPROGRAME

Declararea variabilelor

Microsoft Word - Fisa disciplinei BD_I_IE doc

Proiectarea Sistemelor Software Complexe

Microsoft Word - 2 ES RO.doc

PowerPoint Presentation

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

PowerPoint Presentation

Lab6LCD

Diapositive 1

Manual de utilizare a Sistemului Informațional al Institutului Național al Justiției (SI INJ) intranet.inj.md Ver.2 Manual de utilizare a Sistemului I

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Dunărea de Jos Galați 1.2 Facultatea Economie și Administr

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Microsoft Word - Ansamblul software CRONIS

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Baze de date-Anul 2

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

Baze de date - Anul 2 Laborator 9 Limbajul de definire a datelor (LDD) - II : Definirea vizualizărilor, secvenţelor, indecşilor, sinonimelor, tabelelo

Carrier Pidgeon Protocol

Platforma 5. 1 Introducere in MSSQL Introducere Pe parcursul ultimilor ani, se poate observa o cuplare a limbajelor de programare majore cu tipuri de

Addendum Syllabus 6 Microsoft Word 2016 REF Syllabus 6.0 Crearea unui document nou pe baza unor șabloane disponibile local sau online Microsoft

Entrepreneurship and Technological Management

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Asupra optimizării procesării cererilor MYSQL pentru creşterea calităţii

CURS

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

PowerPoint-Präsentation

aplicatii java

E_d_Informatica_sp_MI_2015_bar_02_LRO

Documentaţie Tehnică Verificare TVA API Ultima actualizare: 1 ianuarie / 92 1

Subiectul 1

PROIECT DIDACTIC DATE DE IDENTIFICARE Data: Școala : Școala Gimnazială Grigore Moisil Ploiești Clasa: a VI-a Profesor: Ilie Oana Magdalena Disciplina:

Microsoft Word - Curs_10.doc

E_d_Informatica_sp_SN_2014_bar_10_LRO

A.E.F. - suport laborator nr.10 sem.ii Analiza stării de contact între elemente 3D În acest laborator sunt atinse următoarele aspecte: analiza contact

Ingineria Sistemelor de Programare

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

programă şcolară pentru clasa a 11a, liceu

Microsoft Word - O problema cu bits.doc

Astfel funcționează portalul KiTa Dortmund În 3 pași către locația de îngrijire copii Portalul KiTa Dortmund poate fi oper

Carrier Pidgeon Protocol

manual_ARACIS_evaluare_experti_v5

UNIVERSITATEA POLITEHNICA DIN BUCUREȘTI FACULTATEA DE ELECTRONICĂ, TELECOMUNICAȚII ȘI TEHNOLOGIA INFORMAȚIEI TEMĂ DE CASĂ Gestiunea tranzacțiilor în s

Microsoft Word - Apostol & Balaceanu 6p.doc

PROGRAMA DE EXAMEN

Gestiunea serviciilor de recuperare a sănătăţii în sanatorii şi preventorii

Sistemul de Gestiune a Bazelor de Date Access

EXCEL FĂRĂ SECRETE Grafice şi diagrame

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Microsoft Word - WME-versiunea rtf

Transcriere:

Mai multe despre optimizare Seminar 7

Proceduri stocate Avantaje Avantaje de performanță Pe server Reutilizarea planului de execuție Notă: cerințe pentru reutilizarea unui plan Reutilizarea planurilor nu este benefică întotdeauna Nou în SQL Server 2005: Hint-urile pentru interogări OPTIMIZE FOR / RECOMPILE

SET NOCOUNT ON Nu se afișează numărul de rânduri afectate Reduce traficul pe rețea Utilizați numele schemei cu numele obiectului Ajută la găsirea directă a planului compilat SELECT * FROM dbo.mytable; EXEC dbo.storedprocedure;

Nu utilizați prefixul sp_ SQL Server caută întâi în baza de date master și ulterior în baza de date curentă Utilizați UNION pentru a implementa o operație "OR Evitați join-urile între două tipuri de coloane Indecșii nu sunt utilizați pentru coloanele convertite

sp_executesql versus EXEC Planul de execuție al unei instrucțiuni dinamice poate fi reutilizat dacă TOATE caracterele pentru două execuții consecutive sunt identice EXEC('SELECT * FROM Categories WHERE category_id=1;') EXEC('SELECT * FROM Categories WHERE category_id=2;') EXECUTE sp_executesql N'SELECT * FROM Categories WHERE category_id=@category_id;', N'@category_id INT', @category_id=1;

Cursoare În general consumă mult din resursele SQL Server și reduc performanța și scalabilitatea aplicațiilor Sunt mai indicate când: Datele trebuie accesate înregistrare cu înregistrare / logică procedurală Se efectuează calcule ordonate

Nu utilizați COUNT() într-o subinterogare pentru a verifica existența unor date Utilizați IF EXISTS(SELECT 1 FROM table_name;) Output-ul instrucțiunii SELECT imbricate nu este folosit Reduce timpul de procesare și transferul pe rețea Mențineți tranzacțiile scurte Lungimea tranzacțiilor influențează blocările și interblocările

Reutilizarea planului de execuție CREATE PROCEDURE usp_test (@pid INT) AS BEGIN SELECT * FROM Sales.SalesOrderDetail WHERE ProductID=@pid; END;

EXEC usp_test 897;

EXEC usp_test 870;

Hint-urile în interogări specifică faptul că acestea ar trebui folosite pretutindeni în interogare și afectează toți operatorii din instrucțiune Hint-urile sunt specificate în clauza OPTION Dacă optimizatorul (query optimizer-ul) generează un plan care nu este valid din cauza unor query hints, apare eroarea 8622 Query hints sunt recomandate spre a fi folosite doar ca ultimă soluție de către programatori cu experiență și administratori de baze de date (SQL Server query optimizer selectează de obicei cel mai bun plan de execuție pentru o interogare)

OPTIMIZE FOR query hint determină folosirea unei anumite valori pentru o variabilă locală la compilarea și optimizarea unei interogări Exemplu: ALTER PROCEDURE usp_test (@pid INT) AS BEGIN SELECT * FROM Sales.SalesOrderDetail WHERE ProductID=@pid OPTION (OPTIMIZE FOR (@pid=870)); END;

RECOMPILE query hint determină eliminarea planului generat pentru o interogare după execuția acesteia, forțând optimizatorul să recompileze un plan de execuție data viitoare când aceeași interogare este executată Dacă nu se specifică RECOMPILE, Database Engine salvează în cache planurile de execuție și le refolosește La compilarea planurilor de execuție, RECOMPILE query hint folosește valorile curente ale variabilelor locale din interogare și, dacă interogarea se află în interiorul unei proceduri stocate, valorile curente ale parametrilor

RECOMPILE query hint Exemplu: ALTER PROCEDURE usp_test (@pid INT) AS BEGIN SELECT * FROM Sales.SalesOrderDetail WHERE ProductID=@pid OPTION (RECOMPILE); END;

OPTIMIZE FOR UNKNOWN determină folosirea de date statistice în locul valorilor inițiale pentru toate variabilele locale atunci când interogarea este compilată și optimizată, inclusiv parametrii creați cu parametrizare forțată Variabilele locale nu sunt cunoscute la optimizare Exemplul de mai jos generează întotdeauna același plan de execuție ALTER PROCEDURE usp_test (@pid INT) AS BEGIN SELECT * FROM Sales.SalesOrderDetail WHERE ProductID=@pid OPTION (OPTIMIZE FOR UNKNOWN); END;

Exemplul de mai jos generează întotdeauna același plan de execuție ALTER PROCEDURE usp_test (@pid INT) AS BEGIN DECLARE @lpid INT; SET @lpid=@pid; SELECT * FROM Sales.SalesOrderDetail WHERE ProductID=@lpid; END;

Exemplu: DECLARE @city_name VARCHAR(30); DECLARE @postal_code VARCHAR(15); SELECT * FROM Person.Address WHERE City=@city_name AND PostalCode=@postal_code OPTION (OPTIMIZE FOR (@city_name='seattle', @postal_code UNKNOWN));

Alte hint-uri pentru interogări (query hints) HASH GROUP vs ORDER GROUP Exemplu: SELECT ProductID, OrderQty, SUM(LineTotal) AS Total FROM Sales.SalesOrderDetail WHERE UnitPrice < $5.00 GROUP BY ProductID, OrderQty ORDER BY ProductID, OrderQty OPTION (HASH GROUP, FAST 10);

Alte hint-uri pentru interogări MERGE UNION vs HASH UNION vs CONCAT UNION Exemplu: SELECT * FROM HumanResources.Employee AS E1 UNION SELECT * FROM HumanResources.Employee AS E2 OPTION (MERGE UNION);

Hint-uri pentru join LOOP JOIN vs MERGE JOIN vs HASH JOIN Exemplu: SELECT * FROM Sales.Customer AS C INNER JOIN Sales.vStoreWithAddresses AS SA ON C.CustomerID=SA.BusinessEntityID WHERE TerritoryID=5 OPTION (MERGE JOIN); GO

Hint-uri pentru join FAST n determină returnarea primelor n înregistrări cât de repede este posibil După ce sunt returnate primele n înregistrări, interogarea își continuă execuția și produce întregul result set Exemplu: SELECT * FROM Sales.Customer AS C INNER JOIN Sales.vStoreWithAddresses AS SA ON C.CustomerID=SA.BusinessEntityID WHERE TerritoryID=5 OPTION (FAST 10);

Hint-uri pentru join FORCE ORDER forțează optimizatorul să utilizeze ordinea join-urilor ca în interogare SELECT * FROM Table1 INNER JOIN Table2 ON Table1.a=Table2.b INNER JOIN Table3 ON Table2.c=Table3.d INNER JOIN Table4 ON Table3.e=Table4.f OPTION (FORCE ORDER);

Mai multe despre controlarea planurilor de execuție cu ajutorul hint-urilor: https://www.simple-talk.com/sql/performance/controlling-execution-plans-withhints/

Execuția dinamică Dezavantaje Cod urât care este dificil de întreținut Necesită permisiuni directe (în 2000) Risc de securitate - SQL Injection Utilizare inteligentă Sortare și filtre dinamice pentru a obține planuri bune Și altele

Tabele temporare Utile când: Aveți result set-uri intermediare care trebuie să fie accesate de mai multe ori Aveți nevoie de o zonă de stocare temporară pentru date în timp ce executați cod procedural Utilizați tabelele temporare când: Lucrați cu volume mari de date, iar eficiența planurilor este importantă și netrivială Utilizați variabile tabel când: Lucrați cu volume mici de date, iar eficiența planurilor nu este atât de importantă ca recompilările, sau atunci când planurile sunt triviale

Triggers Costisitoare (when rollback, undo as opposed to reject) Impactul mare asupra performanței implică accesarea view-urilor inserted și deleted: SQL Server 2000: transaction log SQL Server 2005: row versioning (tempdb) Stripe transaction log/tempdb when using triggers Încercați să utilizați set-based activities Identificați numărul de înregistrări afectate și reacționați în consecință UPDATE triggers înregistrează delete urmat de insert în log

Opțiuni SQL Server

Fragmentare Fragmentarea are un efect important asupra performanței interogărilor Fragmentare logică: procentul de pagini out-of-order Densitatea paginilor: popularea paginilor Utilizați DBCC SHOWCONTIG pentru a obține statistici legate de fragmentare și examinați LogicalFragmentation și Avg. Page Density (full) Utilizați funcția sys.dm_db_index_physical_stats și analizați AvgFragmentation Reconstruiți indecșii pentru a gestiona fragmentarea

Alte statistici Update statistics asynchronously String summary statistics: frecvența distribuției subșirurilor este menținută pentru coloanele care stochează șiruri de caractere Asynchronous auto update statistics (setat implicit pe off) Statistici pentru coloane calculate sys.dm_exec_query_stats Returnează statistici legate de performanță pentru planurile de execuție din cache Conține câte o înregistrare pentru fiecare query statement din planul aflat în cache, iar durata de existență a înregistrărilor este legată de cea a planului Când un plan este șters din cache, înregistrările care îi corespund sunt eliminate

Alte statistici total_logical_reads/ total_logical_writes numărul total de citiri / scrieri logice efectuate la execuțiile unui plan de când a fost compilat total_physical_reads numărul total de citiri fizice efectuate la execuțiile unui plan de când a fost compilat total_worker_time timpul CPU total utilizat, în microsecunde, pentru execuțiile unui plan de când a fost compilat total_elapsed_time durata totală, în microsecunde, pentru execuțiile încheiate ale unui plan