Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

MERGE utasítás Komponálható DML GROUPING SETS Adattömörítés Csillag Join és Bitmap Filter Sparse oszlopok Filtered index Full Text Kereső Megbízható.

Hasonló előadás


Az előadások a következő témára: "MERGE utasítás Komponálható DML GROUPING SETS Adattömörítés Csillag Join és Bitmap Filter Sparse oszlopok Filtered index Full Text Kereső Megbízható."— Előadás másolata:

1

2

3 MERGE utasítás Komponálható DML GROUPING SETS Adattömörítés Csillag Join és Bitmap Filter Sparse oszlopok Filtered index Full Text Kereső Megbízható függőségek Profiler Deprecation események Apróságok

4 INSERT/UPDATE/DELETE egy művelettel INSERT/UPDATE/DELETE egy művelettel Gyorsabb, mint a külön I/U/D – 1x megy végig a táblákon Gyorsabb, mint a külön I/U/D – 1x megy végig a táblákon Adatbetöltésekre Adatbetöltésekre UPSERT eljárásokhoz UPSERT eljárásokhoz Szinkronizáló alkalmazásokhoz Szinkronizáló alkalmazásokhoz A műveletek egy tranzakcióban futnak A műveletek egy tranzakcióban futnak merge into Cel using Forras on Forras.Id = Cel.Id when matched then update set Cel.Adat = Forras.Adat,... update set Cel.Adat = Forras.Adat,... when target not matched then insert (Id, Adat,...) insert (Id, Adat,...) values(Forras.Id, Forras.Adat,...) values(Forras.Id, Forras.Adat,...) when source not matched then delete; merge into Cel using Forras on Forras.Id = Cel.Id when matched then update set Cel.Adat = Forras.Adat,... update set Cel.Adat = Forras.Adat,... when target not matched then insert (Id, Adat,...) insert (Id, Adat,...) values(Forras.Id, Forras.Adat,...) values(Forras.Id, Forras.Adat,...) when source not matched then delete; merge into Cel using Forras on Forras.Id = Cel.Id when matched and (Forras.OszlopN <> Cel.OszlopN) then update set Cel.Adat = Forras.Adat,... update set Cel.Adat = Forras.Adat,... when target not matched then insert (Id, Adat,...) insert (Id, Adat,...) values(Forras.Id, Forras.Adat,...) values(Forras.Id, Forras.Adat,...) when source not matched then delete; merge into Cel using Forras on Forras.Id = Cel.Id when matched and (Forras.OszlopN <> Cel.OszlopN) then update set Cel.Adat = Forras.Adat,... update set Cel.Adat = Forras.Adat,... when target not matched then insert (Id, Adat,...) insert (Id, Adat,...) values(Forras.Id, Forras.Adat,...) values(Forras.Id, Forras.Adat,...) when source not matched then delete;

5 Adatmódosító műveletek által érintett sorok felhasználása „virtuális” táblaként Későbbi verzióban nem csak insert lehet a művelet célja insert into Egyiktábla(Oszlop) select Oszlop1 from (update MásikTábla Set Oszlop1 = Újérték output inserted.Oszlop1) as d; insert into Egyiktábla(Oszlop) select Oszlop1 from (update MásikTábla Set Oszlop1 = Újérték output inserted.Oszlop1) as d;

6 { MERGE, Komponálható DML } Komponálható DML }

7 A GROUP BY kibővítése Több feltétel szerinti csoportosítás Egy eredményhalmazt ad vissza (több GROUP BY és UNION ALL-lal helyettesíthető) Egyszerűsíti a többféle szempont szerint aggregálásokat Gyorsabb mint a UNION-os megoldás Újrahasznosítja a részeredményeket Egyszer megy végig a forrásadatokon SELECT C1, C2, …, Cn, Agg(M1), …, Agg(Mk) FROM T GROUP BY GROUPING SETS ((G1), (G2), …, (Gx)) SELECT C1, C2, …, Cn, Agg(M1), …, Agg(Mk) FROM T GROUP BY GROUPING SETS ((G1), (G2), …, (Gx))

8 SELECT D.CalendarYear, D.CalendarQuarter, T.SalesTerritoryCountry, SUM(F.SalesAmount) AS SalesAmount FROM dbo.FactResellerSales F INNER JOIN dbo.DimDate D ON F.OrderDateKey = D.DateKey INNER JOIN dbo.DimSalesTerritory T ON F.SalesTerritoryKey = T.SalesTerritoryKey GROUP BY GROUPING SETS ( (CalendarYear, CalendarQuarter, SalesTerritoryCountry), (CalendarYear, CalendarQuarter), (SalesTerritoryCountry),()) ORDER BY CalendarYear, CalendarQuarter, SalesTerritoryCountry SELECT D.CalendarYear, D.CalendarQuarter, T.SalesTerritoryCountry, SUM(F.SalesAmount) AS SalesAmount FROM dbo.FactResellerSales F INNER JOIN dbo.DimDate D ON F.OrderDateKey = D.DateKey INNER JOIN dbo.DimSalesTerritory T ON F.SalesTerritoryKey = T.SalesTerritoryKey GROUP BY GROUPING SETS ( (CalendarYear, CalendarQuarter, SalesTerritoryCountry), (CalendarYear, CalendarQuarter), (SalesTerritoryCountry),()) ORDER BY CalendarYear, CalendarQuarter, SalesTerritoryCountry Ország Év, negyedév Országonkénti összes Idő- szaki összes Teljes összeg Év, negyedév, ország összes

9 Táblák és indexek tartalmát tárolja tömörítve Elsősorban adattárházak tény tábláihoz (mert a módosításokat kicsit lassítja) Lehetségesen gyorsabb lekérdezések IO intenzív lekérdezések esetén Kevesebb IO „költség” De több CPU „költség” 2-7-szeres tömörítés A többi szolgáltatás számára észrevétlen

10 Sor tömörítés fix adatok változó hosszúságú kódolása (int, decimal, stb.) Lap tömörítés Prefix enkódolás Adatszótár használata (hashtable-szerű működés) BLOB adatok (varchar(max) stb.) nem tömörítettek Megoldások: saját függvény, saját típus, alkalmazás tömörít, FILESTREAM tömörített NTFS-en alamizsna 3dár 4uszi 0lakatos aladár alamizsna alamuszi lakatos  Anchor sor

11 Mennyi nyereség várható? Bekapcsolás táblára Indexre alter table Tába rebuild with (data_compression = page vagy row) alter table Tába rebuild with (data_compression = page vagy row) alter index Indexnév on Tábla rebuild with (data_compression = page vagy row); alter index Indexnév on Tábla rebuild with (data_compression = page vagy row); exec sp_estimate_data_compression_savings 'Séma', 'Tábla', Index id, Partíció, 'row' vagy 'page'

12 Új, belső módszer csillagtáblákra épülő JOIN- ok gyorsítására Hatalmas, n x 100 millió soros táblákra is Bloom Filter implementáció Feltételek Egyoszlopos, egyenlőség alapú JOIN Integer a legjobb, in-row optimization Csak párhuzamos végrehajtási tervben A Tény tábla legyen a legnagyobb Sok szál és memória kell hozzá

13 “Sparse” attribútum az oszlopon Tárolás optimalizálás: 0 bájt a NULL értékek tárolása NULL tömörítés a TDS (drót) szinten Az alkalmazások nem látnak belőle semmit Max. 30000 egy táblán XML-ként is láthatók és módosíthatók a sparse oszlopok (Sparse Column Set) Gyorsabb lehet mint a többtáblás (Entity-Attribute-Value) design Entity-Attribute-ValueSparse

14 Az adatok egy {részhalmazára} épített nonclustered index Kicsi index, kicsi IO Sparse oszlopokkal rendelkező táblákra is kiváló, csak a tényleges (nem NULL) adatokat indexelve create nonclustered index idx_BOF on Production.BillOfMaterials (ComponentID, StartDate) where EndDate IS NOT NULL create nonclustered index idx_BOF on Production.BillOfMaterials (ComponentID, StartDate) where EndDate IS NOT NULL

15 { Sparse oszlopok, Filtered Index, Filtered Index, Powershell integráció } Powershell integráció }

16 Full-Text motor és az indexek teljesen integráltak Katalógus, az index és a nem indexelendő szavak listája (stoplist) az adatbázisban lakik A motor is az adatbázisban fut! (a szótördelés nem) Jobb teljesítmény Vegyes lekérdezések (FullText & Relációs) gyorsabbak Az optimalizáló tud a FT indexről FileStream integrált Nyitottá vált, látható minden működési részlet és adat SELECT * FROM candidates WHERE CONTAINS(resume,’”SQL Server”’) --FT index AND ZipCode = ‘2049’ --SQL index

17 A függőségek {név} és id alapján is rögzítődnek A késleltetett névfeloldás miatt SQL Server 2005 csak id-t használt Adatbázisok és szerverek közötti hivatkozásokat is követi! sys.sql_expression_dependencies Általános ki-kitől függ alaptábla sys.dm_sql_referenced_entities Kire hivatkozik? sys.dm_sql_referencing_entities Ki hivatkozik rá?

18 { Full Text kereső, Függőségek } Függőségek }

19 Jelzik, ha olyan szolgáltatást használunk, amit már nem fognak támogatni Deprecation Announcement Kerüljük, mert már nem támogatják a jövőben declare @ int; set @ = 9 ALTER DATABASE AdventureWorks SET TORN_PAGE_DETECTION ON Deprecation Final Support Már a következő verzió se támogatja sp_addserver SELECT … FROM Sales.SalesOrderDetail COMPUTE SUM(UnitPrice) BY SalesOrderID

20 CONVERT hexa támogatás Sor konstruktor (VALUES) Értékadó operátorok: +=, -=, *=, /=, … Változó inicializálás létrehozáskor INSERT INTO Contact VALUES ('John Doe', '425-333-5321'), ('Jane Doe', '206-123-4567'), ('John Smith', '650-434-7869'); INSERT INTO Contact VALUES ('John Doe', '425-333-5321'), ('Jane Doe', '206-123-4567'), ('John Smith', '650-434-7869'); UPDATE Raktárkészlet SET Mennyiség += s.Mennyiség FROM Raktárkészlet AS r INNER JOIN Eladások AS r ON r.id = e.id UPDATE Raktárkészlet SET Mennyiség += s.Mennyiség FROM Raktárkészlet AS r INNER JOIN Eladások AS r ON r.id = e.id DECLARE @v int = 5; DECLARE @v1 varchar(10) = 'xxx'; DECLARE @v int = 5; DECLARE @v1 varchar(10) = 'xxx'; DECLARE @b binary(4) = CAST(1234567890 as binary(4)) SELECT CONVERT(varchar(30), @b, 1) -- 0x075BCD15 DECLARE @b binary(4) = CAST(1234567890 as binary(4)) SELECT CONVERT(varchar(30), @b, 1) -- 0x075BCD15

21 Fejlesztőknek XML újdonságok Entity Framework Filestream Spatial típusok HierarchyID Integration Services Analysis Services Reporting Services Üzemeltetőknek Szabály alapú felügyelet AuditTitkosításTömörítésFüggőségekMonitorozásOptimalizálás Resource Governor

22

23 { Kezdés 13:25-kor }


Letölteni ppt "MERGE utasítás Komponálható DML GROUPING SETS Adattömörítés Csillag Join és Bitmap Filter Sparse oszlopok Filtered index Full Text Kereső Megbízható."

Hasonló előadás


Google Hirdetések