Netwrix sql server change reporter обзор программы для аудита sql server
SQL Server 2008 { Á ttekintés 2. r ész }
description
Transcript of SQL Server 2008 { Á ttekintés 2. r ész }
MERGE MERGE utasításutasítás
KomponálhatóKomponálható DML DML
GROUPING SETSGROUPING SETS
AdattAdattömörítésömörítés
Csillag Join és Bitmap FilterCsillag Join és Bitmap Filter
Sparse Sparse oszlopokoszlopok
Filtered indexFiltered index
Full Text Full Text KeresőKereső
Megbízható függőségekMegbízható függőségek
Profiler Deprecation Profiler Deprecation események események
ApróságokApróságok
• INSERT/UPDATE/DELETE egy mINSERT/UPDATE/DELETE egy művelettelűvelettel• Gyorsabb, mint Gyorsabb, mint a a kkülön I/U/D – 1x megy végig a táblákonülön I/U/D – 1x megy végig a táblákon
• AdatbetöltésekreAdatbetöltésekre• UPSERT eljárásokhozUPSERT eljárásokhoz• Szinkronizáló alkalmazásokhozSzinkronizáló alkalmazásokhoz
• A műveletek egy tranzakcióban futnakA műveletek egy tranzakcióban futnak
merge into merge into Cel Cel usingusing Forras Forras onon Forras.Id = Cel.Id Forras.Id = Cel.Id
when matched then when matched then
update set Cel.Adat = Forras.Adatupdate set Cel.Adat = Forras.Adat, ..., ...
when target not matched then 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 when source not matched then delete;then delete;
merge into merge into Cel Cel usingusing Forras Forras onon Forras.Id = Cel.Id Forras.Id = Cel.Id
when matched and when matched and (Forras.OszlopN <> Cel.OszlopN) (Forras.OszlopN <> Cel.OszlopN)
then then
update set Cel.Adat = Forras.Adatupdate set Cel.Adat = Forras.Adat, ..., ...
when target not matched then 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 when source not matched then delete;then delete;
Adatmódosító műveletek által érintett Adatmódosító műveletek által érintett sorok felhasználása „virtuális” táblakéntsorok felhasználása „virtuális” táblaként
Későbbi verzióban nem csak insert lehet Későbbi verzióban nem csak insert lehet a művelet céljaa művelet célja
insert into Egyiktábla(Oszlop) select Oszlop1 from(update MásikTáblaSet Oszlop1 = Újérték output inserted.Oszlop1) as d;
A GROUP BY kibővítéseA GROUP BY kibővítéseTöbb feltétel szerinti csoportosításTöbb feltétel szerinti csoportosítás
Egy eredményhalmazt ad visszaEgy eredményhalmazt ad vissza(több GROUP BY és UNION ALL-lal helyettesíthető)(több GROUP BY és UNION ALL-lal helyettesíthető)
Egyszerűsíti a többféle szempont szerint Egyszerűsíti a többféle szempont szerint aggregálásokataggregálásokat
Gyorsabb mint a Gyorsabb mint a UNION-os megoldásUNION-os megoldásÚjrahasznosítja a részeredményeketÚjrahasznosítja a részeredményeket
Egyszer megy végig a forrásadatokonEgyszer megy végig a forrásadatokon
SELECT C1, C2, … , Cn, Agg(M1), … , Agg(Mk) FROM T GROUP BY GROUPING SETS ((G1), (G2), … , (Gx))
SELECT D.CalendarYear, SELECT D.CalendarYear,
D.CalendarQuarter,D.CalendarQuarter,
T.SalesTerritoryCountry,T.SalesTerritoryCountry,
SUM(F.SalesAmount)SUM(F.SalesAmount) AS SalesAmount AS SalesAmount
FROM dbo.FactResellerSales FFROM dbo.FactResellerSales F
INNER JOIN dbo.DimDate D INNER JOIN dbo.DimDate D
ON F.OrderDateKey = D.DateKeyON F.OrderDateKey = D.DateKey
INNER JOIN dbo.DimSalesTerritory T ONINNER JOIN dbo.DimSalesTerritory T ON
F.SalesTerritoryKey = F.SalesTerritoryKey =
T.SalesTerritoryKeyT.SalesTerritoryKey
GROUP BY GROUPING SETS (GROUP BY GROUPING SETS (
(CalendarYear, CalendarQuarter, (CalendarYear, CalendarQuarter,
SalesTerritoryCountry),SalesTerritoryCountry),
(CalendarYear, CalendarQuarter),(CalendarYear, CalendarQuarter),
(SalesTerritoryCountry),(SalesTerritoryCountry),
())())
ORDER BY CalendarYear, ORDER BY CalendarYear,
CalendarQuarter, CalendarQuarter,
SalesTerritoryCountrySalesTerritoryCountry
Ors
zág
Év, negyedév
Országonkénti összes
Idő-szakiösszes
Teljes összeg
Év, negyedév, ország összes
Táblák és indexek tartalmát tárolja tömörítveTáblák és indexek tartalmát tárolja tömörítveElsősorban adattárházak tény tábláihoz (mert a Elsősorban adattárházak tény tábláihoz (mert a módosításokat kicsit lassítja)módosításokat kicsit lassítja)
Lehetségesen gyorsabb lekérdezésekLehetségesen gyorsabb lekérdezésekIO intenzív lekérdezések eseténIO intenzív lekérdezések esetén
Kevesebb IO „költség”Kevesebb IO „költség”
De több CPU „költség”De több CPU „költség”
2-7-szeres tömörítés2-7-szeres tömörítés
A többi szolgáltatás számára észrevétlenA többi szolgáltatás számára észrevétlen
Sor tömörítésSor tömörítésfix adatok változó hosszúságú kódolása (int, decimal, stb.)fix adatok változó hosszúságú kódolása (int, decimal, stb.)
Lap tömörítésLap tömörítésPrefix enkódolás Prefix enkódolás
Adatszótár használata (hashtable-szerű működés)Adatszótár használata (hashtable-szerű működés)
BLOB adatok (varchar(max) stb.) nem tBLOB adatok (varchar(max) stb.) nem tömörítettekömörítettekMegoldások: Megoldások: sajsaját függvény, saját típus, alkalmazás tömörít, át függvény, saját típus, alkalmazás tömörít, FILESTREAM tömörített NTFS-enFILESTREAM tömörített NTFS-en
alamizsna
3dár
<null>
4uszi
0lakatos
aladár
alamizsna
alamuszi
lakatos
Anchor sor
Mennyi nyereség várható?Mennyi nyereség várható?
Bekapcsolás tábláraBekapcsolás táblára
IndexreIndexre
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);
exec sp_estimate_data_compression_savings 'Séma', 'Tábla', Index id, Partíció, 'row' vagy 'page'
Új, belső módszer csillagtáblákra épülő JOIN-Új, belső módszer csillagtáblákra épülő JOIN-ok gyorsításáraok gyorsítására
Hatalmas, n x 100 millió soros táblákra isHatalmas, n x 100 millió soros táblákra is
Bloom Filter implementációBloom Filter implementáció
FeltételekFeltételekEgyoszlopos, egyenlőség alapú JOINEgyoszlopos, egyenlőség alapú JOIN
Integer a legjobb, in-row optimizationInteger a legjobb, in-row optimization
Csak párhuzamos végrehajtási tervbenCsak párhuzamos végrehajtási tervben
A Tény tábla legyen a legnagyobbA Tény tábla legyen a legnagyobb
Sok szál és memória kell hozzáSok szál és memória kell hozzá
““Sparse”Sparse” attribútum az oszlopon attribútum az oszloponTárolás optimalizálásTárolás optimalizálás: : 0 bájt a NULL értékek tárolása0 bájt a NULL értékek tárolása
NULL NULL tömörítés a tömörítés a TDSTDS (drót) szinten (drót) szinten
Az alkalmazások nem látnak belőle semmitAz alkalmazások nem látnak belőle semmit
Max. 3Max. 30000 egy t0000 egy táblánáblán
XML-ként is láthatók és módosíthatók a sparse XML-ként is láthatók és módosíthatók a sparse oszlopok (Sparse Column Set)oszlopok (Sparse Column Set)
Gyorsabb lehet mint a többtáblás Gyorsabb lehet mint a többtáblás (Entity-Attribute-Value) design(Entity-Attribute-Value) design
Entity-Attribute-Value Sparse
Az adatok egy Az adatok egy {{részhalmazárarészhalmazára}} épített épített nonclustered indexnonclustered index
Kicsi index, kicsi IOKicsi index, kicsi IO
Sparse oszlopokkal rendelkező táblákra Sparse oszlopokkal rendelkező táblákra isis kiváló, csak a tényleges (nem NULL) kiváló, csak a tényleges (nem NULL) adatokat indexelveadatokat indexelve
create nonclustered index idx_BOFon Production.BillOfMaterials (ComponentID, StartDate)where EndDate IS NOT NULL
Full-Text Full-Text motor és az indexek teljesen integráltakmotor és az indexek teljesen integráltakKatalógusKatalógus, , az az index index és a nem indexelendő szavak listája (stoplist) az és a nem indexelendő szavak listája (stoplist) az adatbázisban lakikadatbázisban lakik
A motor is az adatbázisban fut!A motor is az adatbázisban fut! (a sz (a szótördelés nemótördelés nem))
Jobb teljesítményJobb teljesítményVegyes lekérdezések (FullText Vegyes lekérdezések (FullText & & Relációs) gyorsabbakRelációs) gyorsabbak
Az optimalizáló tud a FT indexrőlAz optimalizáló tud a FT indexről
FileStream integráltFileStream integrált
Nyitottá vált, látható minden működési részlet és adatNyitottá 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
A függőségek A függőségek {{névnév}} és id alapján is rögzítődnek és id alapján is rögzítődnekA késleltetett névfeloldás miattA késleltetett névfeloldás miatt
SQL Server 2005 csak id-t használtSQL Server 2005 csak id-t használt
Adatbázisok és szerverek közötti hivatkozásokat is Adatbázisok és szerverek közötti hivatkozásokat is követi!követi!
sys.sql_expression_dependenciessys.sql_expression_dependenciesÁltalános ki-kitől függ alaptáblaÁltalános ki-kitől függ alaptábla
sys.dm_sql_referenced_entitiessys.dm_sql_referenced_entitiesKire hivatkozik?Kire hivatkozik?
sys.dm_sql_referencing_entitiessys.dm_sql_referencing_entitiesKi hivatkozik rá?Ki hivatkozik rá?
Jelzik, ha olyan szolgáltatást használunk, Jelzik, ha olyan szolgáltatást használunk, amit már nem fognak támogatniamit már nem fognak támogatni
Deprecation AnnouncementDeprecation AnnouncementKerüljük, mert már nem támogatják a jövőbenKerüljük, mert már nem támogatják a jövőben
declare declare @@ int; set @ = 9 int; set @ = 9
ALTER DATABASE AdventureWorksALTER DATABASE AdventureWorksSET SET TORN_PAGE_DETECTIONTORN_PAGE_DETECTION ON ON
Deprecation Final SupportDeprecation Final SupportMár a következő verzió se támogatjaMár a következő verzió se támogatja
sp_addserversp_addserver
SELECT SELECT … … FROM Sales.SalesOrderDetailFROM Sales.SalesOrderDetailCOMPUTECOMPUTE SUM(UnitPrice) BY SalesOrderID SUM(UnitPrice) BY SalesOrderID
CONVERT hexa támogatásCONVERT hexa támogatás
Sor konstruktor (VALUES)Sor konstruktor (VALUES)
Értékadó operátorokÉrtékadó operátorok: +=, -=, *=, /=: +=, -=, *=, /=, …, …
Változó inicializálás létrehozáskorVá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');
UPDATE RaktárkészletSET Mennyiség += s.MennyiségFROM 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 @b binary(4) = CAST(1234567890 as binary(4))SELECT CONVERT(varchar(30), @b, 1) -- 0x075BCD15
FejlesztőknekFejlesztőknekXML újdonságokXML újdonságok
Entity FrameworkEntity Framework
FilestreamFilestream
Spatial típusokSpatial típusok
HierarchyIDHierarchyID
Integration ServicesIntegration Services
Analysis ServicesAnalysis Services
Reporting ServicesReporting Services
ÜzemÜzemeleltetőknektetőknekSzabály alapú Szabály alapú felügyeletfelügyelet
AuditAudit
TitkosításTitkosítás
TömörítésTömörítés
FüggőségekFüggőségek
MonitorozásMonitorozás
OptimalizálásOptimalizálás
Resource GovernorResource Governor
{{ Kezdés 13:25-Kezdés 13:25-kor kor }}