SQL Data Sync är en tjänst från Azure som möjliggör bidirektionella synkroniseringsrelationer mellan SQL Database och SQL Server-installationer. Tjänsten använder en toppologi i form av en hubb och noder, där en SQL-databas fungerar som hubb-databas och andra databaser är medlemmar i synkroniseringsgruppen. Trafiken mellan dessa databaser sker enbart mellan hubb-databasen och medlemmarna, vilket gör att synkroniseringen är effektiv och kontrollerad. Förutom dessa databaser ingår även en synkroniseringsmetadata-databas, som innehåller loggar och metadata för själva synkroniseringsprocessen.

SQL Data Sync underlättar användningen av hybridlösningar genom att synkronisera en lokal SQL Server-databas med en Azure SQL Database. Detta ger ett flexibelt sätt att hantera både on-premises och molnbaserade databaser. En annan användning av SQL Data Sync är att skapa synkroniserade kopior av en databas för att dela upp arbetsbelastningen. En kopia kan hantera inkommande förfrågningar, medan den andra kan användas för dataanalys, vilket effektiviserar hanteringen av tunga arbetsbelastningar.

För att komma igång med SQL Data Sync öppnar administratören en befintlig SQL-databasinstallation i Azure-portalen, väljer den databas som ska synkroniseras, och aktiverar alternativet "Sync to other databases" under menyn för databasadministration. När synkroniseringsgruppen har skapats kan administratören lägga till medlemmar från både andra Azure SQL Database-installationer och on-premises SQL Server-databaser. För att lägga till en lokal SQL Server-databas krävs det att Azure SQL Data Sync Agent installeras på servern, vilket gör det möjligt att koppla den lokala databasen till synkroniseringsgruppen.

Det är också viktigt att notera att SQL Data Sync endast stöder SQL-databaser som körs på Azure SQL Database och SQL Server som medlemmar i en synkroniseringsgrupp. Azure SQL Managed Instance stöds inte för närvarande. När medlemmarna har lagts till i gruppen kan administratören välja specifika tabeller för synkronisering och antingen manuellt starta synkroniseringen eller schemalägga den för att köras vid en viss tidpunkt.

För att genomföra en migrering till Azure finns det olika verktyg som administratörer kan använda. Azure erbjuder flera alternativ för att migrera SQL-databaser, både från on-premises miljöer till molnet och mellan olika Azure SQL-tjänster. Genom att använda verktyg som Azure Database Migration Service och Azure Migrate kan migreringen göras på ett effektivt sätt, även om stora mängder data behöver flyttas. En annan lösning för att överföra stora datamängder till Azure är Azure Data Box, som erbjuder både offline- och online-alternativ för datatransfer.

När det gäller migreringar inom Azure, till exempel från en SQL-databasinstallation till en annan, kan det göras genom att exportera data via SQL Server Management Studio och SQL Server Import och Export Wizard. Detta gör det möjligt för administratörer att skapa failover-databaser i andra geografiska regioner eller för att öka redundansen och tillgängligheten.

För organisationer som planerar att migrera sina SQL Server-databaser från on-premises till Azure, finns det flera faktorer att överväga. Kompatibiliteten mellan SQL-produkterna som används, de resurser som krävs för databaserna och eventuella driftstopp som kan behövas för en offline-migrering är avgörande för att säkerställa att migreringen blir smidig och utan större avbrott.

I samband med migreringen bör administratörer överväga de olika produktalternativen inom Azure SQL-tjänster. Azure SQL Database erbjuder tjänstenivåer som baseras på antingen Database Transaction Units (DTU) eller vCore. Den så kallade serverlösa nivån gör att Azure allokerar beräkningskapacitet efter behov och endast debiterar användaren för de sekunder som resurserna faktiskt används. För mer kritiska affärssystem erbjuder Azure SQL Managed Instance tre olika nivåer: General Purpose, Next-gen General Purpose, och Business Critical, där den sistnämnda nivån erbjuder högre prestanda och extra redundans med tre repliker.

Migrering från en lokal SQL Server-installation till Azure innebär också att man behöver beakta kompatibiliteten hos olika SQL-produkter och om det finns krav på specifika resurser eller om migreringen kan genomföras utan att orsaka längre driftstopp.

Det är också viktigt att förstå hur tjänster som Azure SQL Managed Instance och Azure SQL Database kan användas för att skapa redundans och öka tillgängligheten genom geografisk spridning av databaser, samt hur olika nivåer av säkerhet och backup-lösningar kan användas för att skydda data vid migration.

Hur man säkrar data i olika tillstånd: En översikt av SQL:s krypteringstekniker

När det gäller att skydda data är det avgörande att förstå de olika tillstånden som data kan befinna sig i. Dessa tillstånd, data i vila, data under överföring och data i användning, innebär olika säkerhetsutmaningar som kräver olika lösningar. Genom att känna till dessa tillstånd kan administratörer säkerställa att känslig information är skyddad i alla situationer.

Data i vila refererar till data som är lagrad på en enhet och inte är aktivt i rörelse. Denna typ av data kräver skydd mot intrång och obehörig åtkomst. För att säkra denna typ av data används tekniker som Transparent Data Encryption (TDE), där hela databasen krypteras för att förhindra att data kan öppnas av obehöriga. SQL Server, Azure SQL Database och Azure SQL Managed Instance erbjuder TDE som standard. Men för databaser skapade före 2017 i Azure SQL Database eller innan 2019 i Azure SQL Managed Instance, måste TDE aktiveras manuellt av administratören.

TDE använder en serie kryptografiska nycklar och digitala certifikat, där den faktiska krypteringen utförs av en Data Encryption Key (DEK). Denna nyckel är i sin tur skyddad av en TDE-protector, som kan vara antingen en automatisk nyckel hanterad av Azure eller en kundhanterad nyckel. Denna flexibilitet ger administratörer möjlighet att anpassa nyckelhanteringen för att uppfylla specifika säkerhetskrav.

Data under överföring, eller data i rörelse, är ett annat kritiskt tillstånd som kräver skydd. Här kan data vara sårbar för avlyssning och man-in-the-middle-attacker om den inte är tillräckligt skyddad. För att hantera detta tillstånd används protokoll som Transport Layer Security (TLS) för att säkra kommunikationen mellan applikationer och servrar. Det är viktigt att komma ihåg att även om nätverket mellan databas och applikation är krypterat, så förblir data okrypterad när den laddas in i minnet och är i användning.

Data i användning är den tredje typen av datatillstånd, och den är särskilt svår att skydda eftersom data ofta laddas till RAM eller CPU-cache där den inte kan krypteras effektivt av standardmekanismer. SQL Server tillhandahåller dock en lösning genom att erbjuda objektbaserad kryptering, där specifika objekt, som kolumner i en tabell, krypteras och förblir skyddade tills de når den applikation som har den rätta krypteringsnyckeln.

"Always Encrypted" är en funktion i SQL som gör det möjligt att kryptera specifika objekt i databasen, till exempel en kolumn som innehåller känslig information, som ett personnummer eller kreditkortsinformation. När den här funktionen är aktiverad, krypteras data alltid, både när den är i vila och under överföring. Databasmotorn ser aldrig den okrypterade versionen av data, vilket ger ett extra skyddslager. Enbart den applikation som har den rätta nyckeln kan dekryptera och visa den känsliga informationen.

För att implementera Always Encrypted krävs det att administratören väljer vilka objekt som ska krypteras och definierar vilken typ av kryptering som ska användas. Detta sker via SQL Server Management Studio (SSMS), där administratören kan använda Always Encrypted-guiden för att välja de kolumner som ska krypteras. En viktig aspekt av denna process är att välja om "Secure Enclaves" ska aktiveras, vilket ger bättre kompatibilitet med krypterad data vid frågor som behöver access till krypterade objekt.

För att skydda SQL-databaser ytterligare används brandväggsregler på både server- och databasnivå. Dessa regler definierar vilka IP-adresser som har tillgång till servern eller databasen, vilket skapar ett första skydd mot obehörig åtkomst. Det är viktigt att dessa regler är noggrant konfigurerade för att säkerställa att endast auktoriserade användare och applikationer kan komma åt känslig information. Azure SQL Database erbjuder en enkel metod för att skapa och hantera dessa brandväggsregler genom Azure-portalen.

Utöver dessa tekniska lösningar bör administratörer också vara medvetna om den potentiella risken med hantering av krypteringsnycklar. När en kundhanterad TDE-nyckel används, är det administratörens ansvar att hantera nyckelns livscykel, inklusive skapande, uppladdning, rotation och säkerhetskopiering. En nyckel som går ut eller tas bort kan leda till att åtkomsten till alla krypterade databaser stoppas, vilket kan få allvarliga konsekvenser för verksamheten.

När det gäller säkerheten för databaser är det inte bara den tekniska implementeringen som är viktig. Det är också avgörande att förstå och hantera användarbehörigheter på ett korrekt sätt. Även om administratörer har åtkomst till databaser för att hantera systemet, betyder det inte att de bör ha rätt att se alla data. För att minimera risken för otillåten åtkomst till känslig information, såsom socialförsäkringsnummer eller kreditkortsinformation, kan det vara nödvändigt att implementera striktare åtkomstkontroller och använda kryptering på objektiv nivå för att hålla data säker.

Hur Query Store kan förbättra databasens prestandaövervakning och felsökning

För att aktivera Query Store för en databas med hjälp av T-SQL, kan följande kommando köras:

sql
ALTER DATABASE database_name SET QUERY_STORE = ON

I en Azure SQL-databas eller elastic pool kan inte Query Store inaktiveras. Försök att köra kommandot ALTER DATABASE med parametern SET QUERY_STORE = OFF kommer att generera ett felmeddelande som säger att inställningen OFF inte stöds. I SSMS återställs inställningen för Operation Mode (Requested) till "Read Write" om en administratör försöker ändra den till "Read Only" eller "None".

Förutom att aktivera och inaktivera Query Store, ger egenskaperna på Query Store-sidan i SSMS och kommandot ALTER DATABASE i T-SQL administratörer möjlighet att konfigurera en mängd Query Store-parametrar. En grundläggande parameter är Max Size (MB), som anger hur mycket databaslagringsutrymme som tilldelas till Query Store. Standardvärdet är 1 000 MB för SQL Server 2019 och senare eller 100 MB för tidigare versioner. I Azure SQL Database varierar de standardvärdena beroende på serviceplan, från 10 MB för Basic till ett maximalt värde på 10 240 MB.

När Query Store når den maximala storleken byter det från läs-/skrivläge till läsläge, vilket innebär att prestandaanalysen blir föråldrad. Statistikens insamlingsintervall kan ställas in för att specificera hur ofta statistik från frågor ska samlas i en rad i Query Store. Den här inställningen kan vara särskilt användbar när det gäller att optimera lagring och prestanda för stora databaser. Standardvärdet är 60 minuter, men mindre intervall ger mer detaljerad data, vilket kan öka lagringens belastning.

Query Store ger också en viktig parameter för att hantera föråldrad statistik, nämligen "Stale Query Threshold (Days)". Detta parameter specificerar retentionstiden för statistik om förfrågningar som inte längre är aktiva. Standardvärdet är 30 dagar, vilket gör att databasen kan hantera och rensa äldre data utan att belasta lagring och prestanda.

En annan viktig inställning är "Size Based Cleanup Mode", som specificerar om SQL Server ska utföra automatisk rensning när Query Store når 90 % av sin maximala storlek. Den här inställningen rensar bort de äldsta och minst kostsamma frågorna i storet tills lagringsutrymmet minskar till 80 %.

Vid övervakning av databaser med hjälp av Query Store får administratören tillgång till en mängd rapporter som kan ge detaljerad insikt om databassystemets prestanda och eventuella problem. Till exempel ger "Regressed Queries"-rapporten en lista på frågor som upplever degraderad prestanda, och en lista med planerna som är associerade med dessa frågor. Denna rapport gör det möjligt att identifiera om det finns ändringar i exekveringsplaner som leder till prestandaproblem. Den här informationen kan vara avgörande för att avgöra om det är nödvändigt att optimera eller omvandla specifika förfrågningar.

I "Overall Resource Consumption"-rapporten visas grafer som, som standard, visar fråga-exekveringstider, antal exekveringar, CPU-tid som förbrukats och I/O-läsningar för en viss tidsperiod. Administratörer kan välja alternativ data för att justera visningen enligt behov och fokusera på de resurser som är viktigast för deras databas. Ytterligare rapporter som "Top Resource Consuming Queries" gör det möjligt för administratörer att lista frågor som har konsumerat de största mängderna av en viss resurs, såsom CPU-tid eller minnesanvändning.

Query Store kan också användas för att visa frågor med "Forced Plans". Detta innebär att en administratör tvingat en specifik plan att användas för en fråga, vilket gör att SQL-serverns frågeoptimerare försöker använda den tvingade planen före alla andra alternativ. Om den tvingade planen misslyckas, väljer optimeraren alternativt en annan plan. Genom att visa prestanda för tvingade planer kan administratörer följa upp deras effektivitet över tid.

Ett annat användbart verktyg i Query Store är "Queries With High Variation"-rapporten. Denna visar frågor med de högsta standardavvikelsevärdena för förbrukning av en viss resurs, och kan hjälpa administratörer att identifiera frågor som orsakar prestationsförseningar. Genom att analysera dessa frågors variabilitet kan man vidta åtgärder för att förbättra deras stabilitet och minska prestandaproblem.

Den sista rapporten som tas upp här är "Query Wait Statistics". Denna visar de frågor som har haft de största väntetiderna i en viss kategori, som genomsnittliga väntetider eller totala väntetider. Att övervaka väntetider är avgörande för att kunna identifiera flaskhalsar och optimera databasens prestanda.

För att ytterligare förstå och förbättra databasens prestanda är det viktigt att identifiera sessioner som orsakar blockering. Blockering är en situation där en transaktion försöker få åtkomst till data som är låst av en annan transaktion. Vanligtvis leder blockering inte till stora problem eftersom transaktioner vanligtvis blockerar varandra under korta perioder, men när blockeringen varar länge kan den orsaka allvarliga prestandaförsämringar.

Det är viktigt att förstå orsakerna till blockering och hur man kan åtgärda dessa problem. En vanlig orsak till blockering är långvariga transaktioner som modifierar många resurser, vilket kan blockera andra transaktioner under lång tid. Dålig databasdesign, felaktiga frågor eller dålig SQL-transaktionsdesign är andra vanliga orsaker till blockering.

Det finns också en funktion som heter Auto-commit, som per default implicit lägger till BEGIN TRANSACTION och COMMIT TRANSACTION vid varje fråga. Detta innebär att alla förändringar i databasen görs automatiskt i slutet av varje fråga, vilket kan bidra till en ökad risk för blockering om transaktioner inte hanteras effektivt.

Hur man analyserar och optimerar SQL-databasens prestanda genom att använda intelligenta insikter och indexunderhåll

För att säkerställa att en SQL-databas fungerar optimalt, krävs en noggrann övervakning och analys av både faktiska och uppskattade exekveringsplaner. Genom att använda funktioner som SHOWPLAN_ALL och STATISTICS PROFILE i T-SQL, kan administratörer få detaljerad information om hur en fråga kommer att köras eller faktiskt har körts, vilket är avgörande för att identifiera potentiella flaskhalsar. När SHOWPLAN_ALL är aktiverad visar SQL Server uppskattad exekveringsplan utan att faktiskt köra frågan, vilket ger en förhandsvisning av hur frågan kommer att behandlas av servern. När STATISTICS PROFILE är aktiverat, å andra sidan, körs frågan och både resultat och exekveringsplan visas, vilket ger administratören en exakt bild av prestanda under körning.

Intelligent Insights är en annan viktig funktion i Azure SQL Database och Azure SQL Managed Instance som utnyttjar artificiell intelligens för att övervaka databasaktiviteter. Den identifierar snabbt potentiella orsaker till prestandaförsämring, analyserar dessa problem och genererar rekommendationer för förbättringar. Genom att jämföra arbetsbelastningen under den senaste timmen med föregående vecka, identifierar Intelligent Insights de mest kostsamma frågorna, de som tar längst tid att köra, eller de som körs mest frekvent. Detta är särskilt användbart för att snabbt lokalisera fel, långvariga väntetider, tidsgränser och andra problem.

En av de mest kraftfulla förmågor som Intelligent Insights erbjuder är att den kan detektera och föreslå lösningar för specifika prestandamönster. Bland dessa mönster ingår att SQL nära gränserna för resursanvändning, en oväntad ökning av arbetsbelastningen som påverkar prestandan, minnesproblem som orsakar väntetider, låsning av för mycket data som hämmar andra operationer, samt identifiering av saknade index som skulle kunna förbättra databasens prestanda.

När Intelligent Insights identifierar problem, analyserar den de uppkomna symtomen och skapar en diagnostisk logg, SQLInsights, som vanligtvis specificerar orsaken till problemet och ger rekommendationer om vilka åtgärder administratören bör vidta.

En annan viktig aspekt av SQL-databasens underhåll är indexhantering. Index kan, om de inte underhålls korrekt, bli fragmenterade, vilket allvarligt kan påverka databasens prestanda. När SQL Server genomför insättningar, uppdateringar eller borttagningar på en databas, modifieras också de index som är associerade med datan. Om indexet ofta måste dela upp sidor för att lägga till data, uppstår fragmentering. Ju högre fragmenteringen är, desto fler I/O-operationer krävs för att läsa samma mängd data, vilket påverkar prestandan negativt.

För att hantera indexfragmentering kan administratörer använda SQL Server Management Studio (SSMS) eller T-SQL för att kontrollera nivåerna av fragmentering och siddensitet. I SSMS kan administratören högerklicka på ett index och visa dess fragmenteringsegenskaper, vilket gör det möjligt att identifiera problematiska index. Det är också möjligt att använda DMV (Dynamic Management Views) som sys.dm_db_index_physical_stats för att få denna information direkt genom T-SQL.

För att minska fragmenteringen finns två huvudsakliga metoder: Reorganize och Rebuild. En reorganisering är en online-operation som omarrangerar och kompakterar indexsidor utan att kräva stora resurser, och bör användas när fragmenteringen är mellan 5 och 30 procent. Om fragmenteringen är över 30 procent är det mer lämpligt att utföra en ombyggnad av indexet. Ombyggnaden är en mer resurskrävande process men kan avsevärt förbättra prestandan genom att återskapa indexet från grunden. Administratörer kan välja mellan att utföra dessa operationer online, vilket tillåter SQL Server att fortsätta behandla frågor, eller offline, vilket kan ge snabbare resultat men innebär att alla data är låsta tills ombyggnaden är klar.

En viktig aspekt av dessa indexunderhållsprocesser är att de inte alltid garanterar prestandaförbättring. I vissa fall kan de resultera i högre resursförbrukning utan att förbättra prestandan märkbart. Därför är det rekommenderat att administratörer endast utför dessa åtgärder när det finns tydlig dokumentation och data som visar att det verkligen finns ett behov.

Förutom indexunderhåll och användningen av Intelligent Insights, bör SQL-administratörer också vara medvetna om andra underhållsstrategier som statistisk underhåll, dataintegritetskontroller och konfiguration av automatiserad justering för att säkerställa en kontinuerlig optimering av databassystemets prestanda.

Hur kan Resource Governor och databasnivåkonfigurationer förbättra SQL Server och Azure SQL-prestanda?

Resource Governor är inaktiverat som standard i både SQL Server och Azure SQL Managed Instance. För att aktivera den måste administratörer använda SSMS, gå till hanteringssidan i objektutforskaren, högerklicka på Resource Governor och välja egenskaper från snabbmenyn. På sidan för Resource Governor-egenskaper, som visas i figur 3-37, klickar administratören på kryssrutan "Enable Resource Governor". För att aktivera den via T-SQL, kan följande kommando köras:

sql
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO

När Resource Governor är aktiverat kan administratörer skapa arbetsbelastningsgrupper för att kontrollera resursallokeringen till olika arbetsbelastningar på samma server. Genom att skapa resurspooler, som innehåller en delmängd av serverns CPU, minne och lagringsresurser, kan de styra tilldelningen av resurser. Delar av varje pool överlappar med andra poolers resurser för att maximera användningen, medan en annan del är dedikerad till just den poolen.

SQL Server erbjuder även många konfigurationsinställningar på servernivå, men för nyare funktioner finns det inställningar som är specifika för varje databas. Administratörer kan nu konfigurera databasspecifika inställningar, vilket innebär att konfigurationen kan skräddarsys för varje databas. För att göra detta finns två T-SQL-kommandon: ALTER DATABASE och ALTER DATABASE SCOPED CONFIGURATION.

Med ALTER DATABASE kan administratörer konfigurera inställningar som databasens återhämtningsmodell, automatisk justering, statistikunderhåll och mer. Specifika inställningar som tidigare var servernivåinställningar kan nu konfigureras på databasnivå, exempelvis MaxDOP, användning av äldre kardinalitetsestimering, samt query plan-optimering. Dessa inställningar ger ökad kontroll över varje databas prestanda och beteende.

När man arbetar med SQL på Azure är det viktigt att förstå hur man kan skala upp och ned resurser. Azure erbjuder olika servicenivåer, inklusive General Purpose, Business Critical och Hyperscale. Dessa nivåer är anpassade för olika arbetsbelastningar, och möjliggör flexibilitet vid justering av beräknings- och lagringsresurser beroende på användarens behov. Skalning av datalagring sker utan driftstopp, medan beräkningsresurser kan skalas genom omstart av servern.

För större arbetsbelastningar kan den Business Critical-nivån eller Hyperscale vara mer lämplig, där Hyperscale tillåter mycket stora databaser med upp till 100 TB lagring. VCore-modellen är populär då den möjliggör mer flexibla installationer, särskilt i stora miljöer.

För att optimera prestanda ytterligare har SQL Server 2017, 2019 och 2022 introducerat intelligent query processing (IQP). IQP är en uppsättning funktioner som är designade för att förbättra prestanda och hantera tidigare problem. Dessa funktioner är nu också tillgängliga i Azure SQL Database och Azure SQL Managed Instance. För att aktivera IQP-funktionerna måste databasen vara inställd på kompatibilitetsnivå 110 eller högre. Administratörer kan enkelt kontrollera och justera kompatibilitetsnivån för databasen i SSMS.

När det gäller att justera SQL Server-inställningar för bästa prestanda, bör administratörer vara medvetna om att många av de moderna funktionerna som förbättrar resursanvändning och arbetsbelastningshantering är särskilt användbara i molnbaserade miljöer som Azure. Där kan SQL-instanser skalas efter behov, vilket ger en extremt flexibel och kostnadseffektiv lösning för företag som hanterar stora eller fluktuerande arbetsbelastningar.

Genom att konfigurera resursanvändning på både server- och databasnivå samt genom att använda funktioner som Resource Governor och IQP kan administratörer maximera prestanda, säkerställa effektiv resursanvändning och optimera hanteringen av stora mängder data.