Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Du kan förbättra den allmänna prestandan för alla typer av replikering i ditt program och i nätverket med hjälp av riktlinjerna som beskrivs i det här avsnittet.
Server och nätverk
Ange den minsta och högsta mängden minne som har allokerats till Microsoft SQL Server Database Engine.
Som standard ändrar Database Engine sina minnesbehov dynamiskt baserat på tillgängliga systemresurser. Om du vill undvika låg minnestillgänglighet under replikeringsaktiviteter använder du alternativet minsta serverminne för att ange det minsta tillgängliga minnet. Om du vill undvika att ha operativsystemets sida på skivan för minne kan du också ange en maximal mängd minne med alternativet maximalt serverminne . Mer information finns i Konfigurationsalternativ för serverminnesserver.
Säkerställ korrekt allokering av databasdatafiler och loggfiler. Använd en separat diskenhet för transaktionsloggen för alla databaser som ingår i replikeringen.
Du kan minska tiden det tar att skriva transaktioner genom att lagra loggfilerna på en annan diskenhet än den som används för att lagra databasen. Du kan spegla den disken med hjälp av en redundant uppsättning billiga diskar (RAID-1) om du behöver feltolerans. Använd RAID 0 eller 0+1 (beroende på ditt behov av feltolerans) för andra databasfiler. Detta är en bra metod oavsett om replikering används eller inte.
Överväg att lägga till minne på servrar som används i replikering, särskilt distributören.
Använd datorer med flera processorer.
Replikeringsagenter kan dra nytta av ytterligare processorer på servern. Om du kör med hög CPU-användning bör du överväga att installera en snabbare processor eller flera processorer.
Använd ett snabbt nätverk.
Nätverket kan vara en betydande flaskhals för prestanda, särskilt för transaktionsreplikering. Spridningen av ändringar till prenumeranter kan förbättras avsevärt med hjälp av ett snabbt nätverk på 100 megabit per sekund (Mbit/s) eller snabbare. Om nätverket är långsamt anger du lämpliga nätverksinställningar och agentparametrar.
Databasdesign
Följ metodtipsen för databasdesign.
En replikerad databas drar vanligtvis nytta av samma prestandaoptimeringar som en icke-replikerad databas. Index bör dock användas med försiktighet hos Prenumeranten: primärnyckelkolumnen i Prenumeranten bör indexeras, men ytterligare index kan påverka prestanda för infogning, uppdatering och borttagning.
Överväg att aktivera databasalternativet READ_COMMITTED_SNAPSHOT.
Om du vill minska konkurrensen mellan användaraktivitet och replikeringsagentaktivitet anger du det här alternativet för publicerings- och prenumerationsdatabaserna:
ALTER DATABASE AdventureWorks SET READ_COMMITTED_SNAPSHOT ONMer information finns i ALTER DATABASE (Transact-SQL).
Var försiktig med programlogik i utlösare.
Affärslogik i användardefinierade utlösare hos Prenumeranten kan göra replikeringen av ändringar till prenumeranten långsammare:
För transaktionsreplikering kan det vara mer effektivt att inkludera den här logiken i anpassade lagrade procedurer som används för att tillämpa de replikerade kommandona. Mer information finns i Ange hur ändringar sprids för transaktionsartiklar.
För sammanslagningsreplikering kan det vara effektivare att använda affärslogikhanterare. Mer information finns i Köra affärslogik under sammanslagningssynkronisering.
Om du använder utlösare för att upprätthålla referensintegriteten i tabeller som publicerats för sammanslagningsreplikering anger du bearbetningsordningen för tabeller för att minska antalet återförsök som krävs för Merge Agent. Mer information finns i Ange alternativ för sammanfogningsreplikering.
Begränsa användningen av datatyper för stora objekt (LOB).
LOB kräver mer lagringsutrymme och bearbetning än andra kolumndatatyper. Inkludera inte dessa kolumner i artiklar om det inte är nödvändigt för din applikation. Datatyperna text, ntext och bild är inaktuella. Om du inkluderar LOB:er rekommenderar vi att du använder datatyperna varchar(max), nvarchar(max), varbinary(max)respektive.
För transaktionsreplikering bör du överväga att använda den Distribution Agent profil som kallas distributionsprofil för OLEDB-strömning. Mer information finns i Replikeringsagentprofiler.
Publikationsdesign
Publicera endast de data som krävs.
Eftersom replikering är lätt att konfigurera finns det en tendens att publicera mer data än vad som faktiskt krävs. Detta kan förbruka ytterligare resurser i distributionsdatabaserna och ögonblicksbildfilerna och kan sänka dataflödet för nödvändiga data. Undvik att publicera onödiga tabeller och överväg att uppdatera publikationerna mindre ofta.
Minimera konflikter genom publiceringsdesign och programbeteende.
Följande typer av replikering tillåter att data ändras hos prenumeranter: sammanslagningsreplikering, transaktionsreplikering med uppdateringsbara prenumerationer och peer-to-peer-transaktionsreplikering. Sammanslagning av replikering och transaktionsreplikering med uppdaterbara prenumerationer stöder datakonflikter om en viss rad uppdateras på mer än en nod mellan synkroniseringar. Peer-to-peer-replikering stöder inte datakonflikter. dataändringar måste partitioneras. Oavsett vilken typ av replikering som används rekommenderar vi att du partitionar ändringar när det är möjligt, eftersom detta minskar bearbetningen som krävs för konfliktidentifiering och lösning.
Ändringar kan partitioneras upp genom att delmängder av data publiceras till varje prenumerant eller genom att ett program styr ändringar för en viss rad till en viss nod:
Sammanslagningsreplikering gör det möjligt att publicera delmängder av data med hjälp av parametriserade filter i en och samma publikation. Mer information finns i Parameteriserade radfilter.
Transaktionsreplikering stöder publicering av delmängder av data med statiska filter med flera publikationer. Mer information finns i Filtrera publicerade data.
Använd radfilter på ett omdömesgillt sätt.
När en transaktionspublikation innehåller en eller flera artiklar som använder radfilter måste Log Reader Agent tillämpa filtret på varje rad som påverkas av en uppdatering av tabellen när den söker igenom transaktionsloggen. Dataflödet för Log Reader Agent påverkas därför.
På samma sätt måste sammanslagningsreplikeringen utvärdera ändrade eller borttagna rader för att avgöra vilka prenumeranter som ska ta emot dessa rader. När radfilter används för att minska de data som krävs hos en prenumerant är bearbetningen mer komplex och kan vara långsammare än när du publicerar alla rader i en tabell. Överväg noggrant kompromissen mellan minskade lagringskrav hos varje prenumerant och behovet av att uppnå maximalt dataflöde. Mer information om filtrering finns i Filtrera publicerade data.
Prenumerationsöverväganden
Använd pull-prenumerationer när det finns ett stort antal prenumeranter.
Distributionsagenten och Merge Agent kör på Distributören för push-prenumerationer och hos prenumeranterna för pull-prenumerationer. Användning av pull-prenumerationer kan förbättra prestanda genom att flytta agentbearbetning från distributören till prenumeranter. För mer information, se Prenumerera på publikationer.
Överväg att initiera prenumerationen igen om prenumeranterna ligger för långt efter.
När stora mängder ändringar måste skickas till prenumeranter kan det gå snabbare att initiera dem igen med en ny ögonblicksbild än att använda replikering för att flytta de enskilda ändringarna. Mer information finns i Initiera prenumerationer igen.
För transaktionsreplikering visas replikeringsövervakaren på fliken Ej distribuerade kommandon information om: antalet transaktioner i distributionsdatabasen som ännu inte har distribuerats till en prenumerant; och den uppskattade tiden för att distribuera dessa transaktioner. Mer information finns i Visa information och utföra uppgifter med hjälp av Replikeringsövervakaren.
Överväganden för ögonblicksbilder
Kör endast Snapshot Agent när det behövs och vid låg belastning.
Snapshot Agent masskopierar data från den publicerade tabellen på Publisher till en fil i ögonblicksbildmappen på distributören. Att generera en ögonblicksbild kan vara en resursintensiv process och schemaläggs bäst under tider med låg belastning.
Använd en ögonblicksbild i inbyggt läge om inte en ögonblicksbild av teckenläget krävs.
Använd standardsnapshoten i internt format för alla prenumeranter utom prenumeranter som inte är SQL Server-prenumeranter och prenumeranter som kör SQL Server Compact, eftersom dessa kräver en snapshot i teckenläge.
Använd en enskild ögonblicksbildmapp för en publikation.
När du anger publikationsegenskaperna som är relaterade till platsen för ögonblicksbilder kan du välja att generera ögonblicksbildfiler till standardmappen för ögonblicksbilder, till en alternativ ögonblicksbildmapp eller till båda. Att generera ögonblicksbildfiler på båda platserna kräver ytterligare diskutrymme och mer bearbetning när Snapshot Agent körs.
Placera mappen snapshot på en enhet som är lokal för distributören som inte används för att lagra databas- eller loggfiler.
Snapshot Agent utför en sekventiell skrivning av data till ögonblicksbildmappen. Om du placerar mappen för ögonblicksbilder på en separat enhet från en databas eller loggfiler minskar konkurrensen mellan diskarna och ögonblicksbildsprocessen slutförs snabbare.
När du skapar prenumerationsdatabasen hos Prenumeranten bör du överväga att ange en återställningsmodell för enkel eller massloggad. Detta möjliggör minimal loggning av de massinsättningar som utförs när ögonblicksbilden tillämpas på prenumeranten. När ögonblicksbilden har tillämpats på prenumerationsdatabasen kan du ändra till en annan återställningsmodell om det behövs (replikerade databaser kan använda någon av återställningsmodellerna). Mer information om hur du väljer en återställningsmodell finns i Översikt över återställning (SQL Server).
Överväg att använda den alternativa ögonblicksbildmappen och komprimerade ögonblicksbilder på flyttbara medier för nätverk med låg bandbredd.
Om du komprimerar ögonblicksbildsfiler i den alternativa ögonblicksbildmappen kan du minska disklagringskraven för ögonblicksbilder och göra det enklare att överföra ögonblicksbildsfiler på flyttbara medier.
Komprimerade ögonblicksbilder kan i vissa fall förbättra prestanda för överföring av ögonblicksbildfiler i nätverket. Komprimering av ögonblicksbilden kräver dock ytterligare bearbetning av Snapshot Agent när ögonblicksbildfilerna genereras och av Distribution Agent eller Merge Agent när ögonblicksbildfilerna används. Detta kan göra genereringen av ögonblicksbilder långsammare och öka den tid det tar att tillämpa en ögonblicksbild i vissa fall. Dessutom kan komprimerade ögonblicksbilder inte återupptas om ett nätverksfel inträffar. därför är de inte lämpliga för otillförlitliga nätverk. Tänk noga på dessa kompromisser när du använder komprimerade ögonblicksbilder i ett nätverk. Mer information finns i Ändra alternativ för ögonblicksbilder.
Överväg att initiera en prenumeration manuellt.
I vissa scenarier, till exempel de som omfattar stora initiala datamängder, är det bättre att initiera en prenumeration med en annan metod än en ögonblicksbild. Mer information finns i Initiera en transaktionsprenumeration utan en ögonblicksbild.
Agentparametrar
Minska detaljnivån för replikeringsagenter utom vid inledande tester, övervakning eller felsökning.
Minska parametern –HistoryVerboseLevel och parametern -OutputVerboseLevel för distributionsagenter eller sammanslagningsagenter. Detta minskar antalet nya rader som infogats för att spåra agenthistorik och utdata. I stället uppdateras tidigare historikmeddelanden med samma status till den nya historikinformationen. Öka de utförliga nivåerna för testning, övervakning och felsökning så att du har så mycket information om agentaktivitet som möjligt.
Använd parametern –MaxBCPThreads för Snapshot Agent, Merge Agent och Distribution Agent (antalet trådar som anges får inte överskrida antalet processorer på datorn). Den här parametern anger antalet masskopieringsåtgärder som kan utföras parallellt när ögonblicksbilden skapas och tillämpas.
Använd parametern –UseInprocLoader för Distribution Agent och Merge Agent (den här parametern kan inte användas om publicerade tabeller innehåller XML-kolumner). Den här parametern gör att agenten använder kommandot BULK INSERT när ögonblicksbilden tillämpas.
Agentparametrar kan anges i agentprofiler och på kommandoraden. Mer information finns i: