Felsökning av anslutningsproblem och andra fel i Azure SQL Database och Azure SQL Managed Instance
Gäller för:Azure SQL DatabaseAzure SQL Managed Instance
Du får felmeddelanden när anslutningen till Azure SQL Database eller Azure SQL Managed Instance misslyckas. Dessa anslutningsproblem kan orsakas av omkonfiguration, brandväggsinställningar, en tidsgräns för anslutning, felaktig inloggningsinformation eller om du inte tillämpar metodtips och designriktlinjer under programdesignprocessen . Om den maximala gränsen för vissa Azure SQL Database- eller SQL Managed Instance-resurser nås kan du inte längre ansluta.
Kommentar
Du kan använda Azure SQL Anslut ivity Checker för att identifiera och åtgärda en mängd olika anslutningsfel till Azure SQL Database, Azure SQL Managed Instance och i Azure Synapse Analytics-miljöer.
Tillfälliga felmeddelanden (40197, 40613 och andra)
Azure-infrastrukturen har kapacitet att dynamiskt omkonfigurera servrar vid ökad arbetsbelastning i SQL Database-tjänsten. Den här dynamiska funktionen kan göra att ditt klientprogram förlorar anslutningen till databasen eller instansen. Den här typen av felvillkor kallas för ett tillfälligt fel. Databasomkonfigurationshändelser inträffar på grund av en planerad händelse (till exempel en programvaruuppgradering) eller en oplanerad händelse (till exempel en processkrasch eller belastningsutjämning). De flesta omkonfigurationshändelser är vanligtvis kortvariga och bör ta mindre än 60 sekunder att slutföra. Dessa händelser kan dock ibland ta längre tid att slutföra, till exempel när en stor transaktion orsakar en långvarig återställning. I följande tabell visas olika tillfälliga fel som program kan ta emot när de ansluter till Azure SQL Database.
Lista över tillfälliga felkoder
Felkod | Allvarlighetsgrad | beskrivning |
---|---|---|
926 | 14 | Databasen "replicatedmaster" kan inte öppnas. Den har markerats som MISSTÄNKT av återställning. Mer information finns i SQL Server-felloggen. Det här felet kan loggas på SQL Managed Instance-felloggen under en kort tidsperiod under den sista fasen av en omkonfiguration, medan den gamla primära datorn stänger av loggen. Andra, icke-tillfälliga scenarier som involverar det här felmeddelandet beskrivs i dokumentationen om MSSQL-fel. |
4060 | 16 | Det går inte att öppna databasen %.*ls som begärdes vid inloggningen. Inloggningen misslyckades. Mer information finns i Fel 4000 till 4999 |
40197 | 17 | Ett fel påträffades av tjänsten när begäran bearbetades. Försök igen. Felkod %d. Du får det här felet när tjänsten är avstängd på grund av programvaru- eller maskinvaruuppgraderingar, maskinvarufel eller andra redundansproblem. Felkoden (%d) som är inbäddad i meddelandet om fel 40197 innehåller ytterligare information om vilken typ av fel eller redundans som inträffade. Några exempel på felkoder är inbäddade i meddelandet fel 40197 är 40020, 40143, 40166 och 40540. När du ansluter igen ansluter du automatiskt till en felfri kopia av databasen. Programmet måste fånga fel 40197, logga den inbäddade felkoden (%d) i meddelandet för felsökning och försöka återansluta till SQL Database tills resurserna är tillgängliga och anslutningen upprättas igen. Mer information finns i Tillfälliga fel. |
40501 | 20 | Tjänsten är upptagen för närvarande. Prova att skicka begäran igen efter 10 sekunder. Incident-ID: %ls. Kod: %d. För ytterligare information, se: • Logiska SQL Server-resursgränser. • DTU-baserade gränser för enskilda databaser. • DTU-baserade gränser för elastiska pooler. • vCore-baserade gränser för enskilda databaser. • Begränsningar baserade på virtuella kärnor för elastiska pooler. • Resursbegränsningar för Azure SQL Managed Instance. |
40613 | 17 | Databasen %.*ls på servern %.*ls är för närvarande inte tillgänglig. Försök att ansluta igen senare. Om problemet kvarstår kontaktar du kundsupporten och anger sessionsspårnings-ID:t %.*ls. Det här felet kan inträffa om det redan finns en befintlig dedikerad administratörsanslutning (DAC) som upprättats till databasen. Mer information finns i Tillfälliga fel. |
49918 | 16 | Det går inte att behandla begäran. Det finns inte tillräckligt med resurser för att behandla begäran. Tjänsten är upptagen för närvarande. Försök igen senare. För ytterligare information, se: • Logiska SQL Server-resursgränser. • DTU-baserade gränser för enskilda databaser. • DTU-baserade gränser för elastiska pooler. • vCore-baserade gränser för enskilda databaser. • Begränsningar baserade på virtuella kärnor för elastiska pooler. • Resursbegränsningar för Azure SQL Managed Instance. |
49919 | 16 | Det går inte att bearbeta begäran om att skapa eller uppdatera. Det finns för många pågående åtgärder för att skapa eller uppdatera för prenumerationen ”%ld”. Tjänsten är upptagen med att bearbeta flera begäranden om att skapa eller uppdatera för din prenumeration eller server. Begäranden blockeras för närvarande för resursoptimering. Fråga sys.dm_operation_status för väntande åtgärder. Vänta tills väntande begäranden om att skapa eller uppdatera har slutförts eller ta bort en av dina väntande begäranden och försök igen senare. Om dina åtgärder verkar ha fastnat väntar du på att andra pågående åtgärder ska slutföras eller avbryter dem när det är möjligt. Du kan till exempel avbryta en databaskopia eller skapa en geo-replik genom att ta bort databasen eller repliken som skapas. Om det inte går att avbryta en åtgärd som uppenbarligen har fastnat öppnar du ett supportärende med Microsoft. |
49920 | 16 | Det går inte att behandla begäran. För många åtgärder pågår för prenumerationen %ld. Tjänsten är upptagen med att bearbeta flera begäranden för den här prenumerationen. Begäranden blockeras för närvarande för resursoptimering. Fråga sys.dm_operation_status för åtgärdsstatus. Vänta tills väntande begäranden har slutförts eller ta bort en av dina väntande begäranden och försök igen senare. Om dina åtgärder verkar ha fastnat väntar du på att andra pågående åtgärder ska slutföras eller avbryter dem när det är möjligt. Du kan till exempel avbryta en databaskopia eller skapa en geo-replik genom att ta bort databasen eller repliken som skapas. Om det inte går att avbryta en åtgärd som uppenbarligen har fastnat öppnar du ett supportärende med Microsoft. |
4221 | 16 | Inloggningen till läs-sekundär misslyckades på grund av lång väntan på "HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING". Repliken är inte tillgänglig för inloggning eftersom radversioner saknas för transaktioner som var under flygning när repliken återvanns. Problemet kan lösas genom att återställa eller genomföra de aktiva transaktionerna på den primära repliken. Förekomster av det här villkoret kan minimeras genom att undvika långa skrivtransaktioner på den primära. |
615 | 21 | Det gick inte att hitta databas-ID %d, namnet %.*ls. Felkod 615. Det innebär att minnesintern cache inte är synkroniserad med SQL Server-instansen och att sökningar hämtar inaktuellt databas-ID. SQL-inloggningar använder minnesintern cache för att hämta databasnamnet till ID-mappning. Cachen ska vara synkroniserad med serverdelsdatabasen och uppdateras när du kopplar och kopplar från databasen till/från SQL Server-instansen. Du får det här felet när det inte går att rensa det minnesinterna cacheminnet i tid och efterföljande sökningar till databasen pekar på inaktuellt databas-ID. Försök att återansluta till SQL Database tills resursen är tillgänglig och anslutningen upprättas igen. Mer information finns i Tillfälliga fel. |
Steg för att lösa tillfälliga anslutningsproblem
- Kontrollera microsoft Azure Service-instrumentpanelen för eventuella kända avbrott som inträffade under den tid då felen rapporterades av programmet.
- Program som ansluter till en molntjänst som Azure SQL Database bör förvänta sig regelbundna omkonfigurationshändelser och implementera omprövningslogik för att hantera dessa fel i stället för att visa programfel för användare.
- När en databas närmar sig sina resursgränser kan det verka vara ett tillfälligt anslutningsproblem. Se Resursbegränsningar.
- Om anslutningsproblemen fortsätter, eller om varaktigheten för programmet påträffar felet överskrider 60 sekunder eller om du ser flera förekomster av felet under en viss dag, skickar du en Azure-supportbegäran genom att välja Hämta support på Azure-supportwebbplatsen.
Implementera logik för återförsök
Vi rekommenderar starkt att klientprogrammet försöker med logiken igen så att det kan återupprätta en anslutning efter att ha gett den tillfälliga feltiden att korrigera sig själv. Vi rekommenderar att du fördröjer i 5 sekunder innan du försöker igen. Ett nytt försök efter en fördröjning som är kortare än 5 sekunder riskerar att överbelasta molntjänsten. För varje efterföljande återförsök bör fördröjningen växa exponentiellt, upp till högst 60 sekunder.
Kodexempel på omprövningslogik finns i:
Mer information om hur du hanterar tillfälliga fel i programmet finns i Felsöka tillfälliga anslutningsfel till SQL Database
En diskussion om blockeringsperioden för klienter som använder ADO.NET finns i Anslut ion Pooling (ADO.NET).
Ett nätverksrelaterat eller instansspecifikt fel uppstod när en anslutning till servern upprättades
Problemet uppstår om programmet inte kan ansluta till servern.
Lös problemet genom att prova stegen (i den ordning som visas) i avsnittet Steg för att åtgärda vanliga anslutningsproblem .
Servern/instansen hittades inte eller var inte tillgänglig (fel 26, 40, 10053)
Fel 26: Fel vid lokalisering av angiven server
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)
Fel 40: Det gick inte att öppna en anslutning till servern
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Fel 10053: Ett transportnivåfel har inträffat när resultat från servern tas emot
10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)
Dessa problem uppstår om programmet inte kan ansluta till servern.
Lös dessa problem genom att prova stegen (i den ordning som visas) i avsnittet Steg för att åtgärda vanliga anslutningsproblem .
Det går inte att ansluta till servern på grund av brandväggsproblem
Fel 40615: Det går inte att ansluta till < servernamnet >
Lös problemet genom att konfigurera brandväggsinställningar på SQL Database via Azure-portalen.
Fel 5: Det går inte att ansluta till < servernamnet >
Lös problemet genom att kontrollera att port 1433 är öppen för utgående anslutningar i alla brandväggar mellan klienten och Internet.
Det går inte att logga in på servern (fel 18456, 40531)
Inloggningen misslyckades för användarens< användarnamn >
Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)
Lös problemet genom att kontakta tjänstadministratören och ange ett giltigt användarnamn och lösenord.
Vanligtvis kan tjänstadministratören använda följande steg för att lägga till inloggningsuppgifterna:
Logga in på servern med hjälp av SQL Server Management Studio (SSMS).
Kör följande SQL-fråga i
master
databasen för att kontrollera om inloggningsnamnet är inaktiverat:SELECT name, is_disabled FROM sys.sql_logins;
Om motsvarande namn har inaktiverats kan du aktivera det med hjälp av följande beskrivning:
ALTER LOGIN <User name> ENABLE;
Om SQL-inloggningsanvändarnamnet inte finns redigerar du och kör följande SQL-fråga för att skapa en ny SQL-inloggning:
CREATE LOGIN <SQL_login_name, sysname, login_name> WITH PASSWORD = '<password, sysname, Change_Password>'; GO
I SSMS Object Explorer expanderar du Databaser.
Välj den databas som du vill ge användaren behörighet till.
Högerklicka på Säkerhet och välj sedan Ny, Användare.
I det genererade skriptet med platshållare (exempel som visas nedan) ersätter du mallparametrarna genom att följa stegen här och köra det:
CREATE USER [<user_name, sysname, user_name>] FOR LOGIN [<login_name, sysname, login_name>] WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>]; GO -- Add user to the database owner role EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'; GO
Du kan också använda
sp_addrolemember
för att mappa specifika användare till specifika databasroller.Kommentar
I Azure SQL Database bör du överväga den nyare ALTER ROLE-syntaxen för att hantera databasrollmedlemskap.
Mer information finns i Hantera databaser och inloggningar i Azure SQL Database.
fel vid tidsgränsen för Anslut ion har upphört att gälla
System.Data.SqlClient.SqlException (0x80131904): tidsgränsen för Anslut ion har upphört att gälla
System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;
System.Data.SqlClient.SqlException (0x80131904): Tidsgränsen har upphört att gälla
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
System.Data.Entity.Core.EntityException: Den underliggande providern misslyckades i Open
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out
Det går inte att ansluta till < servernamnet >
Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out
Dessa undantag kan inträffa antingen på grund av anslutningsproblem eller frågeproblem. Information om hur du bekräftar att det här felet orsakas av anslutningsproblem finns i Bekräfta om ett fel orsakas av ett anslutningsproblem.
Anslut tidsgräns uppstår eftersom programmet inte kan ansluta till servern. Lös problemet genom att prova stegen (i den ordning som visas) i avsnittet Steg för att åtgärda vanliga anslutningsproblem .
Fel vid avslutning av nätverksanslutning
SQL-klientbibliotek ansluter till Azure SQL Database och Azure SQL Managed Instance med hjälp av TCP-nätverksprotokollet. Ett klientbibliotek använder en komponent på lägre nivå som kallas TCP-provider för att hantera TCP-anslutningar. När TCP-providern upptäcker att en fjärrvärd oväntat har avslutat en befintlig TCP-anslutning genererar klientbiblioteket ett fel. Eftersom felet är ett klientfel och inte ett SQL-serverfel ingår inget SQL-felnummer. I stället är felnumret 0 och felmeddelandet från TCP-providern används.
Exempel på fel vid avslutning av nätverksanslutningar är:
A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
Anslut ionsavslutsfel kan inträffa eftersom databasen eller den elastiska poolen inte är tillgänglig för tillfället. De kan också uppstå på grund av olika problem i nätverksinfrastrukturen mellan databasservern och klientprogrammet, inklusive brandväggar, nätverksinstallationer osv. Dessa problem kan vara tillfälliga eller permanenta. Som allmän vägledning bör program använda ett fast antal återförsök för dessa fel innan de överväger permanenta fel.
Resursstyrningsfel
Azure SQL Database använder en implementering av resursstyrning baserat på Resource Governor för att framtvinga resursgränser. Läs mer om resurshantering i Azure SQL Database.
De vanligaste resursstyrningsfelen visas först med information, följt av en tabell med felmeddelanden om resursstyrning.
Felen 10928 och 10936: Resurs-ID: 1. Begärandegränsen för [databasen eller den elastiska poolen] är %d och har nåtts
Om gränsen på databasnivå har nåtts, lyder det detaljerade felmeddelandet i det här fallet: Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.
Om gränsen för den elastiska poolen har nåtts läser det detaljerade felmeddelandet i det här fallet: Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.
Elastiska poolgränser är högre än databasgränserna. Mer information finns i Resursgränser. De kan nås när flera databaser i poolen använder en resurs (till exempel arbetare) samtidigt.
Det här felmeddelandet anger att arbetsgränsen för databasen eller den elastiska poolen har nåtts. Det maximala värdet för samtidiga arbetare för tjänstmålet för databasen eller den elastiska poolen finns i stället för platshållaren %d.
Kommentar
Det första erbjudandet för Azure SQL Database stöds endast för enstaka trådade frågor. Vid den tidpunkten motsvarades antalet begäranden alltid av antalet arbetare. Felmeddelandena 10928 och 10936 i Azure SQL Database innehåller formuleringen "Begärandegränsen [...] är N och har nåtts" i bakåtkompatibilitetssyfte. Gränsen är faktiskt antalet arbetsnoder. Om maxgraden av parallelliteten (MAXDOP) är lika med noll eller större än en, kan antalet arbetare vara mycket högre än antalet begäranden och gränsen kan nås mycket tidigare än när MAXDOP är lika med en.
Läs mer om sessioner, arbetare och begäranden.
Anslut med DAC (Dedicated Admin Anslut ion) om det behövs
Om en liveincident pågår där arbetsgränsen har kontaktats eller nåtts kan du få fel 10928 när du ansluter med SQL Server Management Studio (SSMS) eller Azure Data Studio. En session kan ansluta med hjälp av Diagnostik Anslut ion för databasadministratörer (DAC) även när det maximala arbetströskelvärdet har uppnåtts.
Så här upprättar du en anslutning med DAC från SSMS:
- På menyn väljer du Fråga om ny > > databasmotor
- I anslutningsdialogrutan i fältet Servernamn anger du
admin:<fully_qualified_server_name>
(detta blir ungefär somadmin:servername.database.windows.net
). - Välj alternativ >>
- Välj fliken egenskaper för Anslut ion
- I rutan Anslut till databas: skriver du namnet på databasen
- Välj Anslut.
Om du får fel 40613 Database '%.*ls' on server '%.*ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.*ls'
kan detta tyda på att en annan session redan är ansluten till DAC. Endast en session kan ansluta till DAC för en enskild databas eller en elastisk pool i taget.
Om du stöter på felet "Det gick inte att ansluta till servern" efter att du har valt Anslut kan DAC-sessionen fortfarande ha upprättats om du använder en version av SSMS före 18.9. Tidiga versioner av SSMS försökte tillhandahålla Intellisense för anslutningar till DAC. Detta misslyckades eftersom DAC endast stöder en enskild arbetare och Intellisense kräver en separat arbetare.
Du kan inte använda en DAC-anslutning med Object Explorer.
Granska din max_worker_percent användning
Om du vill hitta resursförbrukningsstatistik för databasen i 14 dagar frågar du sys.resource_stats systemkatalogvyn. Kolumnen max_worker_percent
visar procentandelen arbetare som används i förhållande till arbetsgränsen för databasen. Anslut till master
databasen på den logiska servern för att fråga sys.resource_stats
.
SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.resource_stats;
Du kan också fråga efter resursförbrukningsstatistik från den senaste timmen från vyn sys.dm_db_resource_stats dynamisk hantering. Anslut direkt till databasen för att fråga sys.dm_db_resource_stats
.
SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;
Lägre arbetsanvändning när det är möjligt
Blockeringskedjor kan orsaka en plötslig ökning av antalet arbetare i en databas. En stor mängd samtidiga parallella frågor kan orsaka ett stort antal arbetare. Om du ökar maxgraden av parallellitet (MAXDOP) eller ställer in MAXDOP till noll kan du öka antalet aktiva arbetare.
Sortera en incident med otillräckliga arbetare genom att följa dessa steg:
Undersök om blockering sker eller om du kan identifiera en stor mängd samtidiga arbetare. Kör följande fråga för att undersöka aktuella begäranden och kontrollera om den blockerar när databasen returnerar fel 10928. Du kan behöva ansluta till DAC (Dedicated Admin Anslut ion) för att köra frågan.
SELECT r.session_id, r.request_id, r.blocking_session_id, r.start_time, r.status, r.command, DB_NAME(r.database_id) AS database_name, (SELECT COUNT(*) FROM sys.dm_os_tasks AS t WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count, i.parameters, i.event_info AS input_buffer, r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time, r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name FROM sys.dm_exec_requests as r JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i WHERE s.is_user_process=1; GO
Leta efter rader med en
blocking_session_id
för att identifiera blockerade sessioner. Hitta var och enblocking_session_id
i listan för att avgöra om sessionen också är blockerad. Detta kommer så småningom att leda dig till huvudblockeraren. Justera huvudblockeringsfrågan.Kommentar
Mer detaljerad information om hur du felsöker tidskrävande eller blockerande frågor finns i Förstå och lösa blockeringsproblem i Azure SQL Database.
Om du vill identifiera en stor mängd samtidiga arbetare granskar du antalet förfrågningar överlag och
worker_count
kolumnen för varje begäran.Worker_count
är antalet arbetare vid den tidpunkt som samplas och kan ändras med tiden när begäran körs. Justera frågor för att minska resursanvändningen om orsaken till ökad personal är samtidiga frågor som körs i optimal grad av parallellitet. Mer information finns i avsnittet om frågeoptimering och frågetips.
Utvärdera maxgränsen för parallellitet (MAXDOP) för databasen.
Öka arbetsgränser
Om databasen eller den elastiska poolen konsekvent når sin arbetsgräns trots att den hanterar blockering, optimering av frågor och validering av MAXDOP-inställningen kan du överväga att skala upp databasen eller den elastiska poolen för att öka arbetsgränsen.
Hitta resursgränser för Azure SQL Database efter tjänstnivå och beräkningsstorlek:
- Resursbegränsningar för enskilda databaser med hjälp av vCore-inköpsmodellen
- Resursbegränsningar för elastiska pooler med hjälp av vCore-inköpsmodellen
- Resursbegränsningar för enskilda databaser med hjälp av inköpsmodellen DTU
- Resursbegränsningar för elastiska pooler med hjälp av DTU-köpmodellen
Läs mer om resursstyrning i Azure SQL Database för arbetare.
Fel 10929: Resurs-ID: 1
10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.
Fel 40501: Tjänsten är upptagen för närvarande
40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.
Det här är ett motorbegränsningsfel, en indikation på att resursgränserna överskrids.
Mer information om resursgränser finns i Logiska SQL Server-resursgränser.
Fel 40544: Databasen har nått sin storlekskvot
40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.
Det här felet uppstår när databasen har nått sin storlekskvot.
Följande steg kan antingen hjälpa dig att lösa problemet eller ge dig fler alternativ:
Kontrollera databasens aktuella storlek med hjälp av instrumentpanelen i Azure-portalen.
Kommentar
Om du vill identifiera vilka tabeller som förbrukar mest utrymme och därför är potentiella kandidater för rensning kör du följande SQL-fråga:
SELECT o.name, SUM(p.row_count) AS 'Row Count', SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)' FROM sys.objects o JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id GROUP BY o.name ORDER BY [Table Size (MB)] DESC; GO
Om den aktuella storleken inte överskrider den maximala storlek som stöds för din utgåva kan du använda ALTER DATABASE för att öka MAXSIZE-inställningen.
Om databasen redan har passerat den maximala storlek som stöds för din utgåva kan du prova ett eller flera av följande steg:
- Utför normala databasrensningsaktiviteter. Du kan till exempel rensa oönskade data med hjälp av trunkera/ta bort eller flytta ut data med hjälp av SQL Server Integration Services (SSIS) eller verktyget masskopieringsprogram (bcp).
- Partition eller ta bort data, ta bort index eller se dokumentationen för möjliga lösningar.
- Information om databasskalning finns i Skala resurser för en enskild databas och Skala elastiska poolresurser.
Fel 40549: Sessionen avslutas eftersom du har en tidskrävande transaktion
40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.
Om det här felet uppstår upprepade gånger kan du försöka lösa problemet genom att följa dessa steg:
Kör följande fråga för att se alla öppna sessioner som har ett högt värde för
duration_ms
kolumnen:SELECT r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, r.session_id, r.request_id, r.blocking_session_id, r.status, r.command, DB_NAME(r.database_id) AS database_name, i.parameters, i.event_info AS input_buffer, r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time, r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name FROM sys.dm_exec_requests as r JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i WHERE s.is_user_process=1 ORDER BY start_time ASC; GO
Du kan välja att ignorera rader där
input_buffer
kolumnen visar en fråga som läser frånsys.fn_MSxe_read_event_stream
: dessa begäranden är relaterade till utökade händelsesessioner.blocking_session_id
Granska kolumnen för att se om blockering bidrar till långvariga transaktioner.Kommentar
Mer information om felsökning av blockering i Azure SQL Database finns i Förstå och lösa blockeringsproblem i Azure SQL Database.
Överväg att batcha dina frågor. Information om batchbearbetning finns i Använda batchbearbetning för att förbättra prestanda för SQL Database-program.
Fel 40551: Sessionen har avslutats på grund av överdriven tempdb-användning
40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.
Följ dessa steg för att lösa det här problemet:
- Ändra frågorna för att minska den tillfälliga användningen av tabellutrymme.
- Släpp temporära objekt när de inte längre behövs.
- Trunkera tabeller eller ta bort tabeller som inte används.
Fel 40552: Sessionen har avslutats på grund av överdriven användning av transaktionsloggutrymme
40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.
Prova att lösa problemet med hjälp av följande metoder:
- Problemet kan inträffa på grund av åtgärder för att infoga, uppdatera eller ta bort. Försök att minska antalet rader som körs direkt genom att implementera batchbearbetning eller dela upp i flera mindre transaktioner.
- Problemet kan uppstå på grund av åtgärder för att återskapa index. Om du vill undvika det här problemet kontrollerar du antalet rader som påverkas i tabellen * (genomsnittlig storlek på fältet som uppdateras i byte + 80) < 2 gigabyte (GB).
- För ett återskapande av index bör den genomsnittliga storleken på fältet som uppdateras ersättas med den genomsnittliga indexstorleken.
- Mer information finns i Felsöka en fullständig transaktionslogg i Azure SQL Database och Felsöka en fullständig transaktionslogg i Azure SQL Managed Instance.
Fel 40553: Sessionen har avslutats på grund av överdriven minnesanvändning
40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.
Försök att optimera frågan för att undvika det här problemet.
En djupgående felsökningsprocedur finns i Fungerar min fråga bra i molnet?.
Mer information om andra minnesfel och exempelfrågor finns i Felsöka minnesfel med Azure SQL Database.
Tabell med felmeddelanden för resursstyrning
Felkod | Allvarlighetsgrad | beskrivning |
---|---|---|
10928 | 20 | Resurs-ID: %d. %s-gränsen för databasen är %d och har nåtts. Se "http://go.microsoft.com/fwlink/?LinkId=267637" för hjälp. Resurs-ID:t anger den resurs som har nått gränsen. När resurs-ID = 1 anger detta att en arbetsgräns har nåtts. Läs mer i Fel 10928: Resurs-ID: 1. Begärandegränsen för databasen är %d och har nåtts. När resurs-ID = 2 anger detta att sessionsgränsen har nåtts. Läs mer om resursgränser: • Logiska SQL Server-resursgränser. • DTU-baserade gränser för enskilda databaser. • vCore-baserade gränser för enskilda databaser. • Resursbegränsningar för Azure SQL Managed Instance. |
10936 | 20 | Resurs-ID: %d. Gränsen för %s för den elastiska poolen är %d och har nåtts. Se "http://go.microsoft.com/fwlink/?LinkId=267637" för hjälp. Resurs-ID:t anger den resurs som har nått gränsen. När resurs-ID = 1 anger detta att en arbetsgräns har nåtts. Läs mer i Fel 10936: Resurs-ID: 1. Begärandegränsen för den elastiska poolen är %d och har nåtts.. När resurs-ID = 2 anger detta att sessionsgränsen har nåtts. Läs mer om resursgränser: • Logiska SQL Server-resursgränser. • DTU-baserade gränser för elastiska pooler. • Begränsningar baserade på virtuella kärnor för elastiska pooler. • Resursbegränsningar för Azure SQL Managed Instance. |
10929 | 20 | Resurs-ID: %d. Minimigarantin för %s är %d, maxgränsen är %d och den aktuella användningen för databasen är %d. Servern är dock för upptagen för att stödja begäranden som är större än %d för den här databasen. Resurs-ID:t anger den resurs som har nått gränsen. För arbetstrådar är resurs-ID : 1. För sessioner är resurs-ID : 2. För ytterligare information, se: • Logiska SQL Server-resursgränser. • DTU-baserade gränser för enskilda databaser. • DTU-baserade gränser för elastiska pooler. • vCore-baserade gränser för enskilda databaser. • Begränsningar baserade på virtuella kärnor för elastiska pooler. • Resursbegränsningar för Azure SQL Managed Instance. Annars kan du försöka igen senare. |
40544 | 20 | Databasen har nått sin storlekskvot. Partition eller ta bort data, ta bort index eller se dokumentationen för möjliga lösningar. Information om databasskalning finns i Skala resurser för en enskild databas och Skala elastiska poolresurser. |
40549 | 16 | Sessionen avslutas eftersom du har en tidskrävande transaktion. Försök att förkorta transaktionen. Information om batchbearbetning finns i Använda batchbearbetning för att förbättra prestanda för SQL Database-program. |
40550 | 16 | Sessionen har avslutats eftersom den har skaffat för många lås. Prova att läsa eller ändra färre rader i en enda transaktion. Information om batchbearbetning finns i Använda batchbearbetning för att förbättra prestanda för SQL Database-program. |
40551 | 16 | Sessionen har avslutats på grund av överdriven tempdb användning. Prova att ändra frågan för att minska den tillfälliga användningen av tabellutrymme.Om du använder temporära objekt sparar du utrymme i tempdb databasen genom att släppa temporära objekt när de inte längre behövs av sessionen. Mer information om tempdb gränser i SQL Database finns i Tempdb-databasen i SQL Database. |
40552 | 16 | Sessionen har avslutats på grund av överdriven användning av transaktionsloggutrymme. Prova att ändra färre rader i en enda transaktion. Information om batchbearbetning finns i Använda batchbearbetning för att förbättra prestanda för SQL Database-program. Om du utför massinfogningar med hjälp av bcp.exe verktyget eller System.Data.SqlClient.SqlBulkCopy klassen kan du försöka använda -b batchsize alternativen eller BatchSize för att begränsa antalet rader som kopieras till servern i varje transaktion. Om du återskapar ett index med -instruktionen ALTER INDEX kan du prova att använda alternativet REBUILD WITH ONLINE = ON . Information om transaktionsloggstorlekar för köpmodellen för virtuella kärnor finns i: • vCore-baserade gränser för enskilda databaser. • Begränsningar baserade på virtuella kärnor för elastiska pooler. • Resursbegränsningar för Azure SQL Managed Instance. |
40553 | 16 | Sessionen har avslutats på grund av överdriven minnesanvändning. Prova att ändra frågan för att bearbeta färre rader. Om du minskar antalet ORDER BY åtgärder och GROUP BY åtgärder i Transact-SQL-koden minskar minneskraven för din fråga. Information om databasskalning finns i Skala resurser för en enskild databas och Skala elastiska poolresurser. Mer information om minnesfel och exempelfrågor finns i Felsöka minnesfel med Azure SQL Database. |
Elastiska poolfel
Följande fel gäller att skapa och använda elastiska pooler:
Felkod | Allvarlighetsgrad | beskrivning | Korrigeringsåtgärder |
---|---|---|---|
1132 | 17 | Den elastiska poolen har uppnått sin lagringsgräns. Lagringsanvändningen för den elastiska poolen får inte överskrida (%d) MBs. Försöker skriva data till en databas när lagringsgränsen för den elastiska poolen har nåtts. Information om resursgränser finns i: • DTU-baserade gränser för elastiska pooler. • Begränsningar baserade på virtuella kärnor för elastiska pooler. |
Överväg att öka DTU:erna för och/eller lägga till lagring i den elastiska poolen om möjligt för att öka lagringsgränsen, minska lagringen som används av enskilda databaser i den elastiska poolen eller ta bort databaser från den elastiska poolen. För elastisk poolskalning, se Skala elastiska poolresurser. Mer information om hur du tar bort oanvänt utrymme från databaser finns i Hantera filutrymme för databaser i Azure SQL Database. |
10929 | 16 | Minimigarantin för %s är %d, maxgränsen är %d och den aktuella användningen för databasen är %d. Servern är dock för upptagen för att stödja begäranden som är större än %d för den här databasen. Information om resursgränser finns i: • DTU-baserade gränser för elastiska pooler. • Begränsningar baserade på virtuella kärnor för elastiska pooler. Annars kan du försöka igen senare. DTU/vCore min per databas; DTU/vCore max per databas. Det totala antalet samtidiga arbetare i alla databaser i den elastiska poolen försökte överskrida poolgränsen. |
Överväg att öka DTU:er eller virtuella kärnor för den elastiska poolen om möjligt för att öka arbetsgränsen eller ta bort databaser från den elastiska poolen. |
40844 | 16 | Databasen %ls på servern %ls är en %ls-databas i en elastisk pool och kan inte ha en kontinuerlig kopieringsrelation. | Ej tillämpligt |
40857 | 16 | Det gick inte att hitta den elastiska poolen för servern%ls, namnet på den elastiska poolen: %ls. Den angivna elastiska poolen finns inte på den angivna servern. | Ange ett giltigt namn på den elastiska poolen. |
40858 | 16 | Den elastiska poolen %ls finns redan på servern: %ls. Den angivna elastiska poolen finns redan på den angivna servern. | Ange ett nytt namn på den elastiska poolen. |
40859 | 16 | Elastisk pool stöder inte tjänstnivån %ls. Den angivna tjänstnivån stöds inte för elastisk pooletablering. | Ange rätt utgåva eller lämna tjänstnivån tom för att använda standardtjänstnivån. |
40860 | 16 | Den elastiska poolen %ls och servicemålet %ls är ogiltiga. Elastisk pool och tjänstnivå kan endast anges tillsammans om resurstypen anges som "ElasticPool". | Ange rätt kombination av elastisk pool och tjänstnivå. |
40861 | 16 | Databasutgåvan %.*ls kan inte skilja sig från den elastiska pooltjänstnivån som är %.*ls. Databasutgåvan skiljer sig från tjänstnivån för elastisk pool. | Ange inte en databasutgåva som skiljer sig från tjänstnivån för elastisk pool. Observera att databasutgåvan inte behöver anges. |
40862 | 16 | Namn på elastisk pool måste anges om servicemålet för elastisk pool har angetts. Servicemålet för elastisk pool identifierar inte unikt en elastisk pool. | Ange namnet på den elastiska poolen om du använder tjänstmålet för elastisk pool. |
40864 | 16 | DTU:er för den elastiska poolen måste vara minst (%d) DTU:er för tjänstnivån %.*ls. Försöker ange DTU:er för den elastiska poolen under minimigränsen. | Försök att ange DTU:er för den elastiska poolen till minst den minsta gränsen. |
40865 | 16 | DTU:er för den elastiska poolen får inte överskrida (%d) DTU:er för tjänstnivån %.*ls. Försöker ange DTU:er för den elastiska poolen över maxgränsen. | Försök att ange DTU:er för den elastiska poolen till högst den maximala gränsen. |
40867 | 16 | Maxvärdet för DTU per databas måste vara minst (%d) för tjänstnivån %.*ls. Försöker ange DTU max per databas under den gräns som stöds. | Överväg att använda den elastiska pooltjänstnivån som stöder önskad inställning. |
40868 | 16 | DTU-maxvärdet per databas får inte överskrida (%d) för tjänstnivån %.*ls. Försöker ange DTU max per databas utöver den gräns som stöds. | Överväg att använda den elastiska pooltjänstnivån som stöder önskad inställning. |
40870 | 16 | DTU min per databas får inte överskrida (%d) för tjänstnivån %.*ls. Försöker ange DTU min per databas utöver den gräns som stöds. | Överväg att använda den elastiska pooltjänstnivån som stöder önskad inställning. |
40873 | 16 | Antalet databaser (%d) och DTU min per databas (%d) får inte överskrida DTU:erna för den elastiska poolen (%d). Försöker ange DTU min för databaser i den elastiska poolen som överskrider DTU:erna för den elastiska poolen. | Överväg att öka DTU:erna för den elastiska poolen eller minska DTU min per databas eller minska antalet databaser i den elastiska poolen. |
40877 | 16 | Det går inte att ta bort en elastisk pool om den inte innehåller några databaser. Den elastiska poolen innehåller en eller flera databaser och kan därför inte tas bort. | Ta bort databaser från den elastiska poolen för att ta bort den. |
40881 | 16 | Den elastiska poolen %.*ls har nått sin gräns för antal databaser. Databasens antalsgräns för den elastiska poolen får inte överskrida (%d) för en elastisk pool med (%d) DTU:er. Försöker skapa eller lägga till databasen i den elastiska poolen när gränsen för antalet databaser för den elastiska poolen har nåtts. | Överväg att öka DTU:erna för den elastiska poolen om möjligt för att öka databasgränsen eller ta bort databaser från den elastiska poolen. |
40889 | 16 | DTU:er eller lagringsgränsen för den elastiska poolen %.*ls kan inte minskas eftersom det inte skulle ge tillräckligt med lagringsutrymme för databaserna. Försöker minska lagringsgränsen för den elastiska poolen under lagringsanvändningen. | Överväg att minska lagringsanvändningen för enskilda databaser i den elastiska poolen eller ta bort databaser från poolen för att minska dess DTU:er eller lagringsgräns. |
40891 | 16 | DTU min per databas (%d) får inte överskrida DTU:et max per databas (%d). Försöker ange DTU min per databas som är högre än DTU:et max per databas. | Se till att DTU min per databaser inte överskrider DTU max per databas. |
TBD | 16 | Lagringsstorleken för en enskild databas i en elastisk pool får inte överskrida den maximala storlek som tillåts av den elastiska poolen på tjänstnivån %.*ls. Den maximala storleken för databasen överskrider den maximala storlek som tillåts av den elastiska pooltjänstnivån. | Ange den maximala storleken på databasen inom gränserna för den maximala storlek som tillåts av den elastiska pooltjänstnivån. |
Det går inte att öppna databasen "master" som begärdes vid inloggningen. Inloggningen misslyckades
Det här problemet beror på att kontot inte har behörighet att komma åt master
databasen. Men som standard försöker SQL Server Management Studio (SSMS) ansluta till master
databasen.
Följ dessa anvisningar för att lösa problemet:
På inloggningsskärmen i SSMS väljer du Alternativ och sedan Anslut ionsegenskaper.
I fältet Anslut till databas anger du användarens standarddatabasnamn som standardinloggningsdatabas och väljer sedan Anslut.
Skrivskyddade fel
Om du försöker skriva till en databas som är skrivskyddad får du ett fel. I vissa scenarier kanske orsaken till databasens skrivskyddade status inte är omedelbart tydlig.
Fel 3906: Det gick inte att uppdatera databasen "DatabaseName" eftersom databasen är skrivskyddad.
När du försöker ändra en skrivskyddad databas utlöses följande fel.
Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.
Du kan vara ansluten till en skrivskyddad replik
För både Azure SQL Database och Azure SQL Managed Instance kan du vara ansluten till en databas på en skrivskyddad replik. I det här fallet returnerar READ_ONLY
följande fråga med funktionen DATABASEPROPERTYEX() :
SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO
Om du ansluter med SQL Server Management Studio kontrollerar du om du har angett ApplicationIntent=ReadOnly
på fliken Ytterligare Anslut ionsparametrari anslutningsalternativen.
Om anslutningen kommer från ett program eller en klient som använder en anslutningssträng kontrollerar du om anslutningssträng har angett ApplicationIntent=ReadOnly
. Läs mer i Anslut till en skrivskyddad replik.
Databasen kan vara inställd på skrivskyddad
Om du använder Azure SQL Database kan själva databasen ha angetts till skrivskyddad. Du kan kontrollera databasens status med följande fråga:
SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();
Du kan ändra skrivskyddad status för en databas i Azure SQL Database med hjälp av ALTER DATABASE Transact-SQL. Du kan för närvarande inte ange en databas i en hanterad instans till skrivskyddad.
Bekräfta om ett fel orsakas av ett anslutningsproblem
Kontrollera om ett fel orsakas av ett anslutningsproblem genom att granska stackspårningen för bildrutor som visar anrop för att öppna en anslutning som följande (observera referensen till klassen Sql Anslut ion):
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>
När undantaget utlöses av frågeproblem ser du en anropsstack som liknar följande (observera referensen till klassen SqlCommand ). I den här situationen justerar du dina frågor.
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client ID>
Mer information om finjusteringsprestanda finns i följande resurser:
- Underhålla index och statistik i Azure SQL
- Justera frågeprestanda manuellt i Azure SQL Database
- Övervaka prestanda i Azure SQL Database med hjälp av dynamiska hanteringsvyer
- Använda Query Store i Azure SQL Database
Steg för att åtgärda vanliga anslutningsproblem
Kontrollera att TCP/IP är aktiverat som ett klientprotokoll på programservern. Mer information finns i Konfigurera klientprotokoll. På programservrar där du inte har SQL-verktyg installerade kontrollerar du att TCP/IP är aktiverat genom att köra cliconfg.exe (SQL Server Client Network-verktyget).
Kontrollera programmets anslutningssträng för att kontrollera att det är korrekt konfigurerat. Kontrollera till exempel att anslutningssträng anger rätt port (1433) och fullständigt kvalificerat servernamn. Se Hämta anslutningsinformation.
Försök att öka tidsgränsvärdet för anslutningen. Vi rekommenderar att du använder en tidsgräns för anslutningen på minst 30 sekunder.
Testa anslutningen mellan programservern och Azure SQL Database med hjälp av SQL Server Management Studio (SSMS), en UDL-fil, ping eller telnet. Mer information finns i Felsöka anslutningsproblem och diagnostik för anslutningsproblem.
Kommentar
Som ett felsökningssteg kan du även testa anslutningen på en annan klientdator.
Vi rekommenderar att du ser till att logiken för återförsök är på plats. Mer information om logik för omförsök finns i Felsöka tillfälliga fel och anslutningsfel till SQL Database.
Om de här stegen inte löser problemet kan du försöka samla in mer data och sedan kontakta supporten. Om ditt program är en molntjänst aktiverar du loggning. Det här steget returnerar en UTC-tidsstämpel för felet. Dessutom returnerar SQL Database spårnings-ID:t. Microsofts kundtjänst kan använda den här informationen.
Mer information om hur du aktiverar loggning finns i Aktivera diagnostikloggning för appar i Azure App Service.
Nästa steg
Läs mer om relaterade ämnen i följande artiklar:
- Azure SQL Database-anslutningsarkitektur
- Nätverksåtkomstkontroller för Azure SQL Database och Azure Synapse Analytics
- Felsöka en fullständig transaktionslogg i Azure SQL Database
- Felsöka en fullständig transaktionslogg i Azure SQL Managed Instance
- Felsöka tillfälliga anslutningsfel i SQL Database och SQL Managed Instance
- Analysera och förhindra dödlägen i Azure SQL Database