Řešení potíží s připojením a dalších chyb ve službách Azure SQL Database a Azure SQL Managed Instance

Platí pro:Azure SQL DatabaseAzure SQL Managed Instance

Při selhání připojení ke službě Azure SQL Database nebo službě Azure SQL Managed Instance se zobrazí chybové zprávy. Tyto problémy s připojením můžou být způsobené rekonfigurací, nastavením brány firewall, vypršením časového limitu připojení, nesprávnými přihlašovacími informacemi nebo selháním při uplatňování osvědčených postupů a pokynů pro návrh aplikace. Pokud navíc u některých prostředků služby Azure SQL Database nebo SQL Managed Instance dojde k dosažení maximálního limitu, nebudete se moct přihlásit.

Poznámka:

Pomocí nástroje Azure SQL Připojení ivity Checker můžete zjišťovat a opravovat širokou škálu chyb připojení ke službě Azure SQL Database, azure SQL Managed Instance a v prostředích Azure Synapse Analytics.

Přechodné chybové zprávy chyb (40197, 40613 a další)

Když ve službě SQL Database dojde k vysokému zatížení, infrastruktura Azure dokáže dynamicky rekonfigurovat servery. Toto dynamické chování může způsobit, že váš klientský program ztratí připojení k databázi nebo instanci. Tento druh chybového stavu se nazývá přechodná chyba. K událostem rekonfigurace databáze dochází kvůli plánovaným událostem (např. upgrade softwaru) nebo neplánovaným událostem (např. chybové ukončení procesu nebo vyrovnávání zatížení). Většina událostí rekonfigurace je obecně krátkodobá a měla by se dokončit za méně než 60 sekund. Dokončení těchto událostí však může občas trvat delší dobu, například když velká transakce způsobí dlouhotrvající obnovení. Následující tabulka uvádí různé přechodné chyby, které můžou aplikace obdržet při připojování ke službě Azure SQL Database.

Seznam kódů přechodných chyb chyb

Kód chyby Závažnost Popis
926 14 Databázi "replikdmaster" nelze otevřít. Byla označena jako PODEZŘELÝ obnovením. Další informace najdete v protokolu chyb SQL Serveru.

Tato chyba může být zaprotokolována v protokolu chyb služby SQL Managed Instance po krátkou dobu během poslední fáze rekonfigurace, zatímco původní primární server vypíná protokol.
Jiné než přechodné scénáře zahrnující tuto chybovou zprávu jsou popsány v dokumentaci k chybám MSSQL.
4060 16 Databázi %.*ls požadovanou pro přihlášení nelze otevřít. Přihlášení se nezdařilo. Další informace naleznete v tématu Chyby 4000 až 4999
40197 17 Služba zjistila chybu při zpracování vaší žádosti. Zkuste to znovu. Kód chyby %d.

Tato chyba se zobrazí, když je služba mimo provoz kvůli upgradům softwaru nebo hardwaru, selháním hardwaru nebo jiným problémům s převzetím služeb při selhání. Kód chyby (%d) vložený do zprávy chyby 40197 poskytuje další informace o druhu selhání nebo převzetí služeb při selhání, ke kterému došlo. Některé příklady kódů chyb jsou vloženy do zprávy chyby 40197 jsou 40020, 40143, 40166 a 40540.

Opětovným připojením se automaticky připojíte ke správné kopii databáze. Aplikace musí zachytit chybu 40197, protokolovat vložený kód chyby (%d) ve zprávě pro řešení potíží a pokusit se znovu připojit ke službě SQL Database, dokud nebudou k dispozici prostředky, a vaše připojení se znovu naváže. Další informace najdete v části Přechodné chyby.
40501 20 Služba je aktuálně zaneprázdněna. Zkuste požadavek zopakovat po 10 sekundách. ID incidentu: %ls. Kód: %d. Další informace najdete tady: .
Omezení prostředků logického SQL Serveru.
Omezení založená na DTU pro izolované databáze.
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro izolované databáze.
Omezení založená na virtuálních jádrech pro elastické fondy.
Limity prostředků služby Azure SQL Managed Instance
40613 17 Databáze %.*ls na serveru %.*ls není aktuálně dostupná. Opakujte pokus o připojení později. Pokud problém přetrvává, obraťte se na zákaznickou podporu a zadejte ID trasování relace %.*ls.

K této chybě může dojít, pokud již existuje existující vyhrazené připojení správce (DAC) vytvořené k databázi. Další informace najdete v části Přechodné chyby.
49918 16 Požadavek nejde zpracovat. Nedostatek prostředků pro zpracování požadavku.

Služba je aktuálně zaneprázdněna. Zkuste žádost zopakovat později. Další informace najdete tady: .
Omezení prostředků logického SQL Serveru.
Omezení založená na DTU pro izolované databáze.
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro izolované databáze.
Omezení založená na virtuálních jádrech pro elastické fondy.
Limity prostředků služby Azure SQL Managed Instance
49919 16 Žádost o vytvoření nebo aktualizaci není možné zpracovat. V předplatném %Id dochází k nadměrnému počtu operací vytváření nebo aktualizace.

Služba je zaneprázdněna zpracováním více žádostí o vytvoření nebo aktualizaci pro vaše předplatné nebo server. Žádosti jsou aktuálně blokované pro optimalizaci prostředků. Dotaz sys.dm_operation_status pro čekající operace. Počkejte na dokončení žádosti o vytvoření nebo aktualizaci čekající na vytvoření nebo aktualizaci a zkuste žádost zopakovat později. Pokud se zdá, že jsou vaše operace zablokované, počkejte na dokončení dalších probíhajících operací nebo je v případě potřeby zrušte. Můžete například zrušit kopii databáze nebo vytvoření geografické repliky odstraněním vytvářené databáze nebo repliky. Pokud se nepodaří zrušit zdánlivě zablokované operace, otevřete lístek podpory s Microsoftem.
49920 16 Požadavek nejde zpracovat. U předplatného %ld probíhá příliš mnoho operací.

Služba je zaneprázdněna zpracováním více požadavků pro toto předplatné. Žádosti jsou aktuálně blokované pro optimalizaci prostředků. Dotaz sys.dm_operation_status pro stav operace. Počkejte na dokončení čekajících požadavků nebo odstraňte některý z čekajících požadavků a zkuste žádost zopakovat později. Pokud se zdá, že jsou vaše operace zablokované, počkejte na dokončení dalších probíhajících operací nebo je v případě potřeby zrušte. Můžete například zrušit kopii databáze nebo vytvoření geografické repliky odstraněním vytvářené databáze nebo repliky. Pokud se nepodaří zrušit zdánlivě zablokované operace, otevřete lístek podpory s Microsoftem.
4221 16 Přihlášení k sekundárnímu čtení selhalo kvůli dlouhému čekání na HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING. Replika není k dispozici pro přihlášení, protože verze řádků chybí pro transakce, které byly v testovacím prostředí při recyklaci repliky. Tento problém lze vyřešit vrácením zpět nebo potvrzením aktivních transakcí na primární replice. Výskyty této podmínky je možné minimalizovat tím, že se v primárním počítači zabrání dlouhým transakcím zápisu.
615 21 Nelze najít ID databáze %d, název %.*ls. Kód chyby 615
To znamená, že mezipaměť v paměti není synchronizovaná s instancí SQL Serveru a vyhledávání načítají zastaralé ID databáze.

Přihlášení SQL používají mezipaměť v paměti k získání názvu databáze na mapování ID. Mezipaměť by se měla synchronizovat s back-endovou databází a aktualizovat ji vždy, když dojde k připojení a odpojení databáze k instanci SERVERU SQL.
Tato chyba se zobrazí, když se pracovní postup odpojení nepodaří včas vyčistit mezipaměť v paměti a následné vyhledávání do bodu databáze na zastaralé ID databáze.

Zkuste se znovu připojit ke službě SQL Database, dokud nebude prostředek k dispozici, a připojení se znovu naváže. Další informace najdete v části Přechodné chyby.

Postup řešení přechodných problémů s připojením

  1. Zkontrolujte, jestli na řídicím panelu služby Microsoft Azure nedošlo ke známým výpadkům, ke kterým došlo během doby, během které aplikace hlásila chyby.
  2. Aplikace, které se připojují ke cloudové službě, jako je Azure SQL Database, by měly očekávat pravidelné události rekonfigurace a implementovat logiku opakování, která tyto chyby zpracuje, místo aby uživatelům nezovládaly chyby aplikace.
  3. Vzhledem k tomu, že databáze přistupuje k limitům prostředků, může se zdát, že se jedná o přechodný problém s připojením. Viz Omezení prostředků.
  4. Pokud potíže s připojením budou pokračovat nebo pokud doba trvání, po kterou se u vaší aplikace zobrazí chyba, překročí 60 sekund nebo pokud se v daném dni zobrazí více výskytů chyby, vytvořte podpora Azure žádost výběrem možnosti Získat podporu na webu podpory Azure.

Implementace logiky opakování

Důrazně doporučujeme, aby váš klientský program získal logiku opakování, aby mohl znovu vytvořit připojení po uplynutí přechodné doby selhání, aby se opravil sám. Doporučujeme, abyste před prvním opakováním zpozdili 5 sekund. Opakování po zpoždění kratším než 5 sekund riskuje zahlcení cloudové služby. U každého dalšího opakování by se zpoždění mělo exponenciálně zvětšit až na 60 sekund.

Příklady kódu logiky opakování najdete tady:

Další informace o zpracovánípřechodných

Diskuze o době blokování pro klienty, kteří používají ADO.NET, je k dispozici v Připojení ion Pooling (ADO.NET).

K tomuto problému dochází, pokud se aplikace nemůže připojit k serveru.

Pokud chcete tento problém vyřešit, vyzkoušejte kroky (v uvedeném pořadí) v části Kroky a opravte běžné problémy s připojením.

Server nebo instance nebyla nalezena nebo nebyla přístupná (chyby 26, 40, 10053)

Chyba 26: Chyba při vyhledání zadaného serveru

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)

Chyba 40: Nepodařilo se otevřít připojení k serveru

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)

Chyba 10053: Při příjmu výsledků ze serveru došlo k chybě na úrovni přenosu

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)

K těmto problémům dochází v případě, že se aplikace nemůže připojit k serveru.

Pokud chcete tyto problémy vyřešit, vyzkoušejte kroky (v uvedeném pořadí) v části Kroky a opravte běžné problémy s připojením.

Nejde se připojit k serveru kvůli problémům s bránou firewall

Chyba 40615: Nejde se připojit k < názvu serveru >

Pokud chcete tento problém vyřešit, nakonfigurujte nastavení brány firewall ve službě SQL Database prostřednictvím webu Azure Portal.

Chyba 5: Nejde se připojit k < názvu serveru >

Pokud chcete tento problém vyřešit, ujistěte se, že je port 1433 otevřený pro odchozí připojení na všech branách firewall mezi klientem a internetem.

Nejde se přihlásit k serveru (chyby 18456, 40531)

Přihlášení uživatele uživatelské< jméno >se nezdařilo.

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)

Pokud chcete tento problém vyřešit, požádejte správce služeb, aby vám poskytl platné uživatelské jméno a heslo.

Správce služby obvykle může pomocí následujícího postupu přidat přihlašovací údaje:

  1. Přihlaste se k serveru pomocí aplikace SQL Server Management Studio (SSMS).

  2. Spuštěním následujícího dotazu SQL v master databázi zkontrolujte, jestli je přihlašovací jméno zakázané:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Pokud odpovídající jméno je zakázané, povolte ho pomocí následujícího příkazu:

    ALTER LOGIN <User name> ENABLE;
    
  4. Pokud přihlašovací uživatelské jméno SQL neexistuje, upravte a spusťte následující dotaz SQL a vytvořte nové přihlášení SQL:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. V nástroji SSMS Průzkumník objektů rozbalte položku Databáze.

  6. Vyberte databázi, ke které chcete uživateli udělit oprávnění.

  7. Klepněte pravým tlačítkem myši na položku Zabezpečení a potom vyberte Nový, Uživatel.

  8. Ve vygenerovaném skriptu se zástupnými symboly (ukázka níže) nahraďte parametry šablony podle těchto kroků a spusťte ho:

    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
    

    Můžete také použít sp_addrolemember k mapování konkrétních uživatelů na konkrétní databázové role.

    Poznámka:

    Ve službě Azure SQL Database zvažte novější syntaxi ALTER ROLE pro správu členství v rolích databáze.

Další informace najdete v tématu Správa databází a přihlášení ve službě Azure SQL Database.

Chyby vypršení časového limitu Připojení

System.Data.SqlClient.SqlException (0x80131904): vypršení časového limitu Připojení

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): Vypršel časový limit

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: Základní zprostředkovatel selhal při otevření

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

Nejde se připojit k < názvu serveru >

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

K těmto výjimkám může dojít buď kvůli problémům s připojením nebo dotazem. Pokud chcete ověřit, že příčinou této chyby jsou problémy s připojením, přečtěte si téma Potvrzení, jestli je příčinou chyby problém s připojením.

Připojení k vypršení časových limitů dochází, protože aplikace se nemůže připojit k serveru. Pokud chcete tento problém vyřešit, vyzkoušejte kroky (v uvedeném pořadí) v části Kroky a opravte běžné problémy s připojením.

Chyby ukončení síťového připojení

Klientské knihovny SQL se připojují ke službě Azure SQL Database a azure SQL Managed Instance pomocí síťového protokolu TCP. Klientská knihovna používá ke správě připojení TCP komponentu nižší úrovně, která se nazývá zprostředkovatel TCP. Když zprostředkovatel PROTOKOLU TCP zjistí, že vzdálený hostitel neočekávaně ukončil existující připojení TCP, klientská knihovna vyvolá chybu. Vzhledem k tomu, že se jedná o chybu klienta, a ne o chybu sql serveru, není zahrnuté žádné číslo chyby SQL. Místo toho je číslo chyby 0 a použije se chybová zpráva od zprostředkovatele TCP.

Mezi příklady chyb ukončení síťového připojení patří:

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.)

Připojení může dojít k chybám ukončení, protože databáze nebo elastický fond je dočasně nedostupný. Mohou také nastat kvůli různým problémům v síťové infrastruktuře mezi databázovým serverem a klientskou aplikací, včetně bran firewall, síťových zařízení atd. Tyto problémy mohou být přechodné nebo trvalé. Obecně platí, že aplikace by měly před zvážením trvalých selhání použít pevný počet pokusů o opakování těchto chyb.

Chyby zásad správného řízení prostředků

Azure SQL Database používá implementaci zásad správného řízení prostředků založenou na správci prostředků k vynucení limitů prostředků. Přečtěte si další informace o správě prostředků ve službě Azure SQL Database.

Nejběžnější chyby zásad správného řízení prostředků jsou uvedené jako první s podrobnostmi a za nimi následuje tabulka chybových zpráv zásad správného řízení prostředků.

Chyby 10928 a 10936: ID prostředku: 1. Limit požadavků pro [databázi nebo elastický fond] je %d a byl dosažen.

Pokud dosáhnete limitu na úrovni databáze, zobrazí se podrobná chybová zpráva v tomto případě: 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.

Pokud dosáhnete limitu elastického fondu, zobrazí se podrobná chybová zpráva v tomto případě: 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. Limity elastického fondu jsou vyšší než limity databáze. Další informace najdete v tématu Omezení prostředků. K nim může dojít, když více databází ve fondu současně používá prostředek (například pracovní procesy).

Tato chybová zpráva označuje, že došlo k dosažení limitu pracovního procesu pro databázi nebo elastický fond. Místo zástupného symbolu %d bude k dispozici maximální hodnota souběžných pracovních procesů pro cíl služby databáze nebo elastického fondu.

Poznámka:

Počáteční nabídka služby Azure SQL Database podporovala pouze dotazy s jedním vláknem. V té době byl počet žádostí vždy ekvivalentní počtu pracovníků. Chybové zprávy 10928 a 10936 v Azure SQL Database obsahují formulaci "Limit požadavku [...] je N a bylo dosaženo" pro účely zpětné kompatibility. Dosažený limit ve skutečnosti představuje počet pracovních procesů. Pokud je nastavení maximálního stupně paralelismu (MAXDOP) rovno nule nebo je větší než jedna, může být počet pracovních procesů mnohem vyšší než počet požadavků a limit se může dosáhnout mnohem dříve, než je hodnota MAXDOP rovna jedné.

Přečtěte si další informace o relacích, pracovních pracovníkech a požadavcích.

v případě potřeby Připojení s vyhrazeným Správa Připojení ionem (DAC)

Pokud probíhá živý incident, kdy došlo k dosažení nebo dosažení limitu pracovního procesu, může se při připojení pomocí aplikace SQL Server Management Studio (SSMS) nebo Azure Data Studia zobrazit chyba 10928. Jedna relace se může připojit pomocí diagnostického Připojení ionu pro databázové Správa istrátory (DAC), i když byla dosažena maximální prahová hodnota pracovního procesu.

Vytvoření připojení k DAC z aplikace SSMS:

  • V nabídce vyberte Soubor > nový > dotaz databázového stroje.
  • V dialogovém okně připojení v poli Název serveru zadejte admin:<fully_qualified_server_name> (bude to něco jako admin:servername.database.windows.net).
  • Vybrat možnosti >>
  • Výběr karty Vlastnosti Připojení
  • Do pole Připojení databáze zadejte název databáze.
  • Vyberte Připojit.

Pokud se zobrazí chyba 40613, Database '%.&#x2a;ls' on server '%.&#x2a;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 '%.&#x2a;ls'může to znamenat, že jiná relace je již připojena k DAC. Pouze jedna relace se může připojit k DAC pro jednu databázi nebo elastický fond najednou.

Pokud po výběru Připojení dojde k chybě Nepovedlo se připojit k serveru, relace DAC se možná úspěšně naváže, pokud používáte verzi SSMS starší než 18.9. Dřívější verze aplikace SSMS se pokusily poskytnout IntelliSense pro připojení k DAC. To se nezdařilo, protože DAC podporuje pouze jeden pracovní proces a IntelliSense vyžaduje samostatný pracovní proces.

Nelze použít připojení DAC s Průzkumník objektů.

Kontrola využití max_worker_percent

Pokud chcete zjistit statistiku spotřeby prostředků pro vaši databázi po dobu 14 dnů, zadejte dotaz na zobrazení sys.resource_stats systémového katalogu. Sloupec max_worker_percent zobrazuje procento pracovních procesů použitých vzhledem k limitu pracovního procesu pro vaši databázi. Připojení k master databázi na logickém serveru pro dotazování sys.resource_stats.

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

Ze sys.dm_db_resource_stats zobrazení dynamické správy můžete také dotazovat statistiky o spotřebě prostředků z poslední hodiny. Připojení přímo do databáze k dotazování sys.dm_db_resource_stats.

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

Nižší využití pracovních procesů, pokud je to možné

Blokující řetězce můžou způsobit náhlé nárůst počtu pracovních procesů v databázi. Velký objem souběžných paralelníchdotazůch Zvýšení maximálního stupně paralelismu (MAXDOP) nebo nastavení MAXDOP na nulu může zvýšit počet aktivních pracovních procesů.

Při třídění incidentu s nedostatečnými pracovníky postupujte následovně:

  1. Prozkoumejte, jestli k blokování dochází nebo jestli můžete identifikovat velký objem souběžných pracovních procesů. Spuštěním následujícího dotazu zkontrolujte aktuální požadavky a zkontrolujte blokování, když databáze vrací chybu 10928. Možná se budete muset připojit pomocí vyhrazeného Správa Připojení ionu (DAC), aby se dotaz spustil.

    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
    
    1. Vyhledejte řádky s blocking_session_id identifikací blokovaných relací. Vyhledejte jednotlivé blocking_session_id položky v seznamu, abyste zjistili, jestli je tato relace také blokovaná. To vás nakonec povede k blokování hlavy. Vylaďte dotaz head blockeru.

      Poznámka:

      Podrobnější informace o řešení potíží s dlouhotrvajícími nebo blokujícími dotazy najdete v tématu Vysvětlení a řešení problémů s blokováním služby Azure SQL Database.

    2. Pokud chcete identifikovat velký objem souběžných pracovních procesů, zkontrolujte celkový počet požadavků a worker_count sloupec pro každý požadavek. Worker_count je počet pracovních procesů v době vzorkování a při provádění požadavku se může v průběhu času měnit. Vylaďte dotazy, aby se snížilo využití prostředků, pokud příčinou vyšších pracovních procesů jsou souběžné dotazy, které běží v optimálním stupni paralelismu. Další informace najdete v části Ladění dotazů a pomocné parametry.

  2. Vyhodnoťte maximální stupeň paralelismu (MAXDOP) pro databázi.

Zvýšení limitů pracovních procesů

Pokud databáze nebo elastický fond konzistentně dosáhne svého limitu pracovního procesu i přes blokování, optimalizaci dotazů a ověření nastavení MAXDOP, zvažte vertikální navýšení kapacity databáze nebo elastického fondu, abyste zvýšili limit pracovního procesu.

Vyhledejte limity prostředků pro Azure SQL Database podle úrovně služby a velikosti výpočetních prostředků:

Přečtěte si další informace o zásadách správného řízení prostředků služby Azure SQL Database pracovních procesů.

Chyba 10929: ID prostředku: 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.

Chyba 40501: Služba je momentálně zaneprázdněná

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Jedná se o chybu omezování motoru, což značí překročení limitů prostředků.

Další informace o omezeních prostředků najdete v tématu Omezení prostředků logického SQL Serveru.

Chyba 40544: Databáze dosáhla kvóty velikosti

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>.

K této chybě dochází v případě, že databáze dosáhla kvóty velikosti.

Následující kroky vám můžou pomoct vyřešit problém nebo vám poskytnout další možnosti:

  1. Zkontrolujte aktuální velikost databáze pomocí řídicího panelu na webu Azure Portal.

    Poznámka:

    Pokud chcete zjistit, které tabulky spotřebovávají nejvíce místa, a proto jsou potenciálními kandidáty na vyčištění, spusťte následující dotaz SQL:

    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
    
  2. Pokud aktuální velikost nepřekračuje maximální podporovanou velikost pro vaši edici, můžete nastavení MAXSIZE zvětšit pomocí příkazu ALTER DATABASE.

  3. Pokud už databáze přesahuje maximální podporovanou velikost vaší edice, zkuste provést jeden nebo několik následujících kroků:

    • Proveďte běžné aktivity čištění databáze. Například vyčistěte nežádoucí data pomocí zkrácení nebo odstranění nebo přesunutí dat pomocí služby SQL Server Integration Services (SSIS) nebo nástroje pro hromadné kopírování (bcp).
    • Vytvořte oddíl nebo odstraňte data, přetáhněte indexy nebo najděte možná řešení v dokumentaci.
    • Informace o škálování databáze najdete v tématu Škálování prostředků izolované databáze a Škálování prostředků elastického fondu.

Chyba 40549: Relace je ukončena, protože máte dlouhotrvající transakci

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Pokud se opakovaně setkáte s touto chybou, zkuste problém vyřešit pomocí následujícího postupu:

  1. Spuštěním následujícího dotazu zobrazíte všechny otevřené relace, které mají vysokou hodnotu sloupce duration_ms :

    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
    

    Můžete se rozhodnout ignorovat řádky, ve kterých input_buffer sloupec zobrazuje dotaz čtený sys.fn_MSxe_read_event_streamz : tyto požadavky souvisejí s relacemi rozšířených událostí.

  2. blocking_session_id Zkontrolujte sloupec a zjistěte, jestli blokování přispívá k dlouhotrvajícím transakcím.

    Poznámka:

    Další informace o řešení potíží s blokováním ve službě Azure SQL Database najdete v tématu Vysvětlení a řešení problémů blokujících službu Azure SQL Database.

  3. Zvažte dávkování dotazů. Informace o dávkování naleznete v tématu Použití dávkování ke zlepšení výkonu aplikace SQL Database.

Chyba 40551: Relace byla ukončena kvůli nadměrnému využití databáze tempdb.

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Chcete-li tento problém vyřešit, postupujte takto:

  1. Změňte dotazy tak, aby se snížilo využití dočasného prostoru tabulky.
  2. Dočasné objekty odstraňte, jakmile už je nepotřebujete.
  3. Ořízte tabulky nebo odeberte nepoužívané tabulky.

Chyba 40552: Relace byla ukončena kvůli nadměrnému využití místa v protokolu transakcí

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Při řešení tohoto problému zkuste použít následující metody:

Chyba 40553: Relace byla ukončena kvůli nadměrnému využití paměti

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Pokud chcete tento problém obejít, zkuste dotaz optimalizovat.

Podrobný postup řešení potíží najdete v tématu Je můj dotaz v cloudu v pořádku?

Další informace o dalších chybách nedostatku paměti a ukázkových dotazech najdete v tématu Řešení chyb nedostatku paměti ve službě Azure SQL Database.

Tabulka chybových zpráv zásad správného řízení prostředků

Kód chyby Závažnost Popis
10928 20 ID zdroje: %d. %s limit pro databázi je %d a bylo dosaženo. Viz http://go.microsoft.com/fwlink/?LinkId=267637.

ID prostředku označuje prostředek, který dosáhl limitu. Pokud JE ID zdroje = 1, znamená to, že bylo dosaženo limitu pracovního procesu. Další informace najdete v tématu Chyba 10928: ID prostředku: 1. Limit požadavku pro databázi je %d a byl dosažen. Pokud JE ID prostředku = 2, znamená to, že bylo dosaženo limitu relace.

Další informace o limitech prostředků:
Omezení prostředků logického SQL Serveru.
Omezení založená na DTU pro izolované databáze.
Omezení založená na virtuálních jádrech pro izolované databáze.
Limity prostředků služby Azure SQL Managed Instance
10936 20 ID zdroje: %d. %s limit pro elastický fond je %d a bylo dosaženo. Viz http://go.microsoft.com/fwlink/?LinkId=267637.

ID prostředku označuje prostředek, který dosáhl limitu. Pokud JE ID zdroje = 1, znamená to, že bylo dosaženo limitu pracovního procesu. Další informace najdete v chybě 10936: ID prostředku: 1. Limit požadavku pro elastický fond je %d a byl dosažen.< a1/>. Pokud JE ID prostředku = 2, znamená to, že bylo dosaženo limitu relace.

Další informace o limitech prostředků:
Omezení prostředků logického SQL Serveru.
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro elastické fondy.
Limity prostředků služby Azure SQL Managed Instance
10929 20 ID zdroje: %d. Minimální záruka %s je %d, maximální limit je %d a aktuální využití databáze je %d. Server je ale momentálně příliš zaneprázdněný na podporu požadavků větších než %d pro tuto databázi. ID prostředku označuje prostředek, který dosáhl limitu. Pro pracovní vlákna id prostředku = 1. Pro relace ID prostředku = 2. Další informace najdete tady: .
Omezení prostředků logického SQL Serveru.
Omezení založená na DTU pro izolované databáze.
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro izolované databáze.
Omezení založená na virtuálních jádrech pro elastické fondy.
Limity prostředků služby Azure SQL Managed Instance
V opačném případě zkuste to znovu později.
40544 20 Databáze dosáhla kvóty velikosti. Vytvořte oddíl nebo odstraňte data, přetáhněte indexy nebo najděte možná řešení v dokumentaci. Informace o škálování databáze najdete v tématu Škálování prostředků izolované databáze a Škálování prostředků elastického fondu.
40549 16 Relace je ukončena, protože máte dlouhotrvající transakci. Zkuste operaci zkrátit. Informace o dávkování naleznete v tématu Použití dávkování ke zlepšení výkonu aplikace SQL Database.
40550 16 Relace byla ukončena, protože získala příliš mnoho zámků. Zkuste přečíst nebo upravit méně řádků v jedné transakci. Informace o dávkování naleznete v tématu Použití dávkování ke zlepšení výkonu aplikace SQL Database.
40551 16 Relace byla ukončena kvůli nadměrnému tempdb využití. Zkuste upravit dotaz tak, aby se snížilo využití dočasného prostoru tabulky.

Pokud používáte dočasné objekty, zachovají se místo v tempdb databázi vyřazením dočasných objektů, které už relace nepotřebuje. Další informace o tempdb omezeních ve službě SQL Database najdete v tématu Databáze tempdb ve službě SQL Database.
40552 16 Relace byla ukončena kvůli nadměrnému využití prostoru protokolu transakcí. Zkuste upravit méně řádků v jedné transakci. Informace o dávkování naleznete v tématu Použití dávkování ke zlepšení výkonu aplikace SQL Database.

Pokud provádíte hromadné vkládání pomocí bcp.exe nástroje nebo System.Data.SqlClient.SqlBulkCopy třídy, zkuste použít -b batchsize nebo BatchSize možnosti omezit počet řádků zkopírovaných na server v každé transakci. Pokud znovu sestavíte index pomocí ALTER INDEX příkazu, zkuste použít tuto REBUILD WITH ONLINE = ON možnost. Informace o velikostech transakčních protokolů pro nákupní model virtuálních jader najdete tady:
Omezení založená na virtuálních jádrech pro izolované databáze.
Omezení založená na virtuálních jádrech pro elastické fondy.
Limity prostředků služby Azure SQL Managed Instance
40553 16 Relace byla ukončena kvůli nadměrnému využití paměti. Zkuste dotaz upravit tak, aby zpracovával méně řádků.

Snížení počtu ORDER BY a GROUP BY operací v kódu Transact-SQL snižuje požadavky na paměť dotazu. Informace o škálování databáze najdete v tématu Škálování prostředků izolované databáze a Škálování prostředků elastického fondu. Další informace o chybách nedostatku paměti a ukázkových dotazech najdete v tématu Řešení chyb nedostatku paměti ve službě Azure SQL Database.

Chyby elastického fondu

Následující chyby souvisejí s vytvářením a používáním elastických fondů:

Kód chyby Závažnost Popis Nápravná akce
1132 17 Elastický fond dosáhl limitu úložiště. Využití úložiště pro elastický fond nesmí překročit (%d) MB. Pokus o zápis dat do databáze při dosažení limitu úložiště elastického fondu Informace o limitech prostředků najdete tady:
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro elastické fondy.
Pokud je to možné, zvažte zvýšení DTU nebo přidání úložiště do elastického fondu, pokud je to možné, abyste zvýšili limit úložiště, snížili úložiště používané jednotlivými databázemi v rámci elastického fondu nebo z elastického fondu odebrali databáze. Informace o škálování elastického fondu najdete v tématu Škálování prostředků elastického fondu. Další informace o odebrání nepoužívaného místa z databází najdete v tématu Správa prostoru souborů pro databáze ve službě Azure SQL Database.
10929 16 Minimální záruka %s je %d, maximální limit je %d a aktuální využití databáze je %d. Server je ale momentálně příliš zaneprázdněný na podporu požadavků větších než %d pro tuto databázi. Informace o limitech prostředků najdete tady:
Limity založené na DTU pro elastické fondy.
Omezení založená na virtuálních jádrech pro elastické fondy.
V opačném případě zkuste to znovu později. DTU / vCore min na databázi; Maximální počet DTU / virtuálních jader na databázi. Celkový počet souběžných pracovních procesů ve všech databázích v elastickém fondu se pokusil překročit limit fondu.
Pokud je to možné, zvažte zvýšení DTU nebo virtuálních jader elastického fondu, abyste zvýšili limit pracovního procesu, nebo z elastického fondu odeberte databáze.
40844 16 Databáze %ls na serveru %ls je databáze edice %ls v elastickém fondu a nemůže mít vztah průběžného kopírování.
40857 16 Elastický fond nebyl nalezen pro server: %ls, název elastického fondu: %ls. Zadaný elastický fond na zadaném serveru neexistuje. Zadejte platný název elastického fondu.
40858 16 Elastický fond %ls již na serveru existuje: %ls. Zadaný elastický fond již na zadaném serveru existuje. Zadejte nový název elastického fondu.
40859 16 Elastický fond nepodporuje úroveň služby %ls. Zadaná úroveň služby není pro zřizování elastického fondu podporovaná. Zadejte správnou edici nebo ponechte prázdnou úroveň služby, aby používala výchozí úroveň služby.
40860 16 Kombinace elastického fondu %ls a cíle služby %ls je neplatná. Elastický fond a úroveň služby je možné zadat společně pouze v případě, že je typ prostředku zadaný jako ElasticPool. Zadejte správnou kombinaci elastického fondu a úrovně služby.
40861 16 Edice databáze %.*ls nemůže být jiná než úroveň služby elastického fondu, která je %.*ls. Edice databáze se liší od úrovně služby elastického fondu. Nezadávejte edici databáze, která se liší od úrovně služby elastického fondu. Všimněte si, že edici databáze není nutné zadávat.
40862 16 Pokud je zadaný cíl služby elastického fondu, je nutné zadat název elastického fondu. Cíl služby elastického fondu jednoznačně neidentifikuje elastický fond. Pokud používáte cíl služby elastického fondu, zadejte název elastického fondu.
40864 16 Jednotky DTU pro elastický fond musí být alespoň (%d) DTU pro úroveň služby %.*ls. Pokus o nastavení DTU elastického fondu pod minimálním limitem Zopakujte nastavení DTU elastického fondu na minimální limit.
40865 16 DTU elastického fondu nesmí překročit (%d) DTU pro úroveň služby %.*ls. Pokus o nastavení DTU elastického fondu nad maximální limit Zopakujte nastavení DTU elastického fondu na maximálně maximální limit.
40867 16 Maximální počet DTU na databázi musí být alespoň (%d) pro úroveň služby %.*ls. Pokus o nastavení maximálního počtu DTU na databázi pod podporovaný limit. Zvažte použití úrovně služby elastického fondu, která podporuje požadované nastavení.
40868 16 Maximální počet DTU na databázi nesmí překročit (%d) pro úroveň služby %.*ls. Pokus o nastavení maximálního počtu DTU na databázi nad rámec podporovaného limitu Zvažte použití úrovně služby elastického fondu, která podporuje požadované nastavení.
40870 16 Minimální počet DTU na databázi nesmí překročit (%d) pro úroveň služby %.*ls. Pokus o nastavení minimální hodnoty DTU na databázi nad rámec podporovaného limitu Zvažte použití úrovně služby elastického fondu, která podporuje požadované nastavení.
40873 16 Počet databází (%d) a minimální počet DTU na databázi (%d) nesmí překročit počet DTU elastického fondu (%d). Pokus o zadání minimálního počtu DTU pro databáze v elastickém fondu, které překračují DTU elastického fondu. Zvažte zvýšení DTU elastického fondu nebo snížení minimálního počtu DTU na databázi nebo snížení počtu databází v elastickém fondu.
40877 16 Elastický fond nelze odstranit, pokud neobsahuje žádné databáze. Elastický fond obsahuje jednu nebo více databází, a proto ji nelze odstranit. Odeberte databáze z elastického fondu, abyste je mohli odstranit.
40881 16 Elastický fond %.*ls dosáhl limitu počtu databází. Limit počtu databází pro elastický fond nemůže překročit (%d) pro elastický fond s DTU (%d). Pokus o vytvoření nebo přidání databáze do elastického fondu při dosažení limitu počtu databází elastického fondu Pokud je to možné, zvažte zvýšení DTU elastického fondu, pokud je to možné, nebo odebrání databází z elastického fondu.
40889 16 Počet DTU nebo limit úložiště pro elastický fond %.*ls nelze snížit, protože by pro své databáze nebylo dostatek místa pro úložiště. Pokus o snížení limitu úložiště elastického fondu pod jeho využitím úložiště Zvažte snížení využití úložiště jednotlivých databází v elastickém fondu nebo odebrání databází z fondu, aby se snížil limit DTU nebo úložiště.
40891 16 Minimální počet DTU na databázi (%d) nesmí překročit maximální počet DTU na databázi (%d). Při pokusu o nastavení minimální hodnoty DTU na databázi vyšší než maximální počet DTU na databázi. Ujistěte se, že minimum DTU na databáze nepřekračuje maximální počet DTU na databázi.
TBD 16 Velikost úložiště pro jednotlivé databáze v elastickém fondu nesmí překročit maximální velikost povolenou elastickým fondem úrovně služby %.*ls. Maximální velikost databáze překračuje maximální velikost povolenou úrovní služby elastického fondu. Nastavte maximální velikost databáze v mezích maximální velikosti povolené úrovní služby elastického fondu.

Nelze otevřít databázi "master" požadovanou pro přihlášení. Přihlášení se nezdařilo.

K tomuto problému dochází, protože účet nemá oprávnění pro přístup master k databázi. Ve výchozím nastavení se ale SQL Server Management Studio (SSMS) pokusí připojit k master databázi.

Pokud chcete tento problém vyřešit, postupujte následovně:

  1. Na přihlašovací obrazovce aplikace SSMS vyberte Možnosti a pak vyberte Připojení ion Vlastnosti.

  2. Do pole Připojení do databáze zadejte výchozí název databáze uživatele jako výchozí přihlašovací databázi a pak vyberte Připojení.

    Connection properties

Chyby jen pro čtení

Pokud se pokusíte zapisovat do databáze, která je určená jen pro čtení, zobrazí se chyba. V některých scénářích nemusí být příčina stavu databáze jen pro čtení okamžitě jasná.

Chyba 3906: Nepodařilo se aktualizovat databázi DatabaseName, protože databáze je jen pro čtení.

Při pokusu o úpravu databáze jen pro čtení se vyvolá následující chyba.

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

Možná jste připojení k replice jen pro čtení.

Pro Službu Azure SQL Database i Azure SQL Managed Instance můžete být připojeni k databázi na replice jen pro čtení. V tomto případě vrátí následující dotaz pomocí funkceREAD_ONLYDATABASEPROPERTYEX():

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

Pokud se připojujete pomocí aplikace SQL Server Management Studio, ověřte, jestli jste na kartě Další Připojení parametrypřipojení zadali ApplicationIntent=ReadOnly.

Pokud je připojení z aplikace nebo klienta pomocí připojovací řetězec, ověřte, jestli připojovací řetězec zadal ApplicationIntent=ReadOnly. Další informace najdete v Připojení na repliku jen pro čtení.

Databáze může být nastavená jen pro čtení.

Pokud používáte Azure SQL Database, je možné, že samotná databáze byla nastavená na jen pro čtení. Stav databáze můžete ověřit pomocí následujícího dotazu:

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

Stav jen pro čtení pro databázi ve službě Azure SQL Database můžete upravit pomocí příkazu ALTER DATABASE Transact-SQL. Aktuálně nemůžete nastavit databázi ve spravované instanci na jen pro čtení.

Ověřte, jestli příčinou chyby je problém s připojením.

Pokud chcete ověřit, jestli je chyba způsobená problémem s připojením, zkontrolujte trasování zásobníku pro rámce, které zobrazují volání pro otevření připojení, jako jsou následující (všimněte si odkazu na třídu Sql Připojení 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>

Když se výjimka aktivuje problémy s dotazy, všimnete si zásobníku volání, který je podobný následujícímu (všimněte si odkazu na třídu SqlCommand ). V takovém případě vylaďte dotazy.

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

Další pokyny k vyladění výkonu najdete v následujících zdrojích informací:

Postup řešení běžných potíží s připojením

  1. Ujistěte se, že je na aplikačním serveru povolený protokol TCP/IP jako klientský protokol. Další informace naleznete v tématu Konfigurace klientských protokolů. Na aplikačníchserverch

  2. Zkontrolujte připojovací řetězec aplikace a ujistěte se, že je správně nakonfigurovaná. Ujistěte se například, že připojovací řetězec určuje správný port (1433) a plně kvalifikovaný název serveru. Viz Získání informací o připojení.

  3. Zkuste zvýšit hodnotu časového limitu připojení. Doporučujeme použít časový limit připojení nejméně 30 sekund.

  4. Otestujte připojení mezi aplikačním serverem a službou Azure SQL Database pomocí aplikace SQL Server Management Studio (SSMS), souboru UDL, příkazu ping nebo telnetu. Další informace najdete v tématu Řešení potíží s připojením a diagnostika problémů s připojením.

    Poznámka:

    Jako krok pro řešení potíží můžete také otestovat připojení na jiném klientském počítači.

  5. Osvědčeným postupem je zajistit, aby byla logika opakování zavedená. Další informace o logice opakování najdete v tématu Řešení přechodných chyb a chyb připojení ke službě SQL Database.

Pokud tyto kroky váš problém nevyřeší, zkuste shromáždit další data a kontaktovat podporu. Pokud je vaše aplikace cloudová služba, povolte protokolování. Tento krok vrátí časové razítko UTC selhání. Sql Database navíc vrátí ID trasování. Tyto informace můžou využívat služby zákaznické podpory Microsoftu.

Další informace o povolení protokolování najdete v tématu Povolení protokolování diagnostiky pro aplikace ve službě Aplikace Azure Service.

Další kroky

Další informace o souvisejících tématech najdete v následujících článcích: