(0) exportieren Drucken
Alle erweitern

Einschränkung des Azure SQL-Datenbankmoduls

Letzte Aktualisierung: Juni 2014

Durch die Einschränkung des Moduls wird die Ressourcenverwendung beeinträchtigt, weil Clientverbindungen blockiert werden, was sich wiederum negativ auf die gesamte Systemintegrität auswirkt. Der Umfang, in dem Abonnentenverbindungen blockiert werden, reicht von der bloßen Blockierung von Einfügungen und Updates über die Blockierung aller Schreibvorgänge bis hin zur Blockierung aller Lese- und Schreibvorgänge. Der Zeitraum, in dem eine Einschränkung auftritt, wird als Einschränkungszyklus bezeichnet. Das Intervall beträgt standardmäßig 10 Sekunden und kann von Benutzern nicht geändert werden.

Der Schweregrad einer Einschränkung entspricht einer der beiden folgenden Stufen:

  • Leichte Einschränkung: In dieser ersten Stufe werden vordefinierte Sicherheitsschwellenwerte von Computerressourcen, wie Transaktionsprotokoll, E/A und Speicher, überschritten. SQL-Datenbank wählt einen Teil der Datenbanken, die die meisten Ressourcen beanspruchen, aus und schränkt deren Aktivitäten ein. Nicht alle Datenbanken auf dem Computer unterliegen dem Einschränkungsmechanismus, sondern nur die, die die meisten Ressourcen verwenden. Eine Ressourcenverwendung unter dem definierten Schwellenwert gibt an, dass genügend Ressourcen für alle Datenbanken auf dem Server vorhanden sind.

  • Starke Einschränkung: In dieser zweiten und letzten Stufe wird ein Computer aufgrund von Überlastung deutlich beeinträchtigt. Bei der starken Einschränkung sind erst wieder neue Verbindungen mit den auf dem Computer gehosteten Datenbanken zulässig, wenn Ressourcen frei werden. Bei neuen Verbindungsversuchen gibt SQL-Datenbank Fehlermeldungen mit der Ressource zurück, bei der die Überschreitung aufgetreten ist.

Die folgende Tabelle enthält Informationen zum Mechanismus der Moduleinschränkung, zum zurückgegebenen Fehlercode sowie Empfehlungen zur Fehlerbehebung.

 

Mechanismus zur Moduleinschränkung Zurückgegebener Fehlercode Empfehlung

Folgende Schritte werden im Rahmen der Moduleinschränkung ausgeführt, um die Auslastung zu verringern und Systemintegrität zu schützen:

  1. Ermitteln, inwieweit die Auslastung reduziert werden muss, um die Systemintegrität wiederherzustellen.

  2. Kennzeichnen von Abonnentendatenbanken, die übermäßige Ressourcen beanspruchen, als Kandidaten für die Einschränkung. Wenn die Moduleinschränkung aufgrund einer geringen Überschreitung auftritt, können bestimmte Datenbanken von der Einstufung als Einschränkungskandidaten ausgenommen werden. Tritt die Moduleinschränkung aufgrund einer hohen Überschreitung auf, können alle Abonnentendatenbanken für die Einschränkung in Betracht gezogen werden, mit Ausnahme der Abonnentendatenbanken, die im Einschränkungszyklus unmittelbar vor dem aktuellen Einschränkungszyklus keine Auslastung zu verzeichnen hatten.

  3. Berechnen, wie viele Kandidatendatenbanken eingeschränkt werden müssen, um die Systemintegrität wiederherzustellen. Dazu werden historische Ressourcenverwendungsmuster der Kandidatendatenbanken ausgewertet.

  4. Einschränken der berechneten Anzahl von Kandidatendatenbanken, bis wieder der gewünschte Systemauslastungsgrad erreicht ist. Der Grad der Einschränkung bzw. der Einschränkungsmodus kann variieren, je nachdem, ob eine starke Einschränkung oder leichte Einschränkung angewendet wird. Der Grad und Modus der angewendeten Einschränkung kann anhand der Vorfall-ID und der Codewerte in der Fehlermeldung ermittelt werden. Alle eingeschränkten Datenbanken bleiben mindestens für die Dauer eines Einschränkungszyklus (10 Sekunden) eingeschränkt, allerdings kann die Einschränkung häufig mehrere Einschränkungszyklen überdauern, bis die Systemintegrität wiederhergestellt ist.

40501: Der Dienst ist derzeit ausgelastet. Wiederholen Sie die Anforderung in 10 Sekunden. Vorfall-ID: <ID>. Code: <Code>.

noteHinweis
Anhand der Vorfall-ID und Code-Werte kann ermittelt werden, welche Anforderungen eingeschränkt wurden und ob eine leichte oder starke Einschränkung angewendet wird. Weitere Informationen finden Sie unter "Einschränkungsvorfall-ID" und "Decodieren von Ursachencodes" weiter unten in diesem Thema.

Führen Sie ein Backoff aus, und wiederholen Sie die Anforderung nach 10 Sekunden.

Die Einschränkungsvorfall-ID im Fehler 40501 ist ein GUID-Wert, mit dem ein Einschränkungsvorfall eindeutig bezeichnet wird.

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: <ID>. Code: <code>.

Wenn Sie nicht ermitteln können, warum die Einschränkung aufgetreten ist und ob sie weiterhin besteht, und Sie nicht wissen, wie Sie das Problem beheben, wenden Sie sich an den Microsoft-Support, und geben Sie die Vorfall-ID (<ID>) aus der Fehlermeldung an. Der Microsoft-Support ruft anhand dieser Vorfall-ID weitere Informationen zum Einschränkungsvorfall ab. Die Vorfall-ID kann zum Abrufen der folgenden Informationen verwendet werden:

  • Der Startzeit des Einschränkungsvorfalls.

  • Dem Typ der Einschränkung (leichte Einschränkung oder starke Einschränkung).

  • Den Ressourcentyp (z. B. CPU), der die Ursache für das Auslösen des Einschränkungsvorfalls ist.

  • Welche Vorgänge hat der Benutzer ausgeführt, als sich dieser Einschränkungsvorfall ereignet hat?

Nachdem Sie die zugrunde liegende Ursache vom Microsoft-Kundensupport erfahren haben, können Sie entsprechende Änderungen an der Anwendung vornehmen.

In diesem Abschnitt wird das Decodieren der Ursachencodes beschrieben, die durch den folgenden Moduleinschränkungs-Fehlercode zurückgegeben werden:

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: <ID>. Code: <code>.

Der Ursachencode (<code>) in der Fehlermeldung ist eine Dezimalzahl, die Informationen zum Einschränkungsmodus und den überschrittenen Ressourcentypen enthält:

  • Der Einschränkungsmodus dient zum Aufzählen der abgelehnten Anweisungstypen.

  • Mit dem Ressourcentyp werden die überschrittenen Ressourcen angegeben. Einschränkungen können für mehrere Ressourcentypen gleichzeitig eintreten, wie etwa CPU und IO.

Im Folgenden eine Beispielfehlermeldung mit dem Ursachencode 131075:

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: {5DE17AB8-A6E34BE5-A2E95BB5D4CC4155}. Code: 131075.

Im folgenden Diagramm wird das Decodieren der Ursachencodes veranschaulicht.

Decodieren von Ursachencodes

Um den Einschränkungsmodus zu erhalten, wenden Sie Modulo 4 auf den Ursachencode an. Durch die Modulo-Operation wird der Rest der Division einer Zahl durch eine andere Zahl zurückgegeben. Um den Einschränkungs- und Ressourcentyp zu erhalten, teilen Sie den Ursachencode durch 256 wie in Schritt 1 gezeigt. Rechnen Sie anschließend den Quotienten des Ergebnisses in eine Binärzahl um wie in den Schritten 2 und 3 gezeigt. Im Diagramm sind alle Einschränkungs- und Ressourcentypen aufgeführt. Vergleichen Sie die Bits des Einschränkungstyps mit denen des Ressourcentyps wie im Diagramm gezeigt.

Die folgende Tabelle enthält eine Liste mit den Einschränkungsmodi:

 

Code des Drosselungsmodus Beschreibung Abgelehnte Anweisungstypen Anweisungen, die noch verarbeitet werden können

0

Keine Einschränkung

Keiner

Alle

1

Aktualisieren/Einfügen ablehnen

INSERT, UPDATE, CREATE TABLE | INDEX

DELETE, DROP TABLE | INDEX, TRUNCATE

2

Alle Schreibvorgänge ablehnen

INSERT, UPDATE, DELETE, CREATE, DROP

SELECT

3

Alle ablehnen

Alle

Keiner

Um den Einschränkungsmodus zu erhalten, wenden Sie Modulo 4 auf den Ursachencode an. 131075 % 4 = 3. Das Ergebnis 3 bedeutet, dass der Einschränkungsmodus "Alle ablehnen" lautet.

Um den Einschränkungs- und Ressourcentyp zu erhalten, teilen Sie den Ursachencode durch 256. Rechnen Sie anschließend den Quotienten des Ergebnisses in eine Binärzahl um. 131075 / 256 = 512 (dezimal) und 512 (dezimal) = 10 00 00 00 00 (binär). Das bedeutet, die Datenbank wurde aufgrund CPU (Ressourcentyp 4) und starker Einschränkung (10) eingeschränkt.

Im folgenden Beispielcode wird die ThrottlingCondition-Klasse im Anwendungsblock zur Behandlung vorübergehender Fehler (auch als "Topaz" bezeichnet) im Enterprise Library Integration Pack für Azure verwendet, um den Ursachencode im Moduleinschränkungsfehler (40501) zu decodieren. Informationen dazu, wie Sie die Assemblys des Anwendungsblocks zur Behandlung vorübergehender Fehler und den Quellcode zur Verwendung der ThrottlingCondition-Klasse herunterladen, finden Sie unter Enterprise Library 5.0 Integration Pack für Azure.

In diesem Beispielcode werden Sie aufgefordert, den im Moduleinschränkungsfehler (40501) ausgegebenen Ursachencode einzugeben. Anschließend werden der Einschränkungsmodus, Einschränkungstyp und Ressourcentyp für den angegebenen Ursachencode angezeigt.

using System;
using Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Data;

namespace ThrottlingDecoder
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter a throttling code to be decoded: ");
            var rawCode = Console.ReadLine();
            int reasonCode;

            if (Int32.TryParse(rawCode, out reasonCode))
            {
                var throttlingCode = ThrottlingCondition.FromReasonCode(reasonCode);

                Console.WriteLine("\nBreakdown for throttling reason code {0}:\n", reasonCode);

                Console.WriteLine("Throttling mode: {0}", throttlingCode.ThrottlingMode);
                Console.WriteLine("Throttled On CPU: {0}", throttlingCode.IsThrottledOnCpu);
                Console.WriteLine("Throttled On DB Size: {0}", throttlingCode.IsThrottledOnDatabaseSize);
                Console.WriteLine("Throttled On DB Reads: {0}", throttlingCode.IsThrottledOnDataRead);
                Console.WriteLine("Throttled On DB Free space: {0}", throttlingCode.IsThrottledOnDataSpace);
                Console.WriteLine("Throttled On Log Free Size: {0}", throttlingCode.IsThrottledOnLogSpace);
                Console.WriteLine("Throttled On Log Writes: {0}", throttlingCode.IsThrottledOnLogWrite);
                Console.WriteLine("Throttled On Worker Threads: {0}", throttlingCode.IsThrottledOnWorkerThreads);
                
                Console.WriteLine("\nThrottled resources:");

                foreach (var res in throttlingCode.ThrottledResources)
                {
                   if (res.Item2 != ThrottlingType.None) Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Resource type {0} is throttled on {1}", res.Item1, res.Item2);
                    if (res.Item2 != ThrottlingType.None) Console.ResetColor();
                }
            }
            else
            {
                Console.WriteLine("Sorry, but the input you provided does not seem to be a valid number.");
            }
            Console.Read();
        }
    }
}

Alternativ können Sie den Beispielcode im Handbuch zur Leistung und Flexibilität von Azure SQL-Datenbanken im TechNet Wiki zum Decodieren der Ursachencodes nutzen. Dieser Beispielcode ist unabhängig vom Anwendungsblock zur Behandlung vorübergehender Fehler.

Siehe auch

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft