In On-Premise-SQL-Datenbanken ist es normal, dass gelegentlich ein Wartungsplan für die Neuerstellung der Indizes erstellt wird, wenn diese nicht so häufig verwendet werden.
Wie kann ich es in Azure SQL DB einrichten?
P.S: Ich habe es vorher versucht, aber da ich keine Optionen dafür gefunden habe, dachte ich, dass sie es vielleicht automatisch tun, bis ich diesen Beitrag gelesen und versucht habe:
SELECT
DB_NAME() AS DBName
,OBJECT_NAME(ps.object_id) AS TableName
,i.name AS IndexName
,ips.index_type_desc
,ips.avg_fragmentation_in_percent
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.indexes i
ON ps.object_id = i.object_id
AND ps.index_id = i.index_id
CROSS APPLY sys.dm_db_index_physical_stats(DB_ID(), ps.object_id, ps.index_id, null, 'LIMITED') ips
ORDER BY ps.object_id, ps.index_id
Und fand heraus, dass ich Indizes habe, die gepflegt werden müssen
Ich möchte darauf hinweisen, dass die meisten Benutzer überhaupt nicht daran denken müssen, Indizes in SQL Azure neu zu erstellen. Ja, B + Tree-Indizes können fragmentiert werden, und dies kann im Vergleich zu perfekt abgestimmten Indizes zu Speicherplatz und CPU-Aufwand führen. Es gibt also einige Szenarien, in denen wir mit Kunden zusammenarbeiten, um Indizes neu zu erstellen. (Das Hauptszenario ist, wenn der Kunde derzeit nicht mehr über genügend Speicherplatz verfügt, da der Speicherplatz in SQL Azure aufgrund der aktuellen Architektur etwas eingeschränkt ist). Daher möchte ich Sie dazu ermutigen, einen Schritt zurückzutreten und zu bedenken, dass die Verwendung des SQL Server-Modells zum Verwalten von Datenbanken nicht "falsch" ist, dass es sich aber möglicherweise Ihren Aufwand lohnt.
(Wenn Sie am Ende einen Index neu erstellen müssen, können Sie gerne die hier von den anderen Postern veröffentlichten Modelle verwenden. Normalerweise handelt es sich dabei um feine Modelle für Skriptaufgaben. Beachten Sie, dass die verwaltete Instanz von SQL Azure auch den SQL-Agent unterstützt, den Sie auch verwenden können (falls Sie dies wünschen), um Jobs für Skriptwartungsvorgänge zu erstellen.
Hier sind einige Details, die Ihnen bei der Entscheidung helfen können, ob Sie ein Kandidat für die Neuerstellung von Indizes sind:
Die offizielle Empfehlung, die ich Kunden gebe, ist, sich nicht mit Indexrekonstruktionen zu beschäftigen, es sei denn, sie verfügen über eine Tier-1-App, bei der sie einen echten Bedarf gezeigt haben (der Nutzen überwiegt die Kosten) oder sie sind ein SaaS ISV, bei dem sie es versuchen Um eine Arbeitslast für viele Datenbanken/Kunden in elastischen Pools oder in einem Multi-Tenant-Datenbankdesign zu optimieren, können sie ihre COGS reduzieren oder verhindern, dass auf einer sehr großen Datenbank (wie zuvor erwähnt) nicht genügend Speicherplatz zur Verfügung steht. Bei den größten Kunden, die wir auf der Plattform haben, sehen wir manchmal es wert, Indexoperationen manuell mit dem Kunden durchzuführen, aber wir brauchen oft keine reguläre Arbeit, bei der wir diese Art von Operation "nur für den Fall" durchführen. . Die Absicht des SQL-Teams besteht darin, dass Sie sich nicht darum kümmern müssen und sich stattdessen auf Ihre App konzentrieren können. Natürlich gibt es immer Dinge, die wir in unsere automatischen Mechanismen einbauen oder verbessern können, so dass ich völlig die Möglichkeit berücksichtige, dass eine individuelle Kundendatenbank solche Aktionen benötigt. Ich habe über die von mir genannten Fälle hinaus keine eigenen gesehen, und selbst diese sind selten ein Thema.
Ich hoffe, dies gibt Ihnen einen Kontext, um zu verstehen, warum dies auf der Plattform noch nicht erfolgt ist - für die große Mehrheit der Kundendatenbanken, die wir heute in unserem Service haben, war dies im Vergleich zu anderen dringenden Bedürfnissen einfach kein Problem. Natürlich gehen wir die Liste der Dinge, die wir für jeden Planungszyklus aufbauen müssen, noch einmal durch, und wir schauen uns regelmäßig solche Möglichkeiten an.
Viel Glück - was auch immer Ihr Ergebnis hier ist, ich hoffe, es hilft Ihnen dabei, die richtige Wahl zu treffen.
Mit freundlichen Grüßen Conor Cunningham Architekt, SQL
Sie können Azure Automation zum Planen von Indexwartungsaufgaben verwenden, wie hier erläutert: Wiederherstellen von SQL-Datenbankindizes mithilfe von Azure Automation
Nachfolgend sind Schritte aufgeführt:
1) Stellen Sie ein Automatisierungskonto bereit, falls Sie noch kein Konto haben. Gehen Sie zu https://portal.Azure.com und wählen Sie Neu> Management> Automatisierungskonto
2) Öffnen Sie nach dem Erstellen des Automatisierungskontos die Details und klicken Sie auf Runbooks> Galerie durchsuchen
Geben Sie in das Suchfeld die Word- "Indizes" und das Runbook "Tabellen in einer Azure-Datenbank indizieren, wenn diese eine hohe Fragmentierung aufweisen" an:
4) Beachten Sie, dass der Autor des Runbooks das SC Automation Product Team bei Microsoft ist. Klicken Sie auf Importieren:
5) Nach dem Importieren des Runbooks fügen wir nun die Datenbankanmeldeinformationen zu den Assets hinzu. Klicken Sie auf Assets> Credentials und dann auf die Schaltfläche "Credential hinzufügen ...".
6) Legen Sie einen Anmeldeinformationsnamen (der später im Runbook verwendet wird), den Datenbankbenutzernamen und das Kennwort fest:
7) Klicken Sie nun erneut auf Runbooks und wählen Sie dann "Update-SQLIndexRunbook" aus der Liste aus und klicken Sie auf die Schaltfläche "Bearbeiten". Sie können das ausgeführte PowerShell-Skript sehen:
8) Wenn Sie das Skript testen möchten, klicken Sie einfach auf die Schaltfläche "Test Pane", und das Testfenster wird geöffnet. Geben Sie die erforderlichen Parameter ein und klicken Sie auf Start, um die Indexwiederherstellung auszuführen. Wenn ein Fehler auftritt, wird der Fehler im Ergebnisfenster protokolliert. Beachten Sie, dass dies abhängig von der Datenbank und den anderen Parametern lange dauern kann:
9) Gehen Sie nun zurück zum Editor und klicken Sie auf die Schaltfläche "Veröffentlichen", um das Runbook zu aktivieren. Wenn wir auf “Start” klicken, erscheint ein Fenster, in dem Sie nach den Parametern gefragt werden. Da wir diese Aufgabe planen möchten, klicken wir stattdessen auf die Schaltfläche "Zeitplan":
10) Klicken Sie auf den Link Schedule, um einen neuen Schedule für das Runbook zu erstellen. Ich habe einmal pro Woche angegeben, aber das hängt von Ihrer Arbeitslast und davon ab, wie Ihre Indizes ihre Fragmentierung im Laufe der Zeit erhöhen. Sie müssen den Zeitplan an Ihre Bedürfnisse anpassen und die ersten Abfragen zwischen den Ausführungen ausführen:
11) Führen Sie nun die Parameter und Laufeinstellungen ein:
HINWEIS: Sie können mit unterschiedlichen Zeitplänen mit unterschiedlichen Einstellungen spielen, d. H. Mit einem bestimmten Zeitplan für eine bestimmte Tabelle.
Damit sind Sie fertig. Denken Sie daran, die Protokolleinstellungen wie gewünscht zu ändern:
Azure Automation ist gut und die Preise sind auch vernachlässigbar.
Einige andere Optionen, die Sie haben, sind
1.Erstellen Sie eine SQL-Task zum Ausführen und planen Sie sie über den SQL-Agent. Der SQL-Task für die Ausführung sollte den Code für die Indexregenerierung zusammen mit der Statistik für die Statistiken enthalten
2.Sie können auch einen Verbindungsserver für SQLAZURE erstellen und einen SQL-Agentenjob erstellen. Um einen Verbindungsserver für Azure zu erstellen, können Sie diesen SO link sehen: Ich muss einen Verbindungsserver zu einem hinzufügen MS Azure SQL Server
Fügen Sie als @ TheGamiswar einen Verbindungsserver hinzu und erstellen Sie dann eine gespeicherte Prozedur wie diese:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [LinkedServerName].[RemoteDB].[dbo].[sp_RebuildReorganizIndexes]
AS
BEGIN
ALTER INDEX PK_MyTable ON MyTable REBUILD WITH (STATISTICS_NORECOMPUTE = ON, ONLINE=ON);
ALTER INDEX IX_MyTable ON MyTable REBUILD WITH (STATISTICS_NORECOMPUTE = ON, ONLINE=ON); --Nonclustered index
ALTER INDEX PK_MyTable ON MyTable REORGANIZE;
ALTER INDEX IX_MyTable ON MyTable REORGANIZE;
END
Verwenden Sie dann auf Ihrem Verbindungsserver "SQL Server Agent", um einen neuen Auftrag und einen Zeitplan zu erstellen:
Weitere Informationen finden Sie unter https://docs.Microsoft.com/en-us/sql/ssms/agent/create-a-job?view=sql-server-2017