Database
 sql >> Datenbank >  >> RDS >> Database

Ein paar kleine Probleme mit Hekaton-Samples

Einige von Ihnen haben Zugriff auf veröffentlichtes Hekaton In-Memory-OLTP-Demoskripte mit AdventureWorks; das neueste Muster wird hier veröffentlicht. Diese Beispiele huckepack auf der AdventureWorks2012-Beispieldatenbank auf CodePlex. Wenn Sie diese Beispiele ausprobiert haben, sind Sie möglicherweise auf einige Probleme gestoßen, die Ihre erste Erfahrung mit dieser Technologie dramatisch verändern können.

Datenbankautorisierung

Viele Leute laden die „AdventureWorks2012 Data File“ herunter – eine 200 MB große .mdf-Datei, die Sie – ohne Protokoll – mit der folgenden Syntax anhängen können:

CREATE DATABASE AdventureWorks2012 ON
(
  NAME = AdventureWorks2012_Data, FILENAME = '<path>\AdventureWorks2012_Data.mdf'
)
FOR ATTACH_REBUILD_LOG;

Das Problem besteht darin, dass Sie, wenn Sie als Ihr Windows-Konto mit der SQL Server-Instanz verbunden sind, versehentlich als Datenbankbesitzer landen können. Was in den meisten Szenarien keine große Sache sein wird, außer wenn Sie gespeicherte Prozeduren mit EXECUTE AS OWNER erstellen , wie bei vielen Beispielen, auf die Sie stoßen, kann dies zu einem Problem führen. Sie finden diese Zeile beispielsweise in vielen nativ kompilierten gespeicherten Prozeduren:

WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER

Sofern Sie dieses Problem nicht bereits auf andere Weise behoben haben, erhalten Sie wahrscheinlich die folgende Fehlermeldung, wenn der Eigentümer der Datenbank Ihr Windows-Konto ist, wenn Sie versuchen, eine solche Prozedur zu erstellen:

Msg 15517, Level 16, State 1, Procedure [procedure name]
Kann nicht als Datenbankprinzipal ausgeführt werden, weil das Prinzipal „dbo“ nicht existiert, dieser Prinzipaltyp nicht imitiert werden kann oder Sie keine Berechtigung haben.

Abhängig von Ihrer Umgebung möchten Sie vielleicht ernsthaft abwägen, wie Sie damit umgehen. In meinem Fall habe ich den einfachen Weg gewählt und die Autorisierung für die Datenbank einfach auf sa gesetzt :

ALTER AUTHORIZATION ON DATABASE::AdventureWorks2012 TO sa;

An diesem Punkt konnte ich das Demo-Skript ohne Probleme ausführen (nun, ich bekam Fehler, als es versuchte, eine weitere speicheroptimierte Dateigruppe hinzuzufügen, aber das ist ein völlig anderes und ignorierbares Problem).

Bucket-Anzahl

Es scheint nicht viele praktische Anleitungen zur Auswahl der Bucket-Anzahl für Ihre speicheroptimierten Tabellen zu geben. Es gibt diesen Artikel auf MSDN, der auf einige technische Details eingeht, und Klaus Aschenbrenner hat diesen Beitrag darüber geschrieben, wie man in diesem Bereich kluge Entscheidungen trifft. Abgesehen davon sind Sie beim Experimentieren ziemlich auf sich allein gestellt. Der SWAG, den ich am häufigsten gehört habe, ist 1x-2x die Anzahl der eindeutigen Schlüsselwerte, sodass Punktsuchen am effizientesten sind. Einige der Proben, die Sie dort finden, verwenden jedoch entweder konsequent 1.000.000 Eimer oder kleinere Zahlen wie 100 (und in einem Fall sogar 5) oder eine Mischung. Denken Sie daran, wenn Sie beginnen, mit Ihren eigenen Schema- und Datenzugriffsmustern zu experimentieren – Sie müssen möglicherweise Tabellen herunterreißen und es erneut mit anderen Bucket-Größen versuchen, um den "Sweet Spot" für Ihr Szenario zu finden.

Wiederherstellungsmodell

Die AdventureWorks2012-Datenbank ist auf SIMPLE eingestellt Wiederherstellung. Wie das Problem des Datenbankbesitzers ist dies in den meisten Fällen keine große Sache für eine Beispieldatenbank. Aber wenn Sie In-Memory OLTP testen – und wahrscheinlich in Kombination mit anderen Technologien, die SIMPLE machen Wiederherstellung ein Deal-Breaker, wie Verfügbarkeitsgruppen – es kann viel sinnvoller sein, Ihre Tests mit einer Datenbank durchzuführen, bei der die Wiederherstellung auf FULL eingestellt ist . Andernfalls können Sie möglicherweise bestimmte Verhaltensweisen nicht beobachten, die bei verschiedenen Wiederherstellungsmodellen unterschiedlich sein können. Sie können AdventureWorks2012 in FULL ändern wie folgt:

ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;

Und vergessen Sie nicht, ein vollständiges Backup zu erstellen, damit eine Backup-Kette aufgebaut wird und die Datenbank nicht im Pseudo-SIMPLE arbeitet Wiederherstellungsmodus.