Database
 sql >> Base de données >  >> RDS >> Database

Quelques petits problèmes avec les échantillons Hekaton

Certains d'entre vous ont accès à Hekaton publié Scripts de démonstration OLTP en mémoire impliquant AdventureWorks ; l'échantillon le plus récent est publié ici. Ces exemples s'appuient sur l'exemple de base de données AdventureWorks2012 sur CodePlex. Si vous avez essayé ces exemples, vous avez peut-être rencontré quelques problèmes qui peuvent changer radicalement votre première expérience avec cette technologie.

Autorisation de base de données

De nombreuses personnes téléchargent le "Fichier de données AdventureWorks2012" - un fichier .mdf de 200 Mo que vous pouvez joindre - sans journal - en utilisant la syntaxe suivante :

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

Le problème est que, si vous êtes connecté à l'instance SQL Server en tant que compte Windows, vous pouvez vous retrouver par inadvertance en tant que propriétaire de la base de données. Ce qui ne sera pas un gros problème dans la plupart des scénarios, sauf que si vous créez des procédures stockées avec EXECUTE AS OWNER , comme le feront de nombreux échantillons que vous rencontrerez, cela peut poser problème. Vous pouvez trouver cette ligne, par exemple, dans de nombreuses procédures stockées compilées nativement :

WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER

À moins que vous n'ayez déjà atténué ce problème par d'autres moyens, si le propriétaire de la base de données est votre compte Windows, vous obtiendrez probablement l'erreur suivante lorsque vous essayez de créer une telle procédure :

Msg 15517, Niveau 16, État 1, Procédure [nom de la procédure]
Impossible d'exécuter en tant que principal de la base de données car le principal "dbo" n'existe pas, ce type de principal ne peut pas être emprunté ou vous n'avez pas l'autorisation.

En fonction de votre environnement, vous voudrez peut-être peser sérieusement la façon dont vous gérez cela; dans mon cas, j'ai pris le chemin le plus simple et j'ai juste défini l'autorisation sur la base de données sur sa :

ALTER AUTHORIZATION ON DATABASE::AdventureWorks2012 TO sa;

À ce stade, j'ai pu exécuter le script de démonstration sans problème (enfin, j'ai eu des erreurs lorsqu'il a essayé d'ajouter un autre groupe de fichiers à mémoire optimisée, mais c'est un problème complètement différent et ignorable).

Nombre de buckets

Il ne semble pas y avoir une tonne de conseils pratiques sur la façon de choisir le nombre de compartiments pour vos tables optimisées en mémoire. Il y a cet article sur MSDN, qui entre dans certains détails techniques, et Klaus Aschenbrenner a écrit cet article sur les choix judicieux dans ce domaine. En dehors de cela, vous êtes à peu près seul pour expérimenter. Le SWAG que j'ai entendu le plus souvent est 1x-2x le nombre de valeurs de clé uniques, de sorte que les recherches de points sont les plus efficaces. Cependant, certains des échantillons que vous y trouverez utilisent systématiquement 1 000 000 seaux, ou des nombres plus petits comme 100 (et même 5 dans un cas), ou un mélange. Gardez cela à l'esprit lorsque vous commencez à expérimenter avec votre propre schéma et vos modèles d'accès aux données :vous devrez peut-être supprimer les tables et réessayer avec différentes tailles de compartiment pour trouver le "sweet spot" pour votre scénario.

Modèle de récupération

La base de données AdventureWorks2012 est définie sur SIMPLE récupération. Comme le problème du propriétaire de la base de données, dans la plupart des cas, ce n'est pas si grave pour un exemple de base de données. Mais lorsque vous testez l'OLTP en mémoire - et probablement en combinaison avec d'autres technologies qui rendent SIMPLE récupération un élément décisif, comme les groupes de disponibilité - il peut être beaucoup plus logique d'effectuer vos tests sur une base de données avec la récupération définie sur FULL . Sinon, vous risquez de ne pas observer certains comportements qui pourraient être différents selon les différents modèles de récupération. Vous pouvez remplacer AdventureWorks2012 par FULL comme suit :

ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;

Et n'oubliez pas de faire une sauvegarde complète, afin qu'une chaîne de sauvegarde soit établie, et que la base de données ne fonctionne pas en pseudo-SIMPLE mode de récupération.