J'étudie les avantages de la mise à niveau de MS SQL 2012 vers 2014. L'un des principaux arguments de vente de SQL 2014 est les tables optimisées en mémoire, qui rendent apparemment les requêtes ultra-rapides.
J'ai constaté qu'il y a quelques limitations sur les tables optimisées en mémoire, telles que:
- Aucun
(max)
champ dimensionné - Maximum ~ 1 Ko par ligne
- Pas de
timestamp
champs - Aucune colonne calculée
- Aucune
UNIQUE
contrainte
Tous ces éléments sont considérés comme des nuisances, mais si je veux vraiment les contourner afin d'obtenir des avantages en termes de performances, je peux faire un plan.
Le vrai coup de pied est le fait que vous ne pouvez pas exécuter une ALTER TABLE
instruction, et vous devez passer par ce rigmarole chaque fois que vous ajoutez un champ à la INCLUDE
liste d'un index. De plus, il semble que vous devez exclure les utilisateurs du système afin d'apporter des modifications de schéma aux tables MO sur la base de données en direct.
Je trouve cela totalement scandaleux, dans la mesure où je ne peux vraiment pas croire que Microsoft aurait pu investir autant de capital de développement dans cette fonctionnalité, et la laisser si difficile à maintenir. Cela m'amène à la conclusion que j'ai dû avoir le mauvais bout du bâton; Je dois avoir mal compris quelque chose au sujet des tables optimisées en mémoire qui m'a amené à croire qu'il est beaucoup plus difficile de les maintenir qu'il ne l'est réellement.
Alors, qu'est-ce que j'ai mal compris? Avez-vous utilisé des tables MO? Existe-t-il une sorte de commutateur ou de processus secret qui les rend pratiques à utiliser et à entretenir?
Vous ne pouvez pas cliquer avec le bouton droit sur une table optimisée en mémoire, pour afficher un concepteur et ajouter de nouvelles colonnes comme vous le souhaitez, à partir de Sql Server Management Studio. Vous ne pouvez pas non plus cliquer dans le nom de la table pour renommer la table. (SQL 2014 au moment où j'écris ceci.)
Au lieu de cela, vous pouvez cliquer avec le bouton droit sur la table et créer une commande de création de script dans une nouvelle fenêtre de requête. Cette commande de création peut être modifiée en ajoutant de nouvelles colonnes.
Ainsi, pour modifier la table, vous pouvez stocker les données dans une nouvelle table, table temporaire ou variable de table. Ensuite, vous pouvez supprimer et recréer la table avec le nouveau schéma et enfin recopier dans les données réelles . Ce jeu de shell à 3 conteneurs est seulement un peu moins pratique pour la plupart des cas d'utilisation.
Mais, vous n'auriez aucune raison de vous soucier des tables Memory Optimized s'il n'y a pas de problème de performances que vous essayez de résoudre.
Ensuite, vous devrez évaluer si les limitations et les solutions de contournement en valent la peine pour votre cas d'utilisation. Avez-vous un problème de performances? Avez-vous essayé tout le reste? Est-ce que cela améliorera vos performances de 10 à 100x? L'utiliser ou ne pas l'utiliser finira probablement par être un peu plus compliqué que ce soit.
la source
vous pouvez utiliser OLTP en mémoire dans les serveurs opérationnels sans problème majeur. nous avons utilisé cette technologie dans une entreprise bancaire et de paiement,
En général, nous pouvons utiliser des tables optimisées en mémoire lorsque la charge de travail est trop élevée. en utilisant OLTP en mémoire, vous pouvez atteindre de meilleures performances jusqu'à 30X! Microsoft corrige la plupart de ces limitations dans SQL Server 2016 et 2017. Les tables à mémoire optimisée ont une architecture complètement différente de celle des tables sur disque.
les tables optimisées en mémoire sont de deux types. tables durables et tables non durables. Les tables durables et non durables conservent les données de la table en mémoire. De plus, les tables durables conservent les données sur les disques pour les données de récupération et le schéma. la plupart des scénarios opérationnels, nous devrions utiliser des tables durables car les données perdues sont critiques ici. dans certains scénarios, par exemple le chargement ETL et la mise en cache, nous pouvons utiliser des tables non durables.
vous pouvez utiliser ces ebooks et apprendre à utiliser cette technologie:
Kalen Delaney: https://www.red-gate.com/library/sql-server-internals-in-memory-oltp
Dmitri Korotkevitch: https://www.apress.com/gp/book/9781484227718
la source