Conserver les tables de données SQL Server en mémoire est une fonction fournie par SQL Server, qui est rarement impliquée dans le processus de développement des petits systèmes généraux. Des documents associés sont compilés ici pour montrer comment mettre toutes les données d'une table dans SQL Server en mémoire pour implémenter une base de données en mémoire et améliorer les performances en temps réel.
1, DBCC PINTABLE
Marque une table à épingler, ce qui signifie que Microsoft SQL Server ne vide pas les pages de la table de la
syntaxe
.
DBCC PINTABLE ( database_id , table_id )
Pour déterminer l'ID de la base de données, utilisez la fonction DB_ID.
Pour déterminer l'ID de la table, utilisez la fonction OBJECT_ID.
Le commentaire de
DBCC PINTABLE n'entraîne pas la lecture de la table en mémoire. Lorsque les pages d'une table sont lues dans le cache par des instructions Transact-SQL ordinaires, elles sont marquées comme pages résidant en mémoire. Les pages résidant en mémoire ne sont pas effacées lorsque SQL Server a besoin d'espace pour lire de nouvelles pages. SQL Server enregistre toujours les mises à jour de la page et, si nécessaire, réécrit la page mise à jour sur le disque. Cependant, SQL Server conserve une copie des pages disponibles dans le cache jusqu'à ce que la table soit rendue non-résidente à l'aide de l'instruction DBCC UNPINTABLE.
DBCC PINTABLE est mieux utilisé pour conserver en mémoire de petites tables fréquemment référencées. Lisez immédiatement les pages de la petite table en mémoire et toutes les références futures à ses données n'auront pas besoin d'être lues à partir du disque.
REMARQUE DBCC PINTABLE peut améliorer les performances, mais doit être utilisé avec prudence. Si une grande table réside, elle utilise initialement une grande partie du cache sans laisser suffisamment de cache pour les autres tables du système. Si la table hébergée est plus grande que le cache, la table remplit tout le cache. Un membre du rôle de serveur fixe sysadmin doit arrêter et redémarrer SQL Server, puis rendre la table non-résidente. L'hébergement d'un trop grand nombre de tables crée le même problème que l'hébergement de tables plus grandes que le cache.
Exemple :
Déclarez @db_id int, @tbl_id int
Utilisez DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC pintable (@db_id, @tbl_id)
peut définir la table Department pour qu'elle soit en mémoire- résident .
Déclarez @db_id int, @tbl_id int
Utilisez DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
DBCC UNpintable (@db_id, @tbl_id)
peut supprimer la table Department en tant que résident en mémoire.
Vous pouvez utiliser la commande SQL suivante pour détecter l'exécution :
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Si le résultat renvoyé est 1 : cela signifie que la table a été définie pour résider en mémoire ; qu'il n'a pas été configuré pour résider en mémoire de réserve.
2, SP_TableOption
Définit les valeurs des options pour les tables définies par l'utilisateur. sp_tableoption peut être utilisée pour activer la fonctionnalité de texte en ligne sur les tables avec des colonnes de texte, ntext ou image
.
sp_tableoption [ @TableNamePattern = ] 'table'
, [ @OptionName = ] 'nom_option'
, [ @OptionValue = ] 'value'
où 'option_name' a l'utilisation suivante :
pintable -- Lorsqu'il est désactivé (valeur par défaut), il marque la table comme n'étant plus résidente en RAM. Lorsqu'il est activé, marque la table comme résidente en RAM. (La table spécifiée peut résider en mémoire)
De plus, le verrouillage de la table lors du chargement groupé, le verrouillage de la ligne d'insertion, le texte dans la ligne et d'autres valeurs facultatives n'impliquent pas la table résidente en mémoire. Pour une utilisation spécifique, vous pouvez interroger les livres SQL Server. En ligne.
Valeur Son utilisation est la suivante :
le nom_option est activé (vrai, activé ou 1) ou désactivé (faux, désactivé ou 0).
Exemple :
EXEC sp_tableoption 'Department', 'pintable', 'true'
fera résider la table de données Department dans la mémoire.
EXEC sp_tableoption 'Department', 'pintable', 'false'
annulera la table de données Department résidant dans la mémoire
..
Vous pouvez utiliser la commande SQL suivante pour détecter l'exécution :
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Si le résultat renvoyé est 1 : cela signifie que la table a été définie pour résider en mémoire ; qu'il n'a pas été configuré pour résider en mémoire de réserve.
3. ConclusionsLors
de la définition d'une table de données comme résidente en mémoire, la table n'est pas réellement lue en mémoire jusqu'à ce qu'elle soit récupérée. Par conséquent, vous pouvez utiliser les instructions SQL suivantes pour conserver davantage la table de données Department en mémoire :
Sélectionnez * From Department
De plus, vous pouvez utiliser les instructions SQL suivantes pour afficher/détecter facilement toutes les tables définies pour résider en mémoire dans la base de données :
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0