87
4.3 tempdb
temporaire est enrôlée dans une transaction, le journal de transactions de tempdb ne
pourra se tronquer que lorsque la transaction sera terminée.
Les dépôts de versions peuvent aussi occuper une place importante dans tempdb.
Ils contiennent chaque ligne impliquée dans un row versioning. Il existe uniquement
deux dépôts de versions dans tempdb : l’un est dédié aux opérations sur index
ONLINE, et l’autre à toutes les utilisations de row versioning. Nous verrons dans le
chapitre sur les index ce qu’impliquent les opérations d’index ONLINE, sachez simplement que plus la création de l’index en mode ONLINE prendra de temps, plus le
dépôt de versions est susceptible de grandir. L’autre dépôt de versions est susceptible
de grandir avec le nombre d’opérations impliquant du row versioning, et dans le cas
où une transaction est maintenue, qui utilise une fonctionnalité de row versioning.
La vue de gestion dynamique sys.dm tran active snapshot database transactions permet d’obtenir la liste toutes les transactions qui génèrent, ou peuvent
potentiellement accéder à des versions de lignes. Elle peut vous servir à détecter des
transactions longues qui maintiennent des versions :
SELECT *
FROM sys.dm_tran_active_snapshot_database_transactions
ORDER BY elapsed_time_seconds DESC;
La vue de gestion dynamique sys.dm_db_file_space_usage, affiche l’utilisation
des fichiers de données. Comme son nom ne l’indique pas, elle s’applique uniquement à tempdb. Donc, quel que soit le contexte de base dans lequel vous l’exécutez,
elle affichera les informations de tempdb. Elle donne le nombre de pages dédiées aux
dépôts de versions (version store reserved page count), aux objets internes
(internal object reserved page count) et aux objets utilisateur (user object
reserved page count), par fichier de données. Pour obtenir le volume en octets, il
vous suffit de multiplier ces nombres par 8192. Exemple :
SELECT
SUM(user_object_reserved_page_count)*8 as user_object_kb,
SUM(internal_object_reserved_page_count)*8 as internal_object_kb,
SUM(version_store_reserved_page_count)*8 as version_store_kb
FROM sys.dm_db_file_space_usage;
-- ou en Mo
SELECT
SUM(user_object_reserved_page_count)*1.0/128 as user_object_mb,
SUM(internal_object_reserved_page_count)*1.0/128 as internal_object_mb,
SUM(version_store_reserved_page_count)*1.0/128 as version_store_mb
FROM sys.dm_db_file_space_usage;
La vue sys.dm db session space usage est intéressante car elle indique le nombre d’allocations et de déallocations d’objets internes et d’objets utilisateur par session. Si vous souhaitez connaître l’impact d’une procédure ou d’un batch de requêtes
sur tempdb, exécutez le code voulu, puis, dans la même session, lancez une requête
comme celle-ci :
SELECT *
FROM sys.dm_db_session_space_usage
WHERE session_id = @@SPID;
4.3 tempdb
temporaire est enrôlée dans une transaction, le journal de transactions de tempdb ne
pourra se tronquer que lorsque la transaction sera terminée.
Les dépôts de versions peuvent aussi occuper une place importante dans tempdb.
Ils contiennent chaque ligne impliquée dans un row versioning. Il existe uniquement
deux dépôts de versions dans tempdb : l’un est dédié aux opérations sur index
ONLINE, et l’autre à toutes les utilisations de row versioning. Nous verrons dans le
chapitre sur les index ce qu’impliquent les opérations d’index ONLINE, sachez simplement que plus la création de l’index en mode ONLINE prendra de temps, plus le
dépôt de versions est susceptible de grandir. L’autre dépôt de versions est susceptible
de grandir avec le nombre d’opérations impliquant du row versioning, et dans le cas
où une transaction est maintenue, qui utilise une fonctionnalité de row versioning.
La vue de gestion dynamique sys.dm tran active snapshot database transactions permet d’obtenir la liste toutes les transactions qui génèrent, ou peuvent
potentiellement accéder à des versions de lignes. Elle peut vous servir à détecter des
transactions longues qui maintiennent des versions :
SELECT *
FROM sys.dm_tran_active_snapshot_database_transactions
ORDER BY elapsed_time_seconds DESC;
La vue de gestion dynamique sys.dm_db_file_space_usage, affiche l’utilisation
des fichiers de données. Comme son nom ne l’indique pas, elle s’applique uniquement à tempdb. Donc, quel que soit le contexte de base dans lequel vous l’exécutez,
elle affichera les informations de tempdb. Elle donne le nombre de pages dédiées aux
dépôts de versions (version store reserved page count), aux objets internes
(internal object reserved page count) et aux objets utilisateur (user object
reserved page count), par fichier de données. Pour obtenir le volume en octets, il
vous suffit de multiplier ces nombres par 8192. Exemple :
SELECT
SUM(user_object_reserved_page_count)*8 as user_object_kb,
SUM(internal_object_reserved_page_count)*8 as internal_object_kb,
SUM(version_store_reserved_page_count)*8 as version_store_kb
FROM sys.dm_db_file_space_usage;
-- ou en Mo
SELECT
SUM(user_object_reserved_page_count)*1.0/128 as user_object_mb,
SUM(internal_object_reserved_page_count)*1.0/128 as internal_object_mb,
SUM(version_store_reserved_page_count)*1.0/128 as version_store_mb
FROM sys.dm_db_file_space_usage;
La vue sys.dm db session space usage est intéressante car elle indique le nombre d’allocations et de déallocations d’objets internes et d’objets utilisateur par session. Si vous souhaitez connaître l’impact d’une procédure ou d’un batch de requêtes
sur tempdb, exécutez le code voulu, puis, dans la même session, lancez une requête
comme celle-ci :
SELECT *
FROM sys.dm_db_session_space_usage
WHERE session_id = @@SPID;
