web-dev-qa-db-fra.com

Recommandations pour plus d'un fichier TEMPDB

Je voudrais diviser tempdb en deux fichiers de même taille, pour améliorer les performances de la base de données.

Je me demande si ces deux fichiers de données peuvent être sur le même disque, séparément des fichiers de données de journaux et d'utilisateurs?

6
Rafaells

Nous avons diverses installations dans notre boutique et nous avons tendance à démarrer bas avec quatre fichiers Tempdb, puis à ajouter des fichiers supplémentaires s'il existe TEMPDB Contention comme indiqué par @ kevin3nfs Commentaire, où il référente une recherche SQLSKILLS.com.

Microsoft dispose d'un article de base de connaissances: Recommandations de réduction de la conflit d'allocation dans la base de données SQL Server TEMPDB

[...]
[.____] En règle générale, si le nombre de processeurs logiques est inférieur ou égal à 8, utilisez le même nombre de fichiers de données que les processeurs logiques. Si le nombre de processeurs logiques est supérieur à 8, utilisez 8 fichiers de données, puis si la conflit se poursuit, augmentez le nombre de fichiers de données par multiples de 4 (jusqu'au nombre de processeurs logiques) jusqu'à ce que la conflit soit réduite à des niveaux acceptables ou à faire modifications apportées à la charge de travail/code.
[...]

SQLSKILLS.COM a un bon article le DBA accidentel (Jour 27 de 30): Dépannage: TEMPDB CONTENTION qui possède des informations générales sur la conflit de TEMPDB et un peu plus loin un script qui récupérera des informations sur la convention TEMPDB de certains DMV.

[...]
[.____] L'un des problèmes de performance les plus courants existants dans les instances SQL Server à travers le monde est appelée contention tempdb. Qu'est-ce que cela signifie?

TEMPDB Convention fait référence à un goulot d'étranglement pour les fils essayant d'accéder à des pages d'allocation en mémoire; Cela n'a rien à voir avec des E/S.

Considérez le scénario de centaines de requêtes simultanées que tous créent, utilisent, puis abandonnent de petites tables temporaires (que par leur nature même sont toujours stockées dans TEMPDB). Chaque fois qu'une table TEMP est créée, une page de données doit être attribuée, plus une page de métadonnées d'allocation pour suivre les pages de données attribuées à la table. Cela nécessite de faire une note dans une page d'allocation (appelée page PFS - voir ici pour info en profondeur) que ces deux pages ont été allouées dans la base de données. Lorsque la table TEMP est supprimée, ces pages sont traitées et elles doivent être marquées comme telles dans cette page PFS à nouveau. Un seul fil à la fois peut changer la page d'allocation, ce qui en fait un point d'accès et ralentissez la charge de travail globale. [...]

Vous trouverez ci-dessous un script que nous avons utilisé pour de très grandes configurations de serveur de base de données. Il crée une TEMPDB avec 8 fichiers de taille de 11 Go sans autogrotthe et un fichier journal de transaction tempdb de 11 Go. Ce script peut être adapté à vos besoins.

USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev',FILENAME = N'G:\tempdb.mdf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev4', FILENAME = N'G:\tempdb4.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev5', FILENAME = N'G:\tempdb5.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev6', FILENAME = N'G:\tempdb6.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev7', FILENAME = N'G:\tempdb7.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev8', FILENAME = N'G:\tempdb8.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'templog', FILENAME = N'G:\templog.ldf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )

Comme vous pouvez le voir, ces fichiers étaient tous situés sur le même lecteur.

Si vous remarquez toujours la conflit dans la base de données tempdb, puis divisez les fichiers de base de données tempdb sur divers disques pourraient être une solution possible, mais dépend de votre configuration (SAN, SSD, ...) et devrait être vérifié avec les tests.

6
John aka hot2use

Oui même sur le même disque, vous devriez rencontrer des améliorations de performance avec plusieurs TEMPDB. Une règle de base est le nombre de cœurs.

Recommandations pour réduire la conflit d'allocation dans la base de données SQL Server TEMPDB

2
paparazzo

Les meilleures pratiques consistent à maintenir plusieurs fichiers de données TEMPDB de taille, correspondant au nombre de processeurs (à un maximum de 8, suffisant pour la majeure partie de l'environnement)

--Find logical processors
SELECT cpu_count AS logicalCPUs FROM sys.dm_os_sys_info

--Add tempdb data files as per processor count from the above query.Sample query to add one file.Modify the code as per your environment

ALTER DATABASE tempdb ADD FILE ( NAME = N'tempdev2',
FILENAME = N'F:\Temdb\tempdev2.ndf' , SIZE =10MB , FILEGROWTH = 20MB) 
0
Abhi