Installer:
- Windows Server 2008 R2
- SQL Server 2008 R2 SP1
- 240 Go de RAM
- TempDB est 8 x 16 Go de fichiers de données sans croissance automatique (128 Go au total)
- Serveur physique / autonome
Ce serveur est utilisé pour le traitement ETL. Nous venons d'installer plus de RAM sur ce serveur pour un total de 240 Go de RAM. Les services SQL Server sont les seules choses réellement en cours d'exécution.
La mémoire apparaît très bien dans le BIOS, OpenManage et Windows.
Si je configure SQL Server pour utiliser une mémoire Min / Max de 70 / 100GB, nous n'avons aucun problème. Cependant, une fois que j'ai augmenté cela à 120/150 Go, j'obtiens l'erreur suivante lorsque j'exécute l'un de nos processus ETL:
Impossible d'allouer de l'espace pour l'objet '<objet système temporaire: 422234507706368>' dans la base de données 'tempdb' car le groupe de fichiers 'PRIMARY' est plein. Créez de l'espace disque en supprimant les fichiers inutiles, en supprimant des objets dans le groupe de fichiers, en ajoutant des fichiers supplémentaires au groupe de fichiers ou en activant la croissance automatique pour les fichiers existants dans le groupe de fichiers. (Msg 1105, état 2, procédure inconnue, ligne 1)
Nous n'avons jamais rencontré ce problème avant de modifier la configuration de la mémoire. Après avoir reconfiguré à nouveau le 70 / 100GB d'origine, nous ne recevons pas cette erreur.
Ce que j'ai essayé:
- Définissez les fichiers de données TempDB pour une croissance automatique. Cela entraîne simplement la croissance automatique des fichiers jusqu'à ce que la capacité du disque soit atteinte, puis échoue.
- Ajoutez d'autres fichiers de données TempDB. Même erreur que celle illustrée.
- Augmentez la taille TempDB à 8x32 Go (256 Go au total)
Je ne sais pas ce qui pourrait causer ce problème.
la source
Réponses:
Merci à tous pour votre aide.
Après avoir parcouru certains plans d'exécution, il s'avère qu'il existe un JOIN qui est traité différemment en fonction de la quantité de RAM disponible. Avec moins de RAM, il l'évalue avec un Hash; avec plus de RAM, il utilise une série de jointures de fusion.
Donc, fondamentalement, cela se résumait à un T-SQL mal écrit, que je refactorise actuellement.
la source
Ce n'est pas une réponse à la question, juste un code que je ne voulais pas publier dans un commentaire. Pour voir l'équilibre de vos planificateurs et de la mémoire sur les nœuds NUMA (et également pour voir si des nœuds ne sont pas visibles en ligne):
(Dans SQL Server 2012, le dernier
SUM
devrait êtreSUM(pages_kb)
car il n'y a plus d'allocateurs séparés d'une page et de plusieurs pages.)la source