Je crée une base de données dans laquelle il y aura environ 30 tables, chaque table contenant des dizaines de millions de lignes et chaque table contenant une seule colonne importante et une colonne de clé primaire / étrangère afin de maximiser l'efficacité des requêtes face à des charges lourdes mises à jour et insertions et faire un usage intensif des index cluster. Deux des tableaux contiendront des données textuelles de longueur variable, l'un d'entre eux contenant des centaines de millions de lignes, mais le reste ne contiendra que des données numériques.
Comme je veux vraiment extraire chaque dernière goutte de performances du matériel dont je dispose (environ 64 Go de RAM, un SSD très rapide et 16 cœurs), je pensais autoriser chaque table à avoir son propre fichier afin que, peu importe si Je me joins à 2, 3, 4, 5 tables ou plus, chaque table sera toujours lue en utilisant un thread séparé et la structure de chaque fichier sera étroitement alignée avec le contenu de la table, ce qui, espérons-le, minimisera la fragmentation et la rendra plus rapide pour SQL Server à ajouter au contenu d'une table donnée.
Une mise en garde, je suis bloqué sur SQL Server 2008 R2 Web Edition . Ce qui signifie que je ne peux pas utiliser le partitionnement horizontal automatique, ce qui exclut cela comme une amélioration des performances.
L'utilisation d'un fichier par table maximisera-t-elle réellement les performances, ou suis-je en train de négliger les caractéristiques du moteur SQL Server intégré qui rendraient cela si redondant?
Deuxièmement, si l'utilisation d'un fichier par table est avantageuse, pourquoi ne create table
me donne-t-il que l'option d'allouer la table à un groupe de fichiers et non à un fichier logique spécifique? Cela m'obligerait à créer un groupe de fichiers distinct pour chaque fichier de mon scénario, ce qui me suggère que peut-être SQL Server n'envisage pas les avantages dont je suppose qu'ils découleraient de ce que je propose.
la source
Ma première suggestion serait de ne faire aucune hypothèse sur les performances sans effectuer de test de charge sur les deux configurations.
Ma supposition d'avoir vu de telles configurations (qui ont du sens sur le papier) dans le passé serait que le fait d'avoir chaque table dans un fichier séparé n'aurait pas un impact positif mesurable pour les performances ... et que la complexité supplémentaire compenserait les gains de performances même si elles étaient mesurables.
Enfin, en ce qui concerne la compression de chaque baisse de performances d'un serveur SQL, je vous renvoie au tableau suivant (à condition que mon Microsoft):
Toutes les optimisations potentielles qui pourraient être faites du point de vue de l'application éclipsent facilement toutes les optimisations possibles au niveau de la configuration du matériel / de la base de données ... alors concentrez votre attention de manière appropriée.
la source
Comme d'autres l'ont fait remarquer, il n'y a pas d'avantage direct d'un fichier par table; voici un excellent synopsis de Steve Jones sur l'origine de ce mythe: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/
Vous pouvez également rechercher une vue partitionnée qui, je crois, est prise en charge par 2008 Web Edition. Il existe quelques astuces pour coder par rapport à une vue partitionnée, mais vous pouvez imiter une grande partie des fonctionnalités des tables partitionnées relativement facilement.
la source
Je pense que des fichiers séparés pour chaque table n'apporteraient aucun avantage en termes de performances. Les index corrects peuvent avoir une augmentation potentielle des performances (lecture du disque) sur le serveur de base de données.
SQL Server 2008 R2 prend-il en charge la compression? Si oui, activez-le.
Corrige moi si je me trompe.
la source