2008-11-27 10 views
2

Il existe une base de données SqlServer2000 que nous devons mettre à jour pendant la fin de semaine.Mises à jour de base de données SpeedUp

Sa taille est de presque 10G. Les mises à jour vont des changements de schéma, des mises à jour de clés primaires à quelques millions d'enregistrements mis à jour, corrigés ou insérés.

Le week-end est à peine suffisant pour le travail.

Nous avons mis en place un serveur dédié pour le travail, tourné la base de données SINGLE_USER fait toutes les optimisations que nous pourrions penser: déposer/index, relations recréent etc.

Pouvez-vous proposer quelque chose à speedup le processus? SQL Server 2000 n'est pas négatiable (pas ma décision). Les mises à jour sont exécutées via un programme personnalisé et non BULK INSERT.

EDIT:

mises à jour du schéma sont effectuées par des scripts TSQL analyseur de requêtes (un script par version mise à jour)

mises à jour de données sont effectuées par C# .net 3.5 app.

Les données proviennent d'un ensemble de fichiers texte (avec de nombreux problèmes) et sont écrites dans la base de données locale.

L'ordinateur n'est connecté à aucun réseau.

Répondre

0

À quoi ressemble exactement ce "programme personnalisé"? c'est-à-dire comment parle-t-il aux données? Minimiser la quantité d'E/S réseau (d'un serveur db à une application) serait un bon début ... typiquement cela pourrait signifier faire beaucoup de travail dans TSQL, mais même simplement lancer l'application sur le serveur db pourrait aider un peu.

Si l'application réécrit de gros blocs de données, elle peut toujours utiliser l'insertion en bloc pour soumettre les nouvelles données de la table. Soit via la ligne de commande (bcp etc), soit via le code (SqlBulkCopy dans .NET). Ce sera généralement plus rapide que les insertions individuelles, etc.

Mais cela dépend vraiment de ce "programme personnalisé".

2

Bien que la suppression des index excédentaires puisse vous aider, vous devez vous assurer que vous gardez ces index qui permettront au script de mise à niveau de trouver facilement les lignes dont il a besoin de mettre à jour.

Sinon, assurez-vous d'avoir suffisamment de mémoire dans le serveur (bien que SQL Server 2000 Standard soit limité à 2 Go) et, si nécessaire, de faire croître vos fichiers MDF et LDF pour faire face à toute croissance.

Si possible, votre programme personnalisé doit traiter les mises à jour en tant qu'ensembles au lieu de ligne par ligne.

EDIT: Idéalement, essayez d'identifier quelle opération est à l'origine des mauvaises performances. Si ce sont les modifications de schéma, cela peut être dû au fait que vous agrandissez une colonne et que de nombreuses fractionnements de page se produisent. Cependant, les divisions de page peuvent également se produire lors de l'insertion et de la mise à jour pour la même raison - la ligne ne rentre plus sur la page.

Si votre application C# est le goulot d'étranglement, pourriez-vous exécuter les modifications d'abord dans une table de transfert (avant votre fenêtre de maintenance), puis effectuer une mise à jour unique sur les tables réelles?Une mise à jour unique de 1 million de lignes sera plus efficace qu'une application effectuant 1 million d'appels de mise à jour. Certes, si vous avez besoin de le faire ce week-end, vous n'aurez peut-être pas beaucoup de temps pour le configurer.

Questions connexes