Je suis nouveau pour travailler avec ces données (20 millions de lignes) et je ne sais pas ce que je devrais attendre en ce qui concerne la durée de la requête: aucun index sur champ. Cette déclaration a pris 25 minutes. La base de données est définie sur la récupération simple. Est-ce que 25 minutes semble trop longue? La table a 9 colonnes avec de petits types de données <50 Varchar. P> P>
3 Réponses :
Tous ces éléments, et probablement de nombreux autres facteurs, affecteront les performances de modification des données. P>
Sinon, essayez de combiner la mise à jour à l'aide de top code> et a
où code> clause ne trouve que des lignes insonorisées. P>
J'ai essayé de lotter, mais je n'étais pas sûr de la taille du lot. J'ai essayé 10000 et cela prenait encore plus longtemps.
Si vous avez mis à jour les lignes de 20 millions de dollars en une seule transaction, votre temps a été entièrement motivé par votre sous-système IO: quel type de lecteurs vous avez, quels fichiers de disque, etc. Si vous avez 40 broches dans RAID 10 avec 4 fichiers équilibrés et Une batterie similaire séparée pour le journal, le résultat est ralentiellement. Si vous avez testé cela avec un seul MDF qui partage la broche avec la LDF sur un disque dur de 5000RPM de qualité de consommation unique, votre temps est incroyablement rapide. P>
+1: IO est-il toujours le problème pour les cas comme ceux-ci, ou y a-t-il un point de basculement vague?
Pour 20 millions de lignes dans une seule instruction de mise à jour, tout va être entraîné par la rapidité avec laquelle le journal peut affleurer, avec certaines pointes lorsque les points de contrôle de la base de données ont un coup de pied en raison de la pression de la piscine tampon pour les pages gratuites.
Le signe Tell-Tale va être le avg. Longueur de la queue de disque code> (> 2 par broche) et le
avg. Sec / Transfert Code> (> 10ms) compteurs de performance. msdn.microsoft.com/en-us/library/ms175903.aspx
Bons points. Il s'agit d'un système d'exploitation Server exécutant une application serveur à l'aide du matériel de bureau. Aucun RAID, Single 250 GB 7200 Drive. C'est ce que j'avais besoin de savoir.
@REMUS Quel que soit le paramètre de mode de récupération (simple vs complet / mûr)?
@ Subt13: même en mode simple, la transaction doit enregistrer chaque changement de ligne afin qu'il puisse faire une annulation. 20m Rows-> 20M Changer d'enregistrements dans Log + Espace réservé aux opérations de 20M Annuler, il faut un espace de journal et chaque bit doit être écrit sur le disque. Le modèle de récupération ne jouerait un rôle que si vous aviez plusieurs transactions, mais cela ne ferait que les choses plus rapidement, peu importe le modèle de récupération. Seulement en vrac May i> Soyez plus rapide pour certains opérations Insérer i> Opérations, jamais pour les mises à jour.
Sur la base de ces commentaires, il semble que les 25 minutes sont acceptables et si je veux accélérer, je vais devoir mettre à niveau le matériel.
Vous pouvez donner un coup de partition de disque A tir: MSDN.MicRosoft .com / fr-US / Bibliothèque / DD758814% 28SQL.100% 29.aspx
Vous mettez la mise à jour de 20 minutes de Mio dans environ 1500 personnes à une moyenne de 7 000 mises à jour par seconde. Sonne à peu près à droite. P>
Étant donné que l'ordre de grandeur est compris dans la gamme, j'attendrais, moins de 1000 serait étrange plus de 40000 aussi.
Qu'en est-il de la charge du serveur? Avez-vous regardé le profileur pour voir si la case est taxée pour la CPU ou la mémoire?
Vous mettez à jour 20 millions de lignes? S'il vous plaît dites-moi que vous avez une clause Où dans votre déclaration de mise à jour réelle.
@OMG Ponies: Nous venons d'installer Windows Server 2008 R2 et j'ai examiné le processus SQL Server, il utilise tout sauf 28 Mo de RAM.
Je ne me souviens pas de Windows XP permettant de manger beaucoup de RAM par SQL Server
@Beth: Nope. Où la clause n'est pas nécessaire ni recherchée dans cette requête.
@ Subt13 Y a-t-il d'autres applications sur la boîte ou est-ce que purement SQL Server?