8
votes

Déclaration de mise à jour fonctionnant trop longtemps ou non

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: xxx

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.


6 commentaires

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?


3 Réponses :


1
votes
  • Y a-t-il des vues indexées qui référencent ce champ?
  • est ce champ publié dans un système de réplication (transactionnel)?
  • sont d'autres sessions accessibles à cette table en même temps que la mise à jour est en cours d'exécution?
  • sont les fichiers de journal et de données stockés sur des disques distincts (physiques, pas deux partitions différentes du même matériel)?
  • Y a-t-il des contraintes de contrôle qui référencent ce champ?
  • Y a-t-il des déclencheurs sur cette table?

    Tous ces éléments, et probablement de nombreux autres facteurs, affecteront les performances de modification des données.

    Sinon, essayez de combiner la mise à jour à l'aide de top et a clause ne trouve que des lignes insonorisées.


1 commentaires

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.



13
votes

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.


8 commentaires

+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 (> 2 par broche) et le avg. Sec / Transfert (> 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 Soyez plus rapide pour certains opérations Insérer 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



2
votes

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.


1 commentaires

Étant donné que l'ordre de grandeur est compris dans la gamme, j'attendrais, moins de 1000 serait étrange plus de 40000 aussi.