Statut suspendu dans SQL Activity Monitor

Qu'est-ce qui entraînerait la suspension d'une requête en cours dans Management Studio?

  1. J'effectue un select top 60000 simple à partir d'une table (qui a 11 millions de lignes) et les résultats reviennent dans une seconde ou deux.
  2. Je change la requête en haut 70000 et les résultats prennent jusqu'à 40 min.

De faire un peu de search sur un autre problème connexe, je suis tombé sur quelqu'un utilisant DBCC FREEPROCCACHE pour le réparer.

  1. Je cours DBCC FREEPROCCACHE et puis refaisons la requête pour 70000 et il a semblé fonctionner.

Toutefois, le problème se produit toujours avec une requête différente.

  1. J'augmente pour dire 90000 ou si j'essaie d'ouvrir la table en utilisant [Right-> Open Table], il tire environ 8000 loggings et s'arrête.

La vérification du journal d'activité pour la table ouverte indique que la session a été suspendue avec un type d'attente "Async_Network_IO". Pour la session qui exécute le select 90000, le statut est "Sleeping", c'est le même statut pour la requête select 70000 ci-dessus qui est returnnée mais dans 45min. Il est étrange pour moi que le statut montre "Sleeping" et il ne semble pas être en train de changer en "Runable" (j'ai l'activiy moniteur rafraîchissant jamais 30sec).

Notes complémentaires:

  • Je ne cours pas à la fois la table ouverte et select 90000 en même time. Toutes les requêtes sont effectuées une à la fois.
  • Je cours 32 bits SQL Server 2005 SP2 CU9. J'ai essayé d'effectuer la mise à niveau vers SP3 mais j'ai rencontré des échecs d'installation. Les problèmes se produisaient avant que j'essaye cette mise à niveau.
  • La configuration du server est un cluster actif / actif le problème se produit sur l'un ou l'autre nœud, et l'autre instance n'a pas ce problème.
  • J'ai ~ 20 autre database sur cette même instance de server, mais seulement celle-ci voit le problème.
  • Cette database devient assez grande. Il est actuellement à 76756.19MB. Le file de données est de 11 513 Mo.
  • Je suis connecté localement dans la zone Serveur à l'aide du Bureau à distance.

Le type d'attente "Async_Network_IO" signifie qu'il attend que le client récupère le jeu de résultats lorsque le tampon réseau de SQL Server est saturé. Pourquoi votre client ne recueille pas datatables en time opportun? Je ne peux pas le dire.

L'autre cas peut se produire avec des servers liés lorsque SQL Server interroge une table distante. Dans ce cas, SQL Server attend que le server distant réponde.

Quelque chose vaut la peine d'être regardé est des scanners de virus, s'ils surveillent des connections de réseau parfois ils peuvent être retardés, il est souvent apparent par eux accaparant tout le CPU.

Suspendu signifie qu'il attend une ressource et qu'il reprendra quand il aura sa ressource. A en juger par les tailles que vous retirez, il semble que vous soyez dans une requête de type OLAP.

Essayez les choses suivantes:

  1. Utilisez NOLOCK ou définissez TRANSACTION ISOLATION LEVEL en haut de la requête
  2. Vérifiez votre plan d'exécution et affinez la requête pour qu'elle soit plus efficace