2010-08-10 16 views
2

Nous avons pu voir que pendant notre programme perl qui se connecte essentiellement à SQLserver pour insérer/supprimer/mettre à jour des données, le suivant est appelé très fréquemment sp_tables @table_name='NOXXTABLE'. Nous voyons que pour de nombreux SPID, l'appel arrive souvent.L'appel de sp_tables prend plus de temps ce qui provoque le blocage

Lors de l'exécution sp_tables @table_name='NOXXTABLE' dans SQL Server, nous pouvons voir qu'il ne renvoie aucune ligne. Il se termine généralement en millisecondes. Mais après le profilage, lorsque nous avons vérifié l'exécution du SQLText(sp_tables @table_name='NOXXTABLE') particulier pour les SPID bloquants, il variait entre 0 seconde et 1 minute et était très fréquemment appelé dans le même SPID. La même chose se passe pour de nombreux SPID qui ont de nouveau plusieurs appels à sp_tables chacun prenant beaucoup de temps.

Y at-il une solution pour en sortir?

Répondre

3

Le NOXXTABLE est utilisé par la méthode ping de DBD :: ODBC. Si vous appelez la méthode ping de DBI avec DBD :: ODBC, elle fait des tables ('', '', 'NOXXTABLE', ''). Si vous voulez le faire moins appeler ping moins ou remplacer la méthode ping DBD :: ODBC avec un autre code plus approprié pour votre système.

+0

Merci bohica! Dans ce cas, d'où exactement est appelé ping et pourquoi? veuillez jeter un peu de lumière ici. Nous voyons également l'appel sp_tables entre les sélections. Alors, comment l'appelons-nous moins de fois? Les tables ('', '', 'NOXXTABLE', '') sont-elles un moyen alternatif de savoir si la connexion à la base de données est active? parce qu'il n'y a rien appelé NOXXTABLE et aucun résultat n'est retourné. –

+0

Je ne peux pas vous dire où votre code (ou le code que vous utilisez) appelle ping. Ce que je vous dis, c'est quand la méthode ping DBI est appelée et que vous utilisez DBD :: ODBC, elle implémente ping en émettant un appel de tables sur la table NOXXTABLE. L'argument est que cela nécessitera un aller-retour dans la base de données. – bohica