2010-09-28 6 views
0

J'expérimente avec postgres et serveur sqlsql server vs postgres en .net SqlConnection vs NpgsqlConnection

la même requête dans SQL Server me donne:

CPU time = 31 ms, elapsed time = 800 ms. 

et dans Postgres:

38 ms 

mais quand je fais la même requête via .net en utilisant SqlConnection, SqlCommand et NpgsqlConnection, NpgsqlCommand

le SQLServer est 30% plus rapide

quelqu'un peut-il expliquer cela?

+0

Je ne suis pas sûr de ce qu'il y a à expliquer? La même requête s'exécute dans un temps légèrement différent sur deux plates-formes de base de données complètement différentes; cela ne semble pas surprenant. En d'autres termes, vous attendez-vous à ce que la requête s'exécute exactement en même temps, malgré les piles logicielles complètement différentes? Si oui, pourquoi? – Pondlife

+0

serveur @Pondlife sql est plus lent (800 ms) lors de l'exécution de la requête directement dans le studio de gestion vs postgres dans la console psql, mais via postgres .net est plus lent de 30% – Omu

+0

On dirait que vous devriez en parler avec le développeur de Npgsql et pourquoi votre La requête psql est plus rapide que votre requête invoquée .Net. Très probablement il y a un peu de surcharge avec le Npgsql ou peut-être que ça fait des affaires marrantes à votre requête. Soyez agréable de voir votre requête et votre code .net. – Kuberchaun

Répondre

1

Une estimation rapide est Npgsql est pas aussi optimisé que la bibliothèque de connexion de Microsoft SQL Server. Vous avez prouvé à peu près que lorsque la requête SQL Server était 30% plus rapide lorsqu'elle est invoquée via .net. Avez-vous exécuté le test plusieurs fois l'un après l'autre pour les deux bases de données? Assurez-vous simplement que SQL Server ne met pas les données en cache, ce qui le rend très rapide comparé à PostgreSQL qui va sur le disque pour les mêmes données.

+0

oui je sais à ce sujet, 2ème fois qu'ils sont à la fois plus rapides (caches postgres, je suppose aussi), mais le serveur SQL est encore 30% plus rapide, peu importe 1ère fois ou 2ème, bien qu'il y ait une grande différence entre la première et la deuxième fois que vous exécutez la même requête – Omu

+0

@Omu Plus, vous devez garder à l'esprit toutes les variables à l'œuvre ici. Les deux bases de données sont-elles sur le même matériel? Avec la même charge? Les deux sont configurés pour être exactement les mêmes? Beaucoup de variables possibles au travail ici. Mais il semble que vous montrez qu'il a probablement à voir avec les pilotes .net. Avec le SQL Server étant plus par formants au moins sous votre select * du test de foo, qui est une requête vraiment irréaliste à exécuter pour les résultats de test du monde réel. Normalement, ne sélectionnez jamais *, et il est rare que vous sélectionniez toutes les lignes d'une table, sauf si vous mettez en cache des valeurs de tables de recherche. – Kuberchaun

+0

serveurs sont exactement les mêmes, de toute façon qui ne compte vraiment, parce que posrgre est beaucoup plus rapide que le serveur de SQL, mais pas via Npgsql, .net – Omu