Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/06/2011, 18h30   #1
 
Homme
Chef de projet en SSII
Inscription : juin 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 2
Points : -1
Points : -1
Par défaut Pb performances SQL 2008 x64

Bonjour
Je rencontre des problèmes de performance sous SQL2008 R2.

J'ai une requête (générée par Analysis services) qui renvoie un nombre relativement important de lignes (> 3M)

Lorsque cette requête est exécutée sur un serveur 32bit (2K, 2K5 ou 2K8) elle prend environ 5min.

Lorsque je l'exécute sur un serveur 2K8 64bits, même base donc même nombre de lignes en sortie, elle prend 2h15 et occupe la totalité des processeurs.

Après de nombreuses recherches et quelques pistes (utilisation d'indexs non clustered, gestion de la mémoire...) je ne parviens toujours pas à isoler le problème.

Quelqu'un aurait-il une idée?

Merci par avance.
cthugha34 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/06/2011, 19h15   #2
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Essayer de forcer la sérialisation du plan

Code :
1
2
3
SELECT 
...
OPTION (MAXDOP 1)
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2011, 11h06   #3
 
Homme
Chef de projet en SSII
Inscription : juin 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 2
Points : -1
Points : -1
Citation:
Envoyé par dbaffaleuf Voir le message
Essayer de forcer la sérialisation du plan

Code :
1
2
3
SELECT 
...
OPTION (MAXDOP 1)
Merci de votre réponse.
Ce n'est pas mieux.
La charge processeur est moins importante en limitant le parallélisme mais les temps de réponse sont identiques.
En fait lorsque j'exécute la requete sur le serveur x64, elle commence à renvoyer des lignes très rapidement (après 10sec de traitement) mais les renvoie par petits lots de 60 lignes.
Alors que sur le serveur 32bits la requetes s'exécute pendant environ 2min avant de renvoyer le résultat mais affiche ensuite la totalité des lignes en moins de 3min
cthugha34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2011, 11h57   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Quelle configuration sur votre serveur 32 bits ? (CPU, RAM, version OS etc ..)
Même chose sur votre serveur 64 bits ?

Quel est le plan d'exécution généré dans les 2 cas ?
Quelles sont les statistiques d'exécution générées dans les 2 cas ? (SET STATISTICS TIME ON .. SET STATISTICS IO ON)

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2011, 12h33   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
D'ou exécutez vous vos 2 requêtes? sur SSMS en local sur chaque serveur?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 17h38   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Il est aussi possible que les jointures se fassent sur des colonnes de type int (4 octets), ce qui n'est pas pour aider sur un processeur 64 bits.

Si c'est le cas, il faudrait passer en bigint (8 octets), et voir l'effet ...
Pas forcément simple à faire

3 millions de lignes et SSAS ... construiriez-vous un cube ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 18h55   #7
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Citation:
Envoyé par elsuket Voir le message
Il est aussi possible que les jointures se fassent sur des colonnes de type int (4 octets), ce qui n'est pas pour aider sur un processeur 64 bits.
Ah bon ? Pourtant un processeur 64 bits acceptera des mots de 8 octets. Il pourra donc en théorie traiter 2 INT plus rapidement qu'un processeur 32 bits.

Citation:
Si c'est le cas, il faudrait passer en bigint (8 octets), et voir l'effet ...
Cela voudrait donc dire qu'il faudrait plus de stockage pour les clés et donc ramener plus de pages pour traiter l'information ...

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 18h58   #8
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Pour pouvoir comparer, il faut voir les deux plans.

Sur chaque environnement:
Code :
1
2
3
4
SET showplan_text ON
GO
SELECT ....
GO
Merci,
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 08h26   #9
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Envoyé par elsuket
Il est aussi possible que les jointures se fassent sur des colonnes de type int (4 octets), ce qui n'est pas pour aider sur un processeur 64 bits.

Ah bon ? Pourtant un processeur 64 bits acceptera des mots de 8 octets. Il pourra donc en théorie traiter 2 INT plus rapidement qu'un processeur 32 bits.


Citation:
Si c'est le cas, il faudrait passer en bigint (8 octets), et voir l'effet ...

Cela voudrait donc dire qu'il faudrait plus de stockage pour les clés et donc ramener plus de pages pour traiter l'information ...

++
__________________

L'éternel débat, mettre la même taille de clé que la taille du processeur ou privilégier les pages gagnées avec la taille moindre?


Personnelement je 'taille' mes clefs pour la volumétrie sans tenir compte de la taille du processeur.

Il faudrait faire des tests approfondis.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h11   #10
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Tu n 'as pas entièrement tort. C'était plus sensible en 2000 qu'en 2005. Dans mon cours à Orsys je montrais que même un SMALLINT dans un OS 32 bits perdait de 5 à 10% de temps pour vérifier les bits de poids haut, ce qui n'est plus le cas dans 2005.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 10h29   #11
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Il y a aussi l'architecture des processeurs à prendre en compte. Les caches internes L2 et L3 peuvent être un point de contention sur certains processeurs 64 bits alors que sur des architectures 32 bits le problème ne sera pas forcément présent. Le fameux CPI (Cost Per Instruction).

Il y a aussi les problèmes liés à l'alignement des données en mémoire et qui sont lues par les processeurs et qui sont plus sensibles pour des architectures 32 bits que 64 bits mais bon en principe les processeurs actuels règlent ce problème en ajoutant des bits supplémentaires pour forcer cet alignement.

Il y a des cas où passer de 32 bits à 64 bits n'est pas forcément gage de performances (j'ai pû le constater d'ailleurs chez un client). Cela dépend à mon avis de la charge (requêtes) et des caractéristiques physiques du serveur.

Citation:
Lorsque cette requête est exécutée sur un serveur 32bit (2K, 2K5 ou 2K8) elle prend environ 5min.

Lorsque je l'exécute sur un serveur 2K8 64bits, même base donc même nombre de lignes en sortie, elle prend 2h15 et occupe la totalité des processeurs.
Encore une fois (et comme le disait aussi dbaffaleuf) il faudrait pouvoir comparer les 2 plans d'exécutions , voir ce qui prend le plus de temps et éventuellement comparer les config de serveur.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h35.


 
 
 
 
Partenaires

Hébergement Web