|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
Bonjour, j'ai besoin de vos connaissances concernant l’optimisation d'une table SQL (sous SQL express 2005) ->SDBG capable de changer dans le futur
Présentation du problème: Base de donnée SQL Server 2005 Taille ~360Mo nombre d’utilisateurs : 16 maximum, en production : 4 nombre de tables 5: Parametres : 16 colonnes, maxi 300 enregistrements Messages : 10 colonnes, maxi 5000 enregistrements POI : 6 colonnes, maxi 300 enregistrements MAV: 6 colonnes, maxi 5000 enregistrements Historique: 7 colonnes, illimité, en production (~2.5 millions d'enregistrements) Historique contient: ID, Type: int, contient des doublons Date_Heure, Type: datetime, contient des doublons Latitude, Type: nchar(20), contient des doublons Longitude, Type: nchar(20), contient des doublons Type , Type: nchar(30), contient des doublons Rue, Type: nvarchar(255), contient des doublons Ville, Type: nvarchar(255), contient des doublons Exemple de requettes SQL Code :
Code :
L'autre est que pour un update il me faut plus d'1 minute par update (au bout d'une heure j'e nai que 1200 enregistrements validés (800 si on ne compte pas les valeurs de retour pour rue quand il sont vides) Merci de votre aide |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 517 ![]() |
*Meeeeeeep* !
Bon, ben déjà, mauvaise nouvelle : tout est à refaire ! Il manque une clé primaire à ta table historique. Même si elle est dénuée de sens, elle est nécessaire pour certains traitement, donc il faut la créer. Ton couple "id + date" semble être une bonne clé alternative. Est-il défini comme tel ? Y a-t-il une contrainte unique dessus ? Et un index unique ? Clustered ? => SURTOUT PAS ! (d'où le ID interne comme PK, qui lui, sera clustered) Ensuite, il faut créer une table "type", avec un id int, et ta table historique doit porter une fk qui pointe sur la table type, au lieu de te trimbaler des varchar. Latitude et longitude devrait être un float ou un decimal. Ville devrait suivre le même principe que la table type. Et même mieux, rue aussi. Historique ne devrait faire un lien que vers rue,qui elle-même fait un lien vers ville : en effet "rue des roses", c'est pas la même rue qu'elle soit à Paris ou à Lyon. Donc les données n'ont pas à être identiques ! Ensuite, une fois tes nvarchar et autres nchar remplacés par des types adéquats, ça ira bien mieux. Et enfin, tu pourras songer à indexer certaines colonnes en fonction des requêtes que tu fais généralement sur ta table. |
|
|
10
|
|
|
#3 | |||||||
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
De ce coté la j'ai une totale maitrise sur le code des softs qui les utilisent.
donc je peu me permettre ce genre de choses. Citation:
Citation:
les commentaires sont dans une autre table et les index sont des GUID Citation:
Citation:
Citation:
pour ville je peut passer sur du nchar(taille du non de ville la plu grande de france) Citation:
BIGEDIT: Si j'ai bien compris, je devrait avoir une table un peut dans ce genre (ou peut etre que j'ai tout faux): Table Historique: Index (clé primaire, type géré automatiquement par le SGDB) ID, Type: int, contient des doublons Date_Heure, Type: datetime, contient des doublons Type , Type: char(1), contient des doublons Complement , Type: celui de l'Index de la table Complement , ne contient pas de doublons -> index 0 si pas de positions GPS ? Table Complement : Index (clé primaire, type géré automatiquement par le SGDB) Latitude, Type: float, contient des doublons Longitude, Type: float, contient des doublons Rue, Type: ?, contient des doublons Ville, Type: Type: celui de l'Index de la table Villes, contient des doublons Table Villes: Index (clé primaire, type géré automatiquement par le SGDB) Ville, Type: nvarchar(255) , ne contient pas de doublons Table Types: Index char (1) , ne contient pas de doublons Type , Type: nchar(30) , ne contient pas de doublons EDIT 2: http://www.culture-generale.fr/geogr...-le-plus-court Citation:
Read more: http://www.culture-generale.fr/geogr...#ixzz1zrCLepJh Donc: Table Villes: Index (clé primaire, type géré automatiquement par le SGDB) Ville, Type: nvarchar(50) , ne contient pas de doublons EDIT 3: voici une image en expliquant mon architecture logicielle: ![]() Les select pour le viewver sont POI,Parametres: Simple Select sans conditions where MAV, Messages, Historique : - ID (facultatif) - Date_Heure (une de début et une de fin, obligatoires) - Type (facultatif) - Rue, Ville (facultatifs, Historique seulement) - Secteur (nouvelle info, facultatif, Historique seulement) Les select pour le Serveur sont Parametres: Simple Select sans conditions where Les select pour le Patcheur sont Historique: - Type : "GPS" - Rue : "" EDIT 4: Le serveur ajoute entre 5 et 100 lignes d'historique par minute dont 90 % sont des positions GPS (en comptant les positions invalides: GPS en synchronisation ou hors couverture, on oscille entre 50 et 80% de positions GPS valides) |
|||||||
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
Désolé du doublon mais je ne sais pour quelle raison ma page perso a été vidée, donc voici le nouveau lien de l'edit 3
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Pourquoi utilisez vous systématiquement du nchar et du nvarchar ? Avez vous prévu de stoker des données avec les alphabets mandarin, japonais (katakana, hiragana...) ou encore thaï ?
Quel est le type de données de la colonne complément ? Parce que si c'est un LOB... Comment mesurez vous vos temps de réponse ? Avec SET STATISTICS TIME ON ??? 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 * * * * * |
|
00
|
|
|
#6 | ||
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
Citation:
Sinon quelle est la différence entre n(var)char(X) et (var)char(X)? Citation:
select TOP 1000 * ...... Temps d'execution (~50s) Min : 47569 ms Max: 52145ms (sur 9 itérations) UPDATE..... Temps d'execution (~85s) Min : 59375 ms Max: 102981 (sur ~32000 itérations) J'ai aussi créé une fonction pour nettoyer les nom de rue (plus de chiffres au debut) pour faciliter la recherche |
||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Si vous faites un traitement itératif sur des données de nature ensemblistes, ne vous étonnez pas des lenteurs. Elles ne sont pas liées au SGBDR, mais à la façon dont vous traitez les données et en particulier aux aller et retour réseau entre le SGBDR et votre code...
Commencez par nous détailler la nature de votre traitement, et on vous conseillera ! 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 * * * * * |
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
Test sur un serveur HP avec un processeur INTEL XEON (3.0GHz) et 2 Go de RAM
Exécution Code :
SELECT TOP 1000 * FROM HISTORIQUE WHERE TYPE = 'GPS Auto' AND RUE='' Sur mon PC avec un Backup fraîchement mis en place (P4 3GHz HT et 2Go RAM) environ 2 secondes (remontée du compteur SSMSS) Exécution Code :
UPDATE Historique SET Rue='RESA', Ville='CEEFF' WHERE Id=102 AND Date_Heure='06/03/2012 16:24:50' Citation:
Citation:
se rapporter au premier post pour tout autre information. Pour info tout le traitement annexe a un temps sous la seconde par itération EDIT: Je comprends pas pourquoi mon update Select soit plus rapide que lors de mes tests, en relançant des tests ce matin j'ai a peu près le même résultat en exécution, mais le problème chez le client est toujours présent. Pour info je trouve que l'update est toujours trop long et au bout d'une centaine d'itérations, la performance chute vraiment |
||
|
|
00
|
|
|
#9 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
Indiquez nous la structure de la table historique et de toutes les tables qui lui sont liées (IR) sous forme DDL et n'oubliez pas TOUS les index.
Spécifiez comment sont structurés vos fichiers pour la base de données. Que donne la requête : Code :
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 * * * * * |
||
|
00
|
|
|
#10 |
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
La commande ne renvoie aucun résultat, en retirant la clause "where", il me renvoie beaucoup de lignes dont le "text" contient beaucoup "SELECT" et quelques "CREATE" mais pas de "INSERT" ou "UPDATE"
J'ai pas de schema de la base de données car il n'y a aucune relation entre les tables. |
|
|
00
|
|
|
#11 | |
![]() ![]() |
Citation:
C'est comme si après un déménagement vous aviez vidé au hasard les cartons dans els placards. Le matin vous allez chercher vos chaussettes peut-être dans le coffre à jouet de votre enfant ou dans le garage ! ![]() Une base de données se construit à partir de règles de gestion des données qui décrivent les associations entre des concepts sémantiques. Une base de données sans associations entre les tables, c'est le bordel !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise la suite Linux Mageïa ! |
|
|
20
|
|
|
#12 | |
|
Membre du Club
![]() Daniel Dos ReisDéveloppeur informatique Inscription : décembre 2007 Messages : 72 ![]() |
Citation:
Il n'y a pas de relation directe entre ma table historique et POI ou ma table paramètres et historique On peu dire que leur relation est gérée par mon soft (un id peut exister dans l'historique mais ne jamais exister dans paramètres (ex ID 1000 alors que je ne gère des paramètres uniquement jusqu’à 255) |
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 080 ![]() |
C'est le temps UC (donc traitement) qui est important. Le temps écoulé n'est pas le plus important, car il dépend de la volumétrie des données à retourner ainsi que des ressources disponible sur le serveur au moment ou s'exécute la requête...
Au final votre serveur est donc 2 fois plus rapide pour traiter la requête.... 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 * * * * * |
|
00
|
Copyright © 2000-2013 - www.developpez.com