Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  [SQL] Requetes lentes sur grosse table [Screenshot inside]

Bas de page
Auteur Sujet :

[SQL] Requetes lentes sur grosse table [Screenshot inside]

n°5146
tifrere
Junos power
Profil : Dinosaure
Posté le 22-09-2003 à 01:06:59  
 

Voila l'état de ma base de données
 
http://tifrere974.free.fr/images/bdd_monitoring.jpg
 
C'est donc une base qui sert de monitoring et vous pouvez voir ke la table windows 2000 est relativement énorme.
 
bref, dans l'interface php j'ai une page ki permet d'afficher la table windows 2000 (avec un LIMIT bien sur) sur plusieurs pages. Sur chaque page j'affiche 100 lignes de la table (pour la nieme page, la requete qui permet d'avoir les 100 niemes lignes est : select * from W2K LIMIT n*100, 100; )
sur cette meme page j'ai un formulaire qui permet de faire une selection sur différents champs de la table avt d'afficher la table :
 
http://tifrere974.free.fr/images/bdd_monitoring02.JPG
 
les champs Event Log, Event Type et Event Source sont remplis via une requete SQL qui s'applique sur la table W2K (select distinct eventlog from W2K, et pareil pour le reste)
 
bref etant donné que la table possède plus de 4 000 000 de lignes faire un select distinct dessus c long
meme le select avec le LIMIT (alors kil ne prends ke 100 lignes) est super lent.
 
est ce ke ya moyen d'optimiser tout ca
 
car la page est quasi innaccessible now, c trop lent
 
pour l'instant comme solution temporaire
g backupé la table W2K pour garder les 2go de log et j'ai supprimé le contenu donc maintenant ke ya moins d'entrées c plus rapide mais j'aimerais pas a faire cette manip tous les 3 mois. (temps kil fo pour atteindre 4 500 000 lignes).
 
ya moyen d'optimiser ca ?
 
Edit : je viens de lire un article d'optimisation ki parle d'index et ca a l'air vachement puissant
je vais me renseigner dessus


Message édité par tifrere le 22-09-2003 à 18:22:33

---------------
Speed, Quality, Price ... pick any two
mood
Pub
Posté le 22-09-2003 à 01:06:59  
 

n°5147
nayluge
c le plu bo jour de ma vie ...
Profil : Habitué
Posté le 22-09-2003 à 01:38:09  
 

je plante un drapeau : sujet tres interressant

n°5148
lukefab
meuh
Profil : Habitué
Posté le 22-09-2003 à 07:50:29  
 

Déjà, première chose à faire : foutre des index sur les champs souvent accédés en lecture (ca ralentit les requêtes d'update/insert). ensuite, faut voir ton schéma de base et les requêtes que tu fais dessus et là commence la vraie optimisation où on compte des probabilités et tout ça machin... :jap:  :hello:


---------------
Opera 8.51 pour Windows, Linux, FreeBSD, Solaris, Mac OS X.
www.opera.com , c'est bon et sans morceau de pub dedans, mangez-en.
Un pingouin aux pommes ?
n°5151
tifrere
Junos power
Profil : Dinosaure
Posté le 22-09-2003 à 10:55:53  
 

lukefab a écrit :

Déjà, première chose à faire : foutre des index sur les champs souvent accédés en lecture (ca ralentit les requêtes d'update/insert). ensuite, faut voir ton schéma de base et les requêtes que tu fais dessus et là commence la vraie optimisation où on compte des probabilités et tout ça machin... :jap:  :hello:  


k je vais voir ca :hello:


---------------
Speed, Quality, Price ... pick any two
n°5275
bugsan
Profil : Jeune recrue
Posté le 07-10-2003 à 13:29:01  
 

c'est n'importe quoi cette table...
faut creer des tables pour les types, les log, et sources :|
select distinct... n'importe quoi :| ca devrait etre banni ce mot clé.
 
EDIT: la complexité de la fonction c'est nombre_de_type*nb_lignes, si t'as 10 types, t'auras 40 millions de comparaisons  :jap:  
 
tu les connais à l'avance les types, et si ce n'est pas le cas, tu peux les récupérer sur les updates. quand t'as un nouveau type, hop tu l'ajoutes :)
 
contrainte d'intégrité référencielle:
[numtype, nomtype] => [numlog, log, numtype]
etc...
 
et il est évident qu'un select sur une table de 4 millions de lignes c'est n'importe quoi ... tu devrais faire une table par semaine à ce niveau là, et te démerder ensuite avec la couche métier (php)
 
EDIT2: factorise les données : évite toutes les redondances, je suis sur qu'on peut diviser par 100 la taille de ta table (redondance des messages de log, je parie qu'ils se ressemblent tous)


Message édité par bugsan le 07-10-2003 à 13:34:41
n°5276
tifrere
Junos power
Profil : Dinosaure
Posté le 07-10-2003 à 13:33:25  
 

plutot de dire ke je fait ke dla merde
dit juste ce kil fo pour améliorer la chose koi
 
bref ouais j'avais pas pensé a faire une table pour les types


---------------
Speed, Quality, Price ... pick any two
n°5278
bugsan
Profil : Jeune recrue
Posté le 07-10-2003 à 13:47:42  
 

ok...
balance le contenu d'une dixaine d'enregistrements, histoire de voir ce qu'on peut faire.

n°5279
tifrere
Junos power
Profil : Dinosaure
Posté le 07-10-2003 à 15:30:49  
 

oki


---------------
Speed, Quality, Price ... pick any two
n°5280
tifrere
Junos power
Profil : Dinosaure
Posté le 07-10-2003 à 15:38:28  
 

donc la on voit le monitoring du serveur VPN
d'ailleur on voit ma connexion dessus (pymaunier)
http://tifrere974.free.fr/images/W2K.jpg


---------------
Speed, Quality, Price ... pick any two
n°5281
tifrere
Junos power
Profil : Dinosaure
Posté le 07-10-2003 à 15:41:03  
 

selon toi il faudirat une table ki contient tous les Event Log, un autre pour les event type, une autre pour les event id ?
 
sinon je découpe la table W2K toutes les 2 semaines :/


---------------
Speed, Quality, Price ... pick any two
n°6698
neophite
<-(°_°)->
Profil : Membre
Posté le 19-02-2004 à 02:38:24  
 

bugsan a écrit :

ok...
balance le contenu d'une dixaine d'enregistrements, histoire de voir ce qu'on peut faire.


 
moi j ai compri par la qu il voulai voir le contenu de la table ...
a voir si il est possible de creer une table de liaison...


---------------
---------------
http://neophite.free.fr
---------------
---------------
n°6721
jardin
Yom? Le meilleur d'entre nous!
Profil : Membre
Posté le 19-02-2004 à 17:25:36  
 

Commençons par le commencement...
Fais une table Event_Log Event_Type (Event_ID ca sert à rien vu que t'as deje des int)
Ensuite le "Text" lui meme tu le mets dans une table a part. Que tu index bien correctement.
 
Avant de faire un insert dans la table Text, tu fais un select pour recuperer l'ID. Si il existe tu gagnes ca au moins dans tes logs (et effectivement souvent ces messages se ressemblent.) Si il existe pas tu cree une entree.
Pareil pour les champs UserName et Computer Name qui passent en table séparée.
Tu vas avoir un gain de place enorme a mon avis. En plus lancer une recherche juste sur des IDs est beaucoup plus rapide que sur du texte...  
 
Donc ta table va etre:
id_table (necessaire pour adresser un log particulier rapidement) bigint auto_increment
datetime
id_computer_name
id_event_log
id_event_type
id_event_source
event_id
id_user_name
id_text
 
table text
id_text
text
 
table computerName
id_computer_name
computer_name
 
etc...

n°6722
jardin
Yom? Le meilleur d'entre nous!
Profil : Membre
Posté le 19-02-2004 à 17:28:15  
 

Si je puis me permettre...
Dans les logs il est absolument necessaire de prevoir un systeme de rotation...
 
Ton cas ne fais pas exception :)
 
Le plus simple etant de changer le nom de ta table principale en nomtable_2004_02
Puis de recreer ta table à l'identique mais à vide... (Esprit logrotate).

n°6735
tifrere
Junos power
Profil : Dinosaure
Posté le 20-02-2004 à 05:31:47  
 

merci de ces infos :jap:


---------------
Speed, Quality, Price ... pick any two
n°6738
jardin
Yom? Le meilleur d'entre nous!
Profil : Membre
Posté le 20-02-2004 à 10:01:04  
 

Posté le 20-02-2004 à 05:31:47   <-- Tu dors pas la nuit???

n°6759
tifrere
Junos power
Profil : Dinosaure
Posté le 20-02-2004 à 21:40:24  
 

jardin a écrit :

Posté le 20-02-2004 à 05:31:47   <-- Tu dors pas la nuit???


je jouais a Counter Strike et je voyais pas le temps passer :p


---------------
Speed, Quality, Price ... pick any two
  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  [SQL] Requetes lentes sur grosse table [Screenshot inside]

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés