Sunday, November 13, 2022
[05:40:02]
*
Amand
quit (Quit: Connection closed for inactivity)
[13:06:30]
*
Amand
joined #informatique
[13:06:30]
*
[Guru]
set mode +h Amand
[13:13:23]
%
Amand
CrazyCat: je sais pas si tu as rep à mon msg ou si ta compris quelques choses :')
[13:13:58]
@
CrazyCat
Si j'ai bien compris, ta vue est longue à se rafraichir lorsque tu importes beaucoup de données ?
[13:14:46]
%
Amand
bah enfaite c'est au niveau de ma procédure restore_logsusers , pour importer mes millions de données de ma table "logs_users" dans ma vue
[13:14:49]
%
Amand
c'est hyper lent
[13:15:05]
%
Amand
j'ai mis 2 semaines à importer à peine 1 million de donnée
[13:15:38]
@
CrazyCat
Il faudrait que je vois la procédure, mais je ne comprends pas ce que tu entends par importer dans une vue
[13:15:52]
@
CrazyCat
Une vue, c'est juste une requête pré-enregistrée
[13:16:02]
%
Amand
pas ma vue mes nouvelles tables relié à ma vue
[13:16:08]
%
Amand
je te montre
[13:16:18]
@
CrazyCat
Oui, ce sera plus simple
[13:17:33]
%
Amand
https://imgur.com/pWgQhZz.png ( ne prends pas compte de la table "logsusers" , c'est celle ou j'ai mes millions de donnée, tu te rappeles celle ou j'avais des grosses lenteurs de chargement avec le ORDER BY )
[13:17:44]
%
Amand
du coup j'ai crée les 3 tables juste en dessous
[13:18:13]
%
Amand
relié à ma vue USER_INFO_FULL
[13:18:16]
%
Amand
avant je faisais :
[13:19:43]
%
Amand
SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco, `time` FROM logsusers GROUP BY nick, username, ip ORDER BY lasttime DESC LIMIT 100
[13:19:50]
%
Amand
ça mettait plus d'une minute à charger
[13:20:05]
%
Amand
et maintenant je fais :
[13:20:07]
%
Amand
SELECT * FROM `USER_FULL_INFO` ORDER BY `USER_FULL_INFO`.`LAST_CONNECT` DESC LIMIT 100
[13:20:57]
%
Amand
mais il va falloir que tu vois un dump de la structure pour voir en globalité
[13:21:04]
%
Amand
là je peux pas le faire, je te ferais ça je pense demain
[13:22:44]
%
Amand
en gro depuis ma procédure :
[13:22:47]
%
Amand
DROP PROCEDURE IF EXISTS `restore_logsusers`$$
[13:22:47]
%
Amand
CREATE PROCEDURE `restore_logsusers` () BEGIN
[13:23:12]
%
Amand
je devrais pouvoir importer mes données de la table logsusers sur mes nouvelles tables, relié à la vue
[13:23:23]
%
Amand
pour accelerer le temps de chargement grâce à ma nouvelle requête
[13:23:30]
%
Amand
SELECT * FROM `USER_FULL_INFO` ORDER BY `USER_FULL_INFO`.`LAST_CONNECT` DESC LIMIT 100
[13:24:51]
@
CrazyCat
C'est amusant de créer une table USER_FULL_INFO pour la supprimer et ensuite créer une vue du même nom
[13:25:01]
@
CrazyCat
(je ne vois pas l'intérêt)
[13:25:24]
%
Amand
y'a peut être des choses à améliorer
[13:25:27]
%
Amand
(sûrement)
[13:27:12]
@
CrazyCat
Et j'ai l'impression que tu t'es bien embêtée à faire des procédures avec une boucle qui les appelle
[13:27:41]
@
CrazyCat
Tu aurais pu faire une procédure qui lance juste 3 requêtes sans boucler
[13:29:29]
@
CrazyCat
Mais déjà il faut que je comprenne exactement ce que tu mets dans tes 3 tables
[13:30:11]
*
[Guru]
quit (Shutting down)
[13:33:23]
%
Amand
yep , je fais ça avec zartek pour pouvoir le proposer en tant qu'outil
[13:33:29]
%
Amand
je vais lui dire de venir
[13:35:58]
@
CrazyCat
Pour l'instant je tente de migrer mes services, je vais être peu dispo pendant 1/2h
[13:36:29]
%
Amand
pas de problème, je voulais avoir une 3eme paire de n'oeil
[13:36:38]
%
Amand
pour voir des trucs qu'on ne voit pas forcément
[13:37:30]
*
MalaGaM
joined #informatique
[13:37:39]
*
MalaGaM
is now known as zartek
[13:38:17]
%
Amand
re zartek, donc on discute avec CrazyCat du dernier pastebin
[13:38:49]
zartek
il va peut-être voir plus claire
[13:39:31]
%
Amand
il a déjà vu une anomalie , on aurait pu faire une procédure qui lance juste 3 requêtes sans boucler
[13:39:50]
%
Amand
il doit comprendre l'acheminement de notre réflexion
[13:39:58]
%
Amand
au niveau de la création des 3 tables relié à la vue
[13:40:07]
zartek
Oui, déjà dans ton pastebin tu creer CREATE TABLE `USER_FULL_INFO` (
[13:40:19]
zartek
ensuite tu la suprime DROP TABLE IF EXISTS `USER_FULL_INFO`;
[13:40:51]
zartek
et avant la creation tu drop la vue USER_FULL_INFO
[13:41:04]
zartek
y a du avori des soucis de copie/coller
[13:41:43]
zartek
Pour moi, la table a de toute facon rien a faire la
[13:41:48]
zartek
seul la vue doit existé
[13:42:05]
zartek
surement un mauvais export qui a replacer la vue en table
[13:43:47]
zartek
Je vais te refaire au propre
[13:47:04]
zartek
Tu peux deja effacer les residu que tu as chez toi, les tables (logs_connections, logs_links, logs_users, (USER_FULL_INFO?) ), les vues (USER_FULL_INFO) , les procedures/fonctions (FUNC_Get_Connection, FUNC_Get_Connection, CONNECTION_NEW, restore_logsusers)
[13:47:21]
zartek
et eventuellement d'autres risidu
[13:49:49]
%
Amand
yes j'ai tout supprimé
[13:50:51]
%
Amand
pour éviter d'avoir des collisions , je supprime à chaque fois
[13:57:20]
zartek
Tu as bien regarder pour les fonctions procedure et vue?
[13:57:29]
zartek
(désolé je demander double confirmations)
[13:57:50]
%
Amand
oui c'est supp
[14:02:02]
*
[Guru]
joined #informatique
[14:02:03]
*
[Guru]
set mode +o [Guru]
[14:03:18]
@
CrazyCat
Bon, le souci est bien dans restore_logsusers qui rame ?
[14:05:52]
%
Amand
oui , attends que zartek met au propre le pastebin pour analyser dans un code assez clean
[14:06:11]
%
Amand
ça évitera qu'on se dispatche sur différent pastebin
[14:06:48]
@
CrazyCat
Si oui, vu que cette fonction est là pour remplir les 3 tables à partir de logusers, pourquoi ne pas juste faire un "insert into tableX (champ, champ, champ) select (champ, champ) from logusers ?
[14:12:15]
%
Amand
c'est normal de crée la table et la supprimer encore?
[14:13:35]
@
CrazyCat
Je dois avoir un souci avec weechat, j'ai l'impression qu'on ne voit pas mes questions
[14:13:49]
zartek
pourquoi ne pas juste faire un "insert into tableX (champ, champ, champ) select (champ, champ) from logusers ? parce que logs_connections et logs_users doivent avoir un ID unique et etre mis dans logs_links et logs_users; sa implique un insert ignore et select de ID, pour creer si n'exiete pas ou prendre l'id si existe deja (les donénes unique), et logs_links incremente un table pourle
[14:13:49]
zartek
nombre de connexions
[14:14:38]
@
CrazyCat
Bon, alors je vais reprendre depuis le début: qu'est-ce que vous mettez dans ces 3 tables ?
[14:14:53]
zartek
Amand non pas normal, je ne sais pas pourquoi il fait ca a l'export phpmyadmin
[14:14:55]
@
CrazyCat
(en français, sans rien de technique)
[14:15:34]
%
Amand
( je laisse zartek te rep pour ne pas avoir 10 explications )
[14:22:39]
zartek
Lors de la connexion d'un utilisateur, nous avons besoin de recuprer les informations suivant country, nick, username, ip, hosrt cloacked, realname, si webirc, et ssslco, nous avons besoin en valeur unique le nick nickname, et ip et et avoir avec ca, la date/heure de derniere connexion et le nombre de connexion avec les valeurs unique
[14:23:35]
@
CrazyCat
Oui, ça c'est le remplissage en mode normal
[14:24:01]
@
CrazyCat
Mais la procédure restore_logsusers, pourquoi elle est si compliquée et fait une boucle
[14:24:19]
@
CrazyCat
(surtout avec un order qui ralentit un max)
[14:25:51]
@
CrazyCat
en jouant avec count, max et group by, on peut remplir les tables sans faire de boucle
[14:26:54]
@
CrazyCat
3 requêtes dans la procédure et le tour est joué
[14:28:47]
zartek
Tu as sans doute raison. A l'origine j'avais creer pour prendre des nouvelles valeurs lros de la connexion de l'utilisateur, la proc restore_logsusers a été fais par apres; et j'ai simuler l'insert normal et legerement modifier pour prendre les valeurs plus agé vers plus jeune
[14:29:10]
zartek
j'imagine que si tu insert tout, et que tu fais ta requette coutnt sa ira plus vite
[14:30:52]
@
CrazyCat
Comment ça insert de tout puis count ?
[14:31:20]
zartek
Je ne sais pas ce que tu veux dire
[14:31:39]
zartek
<@CrazyCat> en jouant avec count, max et group by, on peut remplir les tables sans faire de boucle
[14:31:48]
@
CrazyCat
Pour chaque table à remplir, tu peux le faire avec une et une seule requête
[14:31:58]
zartek
Je te laisse faire, je sais aps comment tu vois la chose
[14:33:17]
zartek
mais tu as sans aucun doute raison qui a mieux a faire qu'en "mode normal" bidouillé pour importer un part un avec moulte requettes. j'imagine qui a count vu tu sugere en jouant avec count, max et group by, on peut remplir les tables sans faire de boucle
[14:34:41]
@
CrazyCat
insert into logs_connections (CONNECT_TLS, CONNECT_WEB, HOST_CLOACKED, HOST_CLOACKED) select distinct sslco, webirc, host, realname from logusers group by sslco, webirc, host, realname;
[14:36:35]
@
CrazyCat
là c'est qu'un exemple pas forcément le bon, j'ai pas fais gaffe à quelle clé unique vous voulez utiliser
[14:44:53]
@
CrazyCat
Le seul truc qui peut être chiant, c'est pour avoir le dernier realname utilisé qui aura peut-être besoin d'une requête supplémentaire comportant un MAX(time) (très mauvais choix de nom de colonne d'ailleurs)
[14:45:40]
@
CrazyCat
Encore qu'avec une requête imbriquée on peut le remonter
[14:48:44]
%
Amand
déjà avec cette modif c'est nettement plus rapide
[14:56:50]
%
Amand
ok donc là en 8 minutes 140 000 importations de donnée
[14:56:53]
%
Amand
c nettement plus rapide
[14:57:34]
zartek
Amand, tu pourrais faire un EXPLAIN EXTENDED SELECT `codepays`, `nick`, `username`, `ip`, `host`, `realname`, `webirc`, `sslco`, `time` FROM `logsusers` ORDER BY `logsusers`.`time` ASC;
[14:57:50]
zartek
Parce que a mon avis, c'est ce qui ralentis le tout
[14:58:48]
zartek
a mon avis, TYPE est en ALL et possible_keys en NULL
[14:59:48]
%
Amand
bah déjà là, c'est bien plus rapide
[15:00:06]
%
Amand
j'en suis quasiment à 200 000 , alors qu'avant hier j'avais mis 2 semaines pour avoir à peine 900 000 importations
[15:00:16]
%
Amand
et là en 10 minutes, 200 000 , c'est largement mieux
[15:00:46]
zartek
Ouais, mais il doit recreer toutes les données dans une fichier pour trier (filesort) pour le ORDER BY `logsusers`.`time` ASC;
[15:01:10]
zartek
Mais si tu estime que c'est assez rapide, laisse tourné comme ca
[15:01:23]
%
Amand
si vous avez mieux à me proposer, je suis preneuse
[15:03:29]
zartek
La il te faudra genre 4-5heures dapres mes calcules a l araches
[15:03:35]
zartek
pour l'import
[15:03:48]
%
Amand
c'est beaucoup mieux que 2 semaines pour a peine 900 000 :')
[15:03:59]
%
Amand
4h c'est plus logique
[15:04:12]
zartek
c'est presque jouissif :')
[15:04:22]
*
[Guru]
quit (Shutting down)
[15:04:45]
*
[Guru]
joined #informatique
[15:04:46]
*
[Guru]
set mode +o [Guru]
[15:05:18]
@
CrazyCat
Hum, ce serveur se fout de ma gueule
[15:09:05]
zartek
Il ce passe quoi avec [guru] ?
[15:09:19]
@
CrazyCat
Je le migre de serveur
[15:09:27]
@
CrazyCat
(enfin non, je l'ai migré)
[15:19:39]
zartek
Il aurais pas un soucis de droits sur le fichier backups/db file ? Si il plante tout les x temps, tetre a l ecriture dun fichier. car j'imagine que ta mis ntp time pour etre syncrho avec le temps
[15:22:38]
@
CrazyCat
Non, il ne plante pas
[15:22:59]
@
CrazyCat
J'ai arrété les services sur un serveur et les ai démarrés sur l'autre
[15:23:18]
zartek
Ok, désolé je viens avec des trucs qui te font perte du temps à repondent pour rien.