#informatique Bot Logged User list

Network: Zeolia
Modes: +nrt
Last Seen: 55 minutes ago
Topic: Canal d'aide informatique - Développement / Web / Windows - Pour les questions linux, rejoindre #linux
#3
Rank
11
Users

Channel Log Archive for #informatique

Prev
Next

* All times are UTC
Filtering by user: CrazyCat
Wednesday, September 21, 2022
[06:58:02] @ CrazyCat Commence par exécuter la requête dans phpmyadmin pour voir combien de temps elle met
[06:58:29] @ CrazyCat Si ça trouve, le souci est juste que ta page générée est lourde
[07:01:46] @ CrazyCat Essaye en virant ton DISTINCT id (count(*))
[07:04:06] @ CrazyCat Pis l'option "Explain" est pas mal pour voir un peu ce qui prend du temps
[07:06:38] @ CrazyCat En dessous de la requête, tu dois avoir un bouton "Expliquer"
[07:07:11] @ CrazyCat Un lien "Expliquer SQL"
[07:07:32] @ CrazyCat Sinon, tu ajoutes juste "EXPLAIN" au début de ta requête
[07:13:23] @ CrazyCat (tu devrais soit renommer le champ time soit le protéger avec des ``)
[07:16:24] @ CrazyCat Yep
[07:16:55] @ CrazyCat Tu peux tenter ta requête sans le order by pour voir ce que ça donne ?
[07:18:33] @ CrazyCat Ok, ça me semble logique
[07:18:52] @ CrazyCat Donc, j'ai une idée qui peut t'arranger
[07:19:29] @ CrazyCat Tu crées une vue à partir de cette dernière requête (sans le order donc, de toutes manières mysql te le refusera)
[07:19:55] @ CrazyCat (et sans le limit, idem)
[07:20:18] @ CrazyCat Et tu fais dans ton php la requête sur la vue en ajoutant ton order et ton limit
[07:29:31] @ CrazyCat Question con en passant: pourquoi tu récupères le champ time alors que tu as lasttime
[07:29:42] @ CrazyCat Et qu'en toute logique c'est les mêmes
[07:31:05] @ CrazyCat Ben oui, ta vue fait 90% du boulot, ta reqête change: SELECT * FROM stats_connex ORDER BY lasttime LIMIT 100
[07:31:23] @ CrazyCat (remplace le * par les champs de la vue)
[07:35:47] @ CrazyCat Tente dans phpmyadmin
[07:36:11] @ CrazyCat (et encore une fois, pourquoi tu intègre time dans tes requêtes ?)
[07:40:18] @ CrazyCat Tu peux faire un expliquer SQL stp ?
[07:42:12] @ CrazyCat Hum, c'est bizarre que ta vue ait autant de lignes que ta table principale
[07:43:18] @ CrazyCat Tu peux me montrer un peu de contenu de ta vue stp ?
[07:46:24] @ CrazyCat Ok, donc déjà je te conseille de refaire ta vue en virant time et en ajoutant id (qui peut être utile)
[07:46:40] @ CrazyCat Heu non
[07:46:49] @ CrazyCat id c'est juste un auto incrément ?
[07:48:20] @ CrazyCat oki, donc id ne sert à rien dans la vue (j'ai cru 2 minutes que c'était l'id utilisateur)
[07:48:48] @ CrazyCat Mais time dans ta vue ne sert à rien
[07:49:52] @ CrazyCat dans ta vue, il te donne juste une des connexions de ce qui a été groupé
[07:50:35] @ CrazyCat (même si ça n'a aucun rapport avec ton souci de perfs)
[07:52:57] @ CrazyCat Dans title="<?=date("G:i:s",strtotime($Logs['lasttime'])); ?>"><?=date("j/n/Y",strtotime($Logs['time'])); ?> ?
[07:53:07] @ CrazyCat utilise lasttime plutôt que time
[07:55:15] @ CrazyCat C'est pas génant ça
[07:58:07] @ CrazyCat Normalement dans la colonne de gauche (rafraichit la page) tu dois avoir dans ta bases une arbo
[07:58:15] @ CrazyCat et dedans tu as tables et vues
[08:06:42] @ CrazyCat Ben non, c'est la même que tout à l'heure
[08:07:21] @ CrazyCat Mouais mouais mouais
[08:07:42] @ CrazyCat Ton champ time, c'est un timestamp ?
[08:09:04] @ CrazyCat ok
[08:10:31] @ CrazyCat Pourquoi il y a le ON UPDATE ?
[08:12:32] @ CrazyCat Ben tu as déjà la valeur par défaut
[08:13:03] @ CrazyCat Cet extra sert à mettre à jour la valeur si tu fais une action sur l'enregistrement
[08:13:37] @ CrazyCat C'est utilisé par exempe pour un champ de type "date de dernière modification"
[08:14:03] @ CrazyCat Mais *jamais* pour du log qui ne doit surtout pas être modifié
[08:15:21] @ CrazyCat Non, tu ne mets rien
[08:15:34] @ CrazyCat Par défaut ce champ est vide
[08:46:22] @ CrazyCat Bon, j'ai l'explication pour le ralentissement, mais pas la solution
[08:47:02] @ CrazyCat Quand tu fais un order by, MySQL est obligé de lire tous les enregistrements, donc forcément au bout d'un moment ça coince
[09:39:21] @ CrazyCat Après, il y a un autre truc, tu as peut-être mis trop d'index
[09:39:39] @ CrazyCat Plus tu mets des index plus mysql à des données à lire
[09:47:51] @ CrazyCat Tout dépend de ce à quoi te sert ta table en plus de cette requête
[09:50:21] @ CrazyCat Dans ta page search, tu peux chercher sur quoi ?
[09:55:56] @ CrazyCat tu dois pouvoir virer celui sur realname et sur host
[09:56:24] @ CrazyCat Et il faudrait que tu essayes dans phpmyadmin:
[09:56:52] @ CrazyCat select d.* from (SELECT COUNT(DISTINCT id) AS nbc, MAX(`time`) AS lasttime, codepays, nick, username, ip, host, realname, webirc, sslco FROM logsusers GROUP BY nick, username, ip) as d order by d.lasttime
[09:57:24] @ CrazyCat Un index sur time par contre
[09:59:05] @ CrazyCat D'après mes tests, la dernière requête que je t'ai donnée n'optimise rien :D
[10:02:27] @ CrazyCat Oui, je ne vois pas quelle solution utiliser
[10:07:59] @ CrazyCat Normalement, par l'id auto incrément, mais dans le cas d'un group by, je ne sais pas
[10:17:32] @ CrazyCat Pour l'instant je ne vois pas ton souci :)
[10:22:59] @ CrazyCat La première te sort le nombre total de messages
[10:23:29] @ CrazyCat La seconde n'a rien à voir avec la 1ère
[10:25:35] @ CrazyCat La première, tu veux t'en servir juste pour la pagination ?
[10:27:54] @ CrazyCat Ben oui, vu que sur la 2ème tu as du groupage
[10:30:17] @ CrazyCat Tu as une requête qui compte toute les lignes, et une qui te sort un résumé.
[10:30:42] @ CrazyCat Je pense que la somme des nbc de la 2ème requête fait 333
[10:32:57] @ CrazyCat Le premier truc que tu devrais faire, c'est écrire noir sur blanc (et sans penser au code) à ce que tu veux faire sur ta page
[10:40:55] @ CrazyCat Attends, j'essaye de te faire ça plus propre
[10:45:45] @ CrazyCat Tu as 2 fois la même requête dans ta page ?
[10:46:03] @ CrazyCat Ligne 11 et ligne 49
[10:48:08] @ CrazyCat Jette un oeil à ce que j'ai fait de ta page :)
[10:54:15] @ CrazyCat Ah ben ça, vu le nombre de lignes, le order fatigue bien
[10:54:41] @ CrazyCat Après, as-tu besoin de garder autant de lignes ?
[10:55:34] @ CrazyCat C'est possible
[10:56:53] @ CrazyCat C'est ta table: tes champs n'ont pas le même interclassement
[10:57:24] @ CrazyCat tu as du mix utf8 et utf8mb4
[11:01:03] @ CrazyCat C'est bizarre ça
[11:01:54] @ CrazyCat Et ta table elle-même ?
[11:02:22] @ CrazyCat Ah mais faut la virer
[11:04:55] @ CrazyCat Regarde l'interclassement de ta table
[11:06:58] @ CrazyCat Dans le doute, va dans les opérations de la table, et dans les options, tu coches "Changer le classement de toutes les colonnes" et tu exécutes
[11:12:24] @ CrazyCat Et un autre truc: c'est peut-être le contenu de ta recherche qui pose problème
[11:12:51] @ CrazyCat Quand tu définis ta connexion à la base, ajoute ;charset=utf8mb4 après le nom de la base
[11:13:14] @ CrazyCat Ca forcera PDO à utiliser le bon jeu de caractères
[11:18:01] @ CrazyCat le % qui est dans le like ?
[11:18:17] @ CrazyCat Ton php est bien en utf8 ?
[11:29:32] @ CrazyCat Tu as combien de résultats ?
[11:30:41] @ CrazyCat Et tes liens sont bons dans la pagination ?
[11:36:04] @ CrazyCat Et tu as bien le paramètre de recherche dans l'url ?
[11:40:55] @ CrazyCat Mais avec page=1 ça marche ?
[11:41:18] @ CrazyCat Ou bien ça ne marche que quand il n'y a pas page= ?
[11:52:14] @ CrazyCat fait un echo de de $page et de $word
[11:56:43] @ CrazyCat Tu peux m'appeler bb mais je risque de pas répondre :D
[14:15:30] @ CrazyCat Salut ozswar
Prev
Next