[WikiFR-l] Ca rame: mea culpa ??

Brion Vibber vibber at sal-sun062.usc.edu
Mer 26 Mar 20:31:16 UTC 2003


On Wed, 26 Mar 2003, Weeger Nicolas wrote:
> Salut.
> Le wikipedia fr (et aussi les autres, on dirait) est tombé, et je me demande si c'est pas en partie de ma faute, vais m'expliquer... (pas encore taper, tout lire avant !)
>
> Tout à l'heure j'ai voulu lancer une requête SQL sur la base, afin de voir les pages pointant sur des redirects.
> La requête utilisée est:
>
> select l.cur_title, r.cur_title from cur l inner join links lnk on binary l.cur_title = binary lnk.l_from inner join cur r on binary r.cur_title = binary lnk.l_to where r.cur_text like '%#redirect%'

Mon dieu! :)

Du 'slowquerylog':
# Time: 030326 19:01:14
# User at Host: wikisql[wikisql] @ localhost.localdomain [127.0.0.1]
# Query_time: 31141  Lock_time: 0  Rows_sent: 0  Rows_examined: 9571
use frwiki;
select l.cur_title, r.cur_title from cur l inner join links lnk on binary
l.cur_title = binary lnk.l_from inner join cur r on binary r.cur_title = binary
lnk.l_to where r.cur_text like '%#redirect%' limit 5;

31141 secondes! En fait, pas joli.

Ce serait plus bien, si vous ne repeterez pas l'experience. :)

Un conseil: quand on preuve une nouvelle requete sql, preceder-lui par
'EXPLAIN'. La base des donnees reponde avec une explication des
mechanismes qu'elle utiliserait:

+-------+-------+---------------+----------------------+---------+------+--------+-------------+
| table | type  | possible_keys | key                  | key_len | ref  | rows   | Extra       |
+-------+-------+---------------+----------------------+---------+------+--------+-------------+
| l     | index | NULL          | name_title_timestamp |     270 | NULL |  11891 | Using index |
| r     | ALL   | NULL          | NULL                 |    NULL | NULL |  11891 | where used  |
| lnk   | ALL   | NULL          | NULL                 |    NULL | NULL | 108975 | where used  |
+-------+-------+---------------+----------------------+---------+------+--------+-------------+

Bien des donnees, peu des indexes -- une combinaision mauvaise.

Aussi, une probleme des relations: links.l_to contien une nombre, cle a
cur.cur_id, pas a cur.cur_title.

(l_from aussi n'est pas fidele pour un join; il contien une fusion de
namespace et titre, tandis que cur_namespace et cur_title sont separate.)

Puis, le 'cur_text like '%#redirect%'' -- tres lente! Preuve qqch comme
'cur_redirect=1'. (Sauf que tu cherches des pages qui sont mauvaise
redirections, ou '#redirect' ne se situe pas a commencement de la page.)

> Alors je sais pas si c'est ma faute ou pas... la 'logique' voudrait que puisque le serveur est reparti après la grosse requête ce soit pas la 2è requête qui ait tout foutu en l'air, mais avec l'informatique, on sait jamais !!!
>
> Toutes mes excuses si c'est ma faute..

Pas de pb, mais stp ne repetes. Et si tu dois, stp ne repeterais sauf
quand je suis deja reveillee en Californie... :)

-- brion vibber (brion @ pobox.com)





Plus d'informations sur la liste de diffusion WikiFR-l