Com enfonsar un WordPress 2.3

Avui m’he entretingut a fer proves amb WordPress 2.3, el gestor de blogs amb el que funciona aquest seti, i després de força trastejar puc confirmar que WordPress no suporta blocs grans.

Què vol dir grans?


mysql> select count(ID) from wp_posts;
+-----------+
| count(ID) |
+-----------+
|    132872 |
+-----------+

mysql> select count(cat_ID) from wp_categories;
+---------------+
| count(cat_ID) |
+---------------+
|          2071 |
+---------------+
mysql> select count(rel_id) from wp_post2cat;

+---------------+
| count(rel_id) |
+---------------+
|        132872 |
+---------------+

Estem parlant d’un blog amb un xic més de 130.000 entrades distribuïdes en poc més de 2.000 categories, el resultat es desastrós.

El element testejat és un WordPress 2.3 amb tots els plugins desactivats i el tema per defecte, en un entorn restringit on tant sols hi havia peticions a aquest WordPress que atacava un Apache que tant sols servia aquesta web i un MySQL que tant sols contenia aquesta BD. El MySQL l’he anat reconfigurant sense èxit.

Una petició a la home o a qualsevol categoria generava una slow-query de més de 140 sg. que deixava fregit el MySQL.

El motiu, les querys són massa complexes i preveuen massa casuístiques que no tenen perquè donar-se, com per exemple un Group By que ignorava qualsevol índex i que controlava que els posts mostrats en un moment X no estiguessin relacionats en diverses categories (en el meu cas, un post = una categoria).

He toquetejat una línia del codi de WordPress per adaptar-lo a les meves necessitats i el rendiment és òptim, la línia en qüestió es troba a wp-includes/query.php i el toqueteix ha consistit en passar d’això:

$request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join
WHERE 1=1 $where $groupby ORDER BY $orderby $limits";

a això:

 $request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join
WHERE 1=1 $where $limits";

Òbviament, es tracta d’un cas particular i que en cap cas es pot globalitzar.

Prometo explicar-vos el resultat, però de moment he reduït fullscans del MySQL i filesorts innecessaris, de manera que les slow-querys (1 sg.) han desaparegut dels logs.

Problemes amb WordPress

WordPress darrerament és un no parar de problemes, surt una nova versió (2.2) i es fan públics forats crítics a la versió anterior (2.1), actualitzes a la nova versió a corre cuita i resulta que encara té més forats que l’anterior.

Productes lliures d’aquest tipus haurien de revisar-se més abans de treure noves versions, ja que arriben a un gran públic i són poden arribar a generar molta desconfiança als usuaris.

WordPress 2.1.3 i 2.0.10

Han sortit les actualitzacions de WordPress 2.1.3 i 2.0.10 (en funció de la branca que empreu).

Segons l’anunci oficial:

These releases include fixes for several publicly known minor XSS issues, one major XML-RPC issue, and a proactive full sweep of the WordPress codebase to protect against future problems.

Lloc de descàrrega: http://wordpress.org/download/

Ja he actualitzat el blog a la versió 2.1.3, si veieu cap problema feu-m’ho saber.Gràcies!

[tags]WordPress[/tags]

Extensió de WordPress: “Monthly archive grouped by year”

Fa un xic de temps vaig fer una extensió de WordPress per tal de mostrar l’arxiu de posts d’aquest bloc per data de manera ordenada i compacta. Com que era una borda recodificació de la funció get_archive vaig obviar publicar-la, però ara me l’han demanada, així que aquí la teniu:

Descripció

Plugin Name: Monthly archive grouped by year
Plugin URI: http://oriolmorell.cat/arxiu/20070325/extensio-de-wordpress-monthly-archive-grouped-by-year/
Description: Shows monthly archive grouped by year in a valid and semantic XHTML
Author: Oriol Morell i Jané
Version: 1.0
Author URI: http://oriolmorell.cat

Continua llegint «Extensió de WordPress: “Monthly archive grouped by year”»