( trey | 2006. 05. 13., szo – 12:15 )

Nos megvan a válasz a lassú postolásra a Drupal 4.7-en. Bekapcsoltam a MySQL-ben log-slow-queries-t és azt látom, hogy postázásnál lefut egy ilyen query:

# User@Host: root[root] @ localhost []
# Query_time: 5 Lock_time: 0 Rows_sent: 15 Rows_examined: 412106
SELECT c.nid, c.subject, c.cid, c.timestamp FROM comments c INNER JOIN node n ON n.nid = c.nid WHERE n.status = 1 AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0, 15;

SELECT c.nid, c.subject, c.cid, c.timestamp FROM comments c INNER JOIN node n ON n.nid = c.nid WHERE n.status = 1 AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0, 15;

Ez frissíti a "Friss hozzászólások" blokkot. Ha kikapcsolom a nevezett blokkot, akkor a postázás olyan, mint a ~villám. FreeBSD-n is, de Linux-on még mindig gyorsabb. OK. Vajon miért?

Hogy miért van ez (első futtatás mindegyik gépen, ugyanaz az adatbázis), valaki megmagyarázhatná. A FreeBSD-ken optimalizálva a MySQL, a lehető legrészletesebben konfigurálva. A Linux-on binárisból (apt-get install mysql-server, azt jóvan') feltéve, alig konfigurálva (éppen csak elinduljon):

HUP:

FreeBSD 6.1-PRERELEASE, Intel dual P3, 1 GB RAM (kb. 0.4-es load mellett)

mysql> SELECT c.nid, c.subject, c.cid, c.timestamp FROM comments c INNER JOIN node n ON n.nid = c.nid WHERE n.status = 1 AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0, 15;

[...]

+-------+------------------------------+--------+------------+
15 rows in set (24.55 sec)

Mirror:

FreeBSD 6.1-RELEASE, AMD Opteron, 1 GB RAM szerver (no X, majdnem 0 load mellett):

mysql> SELECT c.nid, c.subject, c.cid, c.timestamp FROM comments c INNER JOIN node n ON n.nid = c.nid WHERE n.status = 1 AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0, 15;

[...]

+-------+-----------------------------+--------+------------+
15 rows in set (6.41 sec)

Alderaan (én notebookom):

Ubuntu Linux, Intel P4, 768 MB RAM (notebook, full X, kb. 1.00-es load mellett)

mysql> SELECT c.nid, c.subject, c.cid, c.timestamp FROM comments c INNER JOIN node n ON n.nid = c.nid WHERE n.status = 1 AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0, 15;

[...]

+-------+------------------------------+--------+------------+
15 rows in set (0.09 sec)

Azt tudtam már eddig is, hogy FreeBSD nem egy MySQL bajnok, de ha ez így van, akkor - és ez nem vicc - az új gépre nem FreeBSD, hanem Linux fog kerülni.

--
trey @ gépház