[development] Database queries on drupal.org

Gerhard Killesreiter gerhard at killesreiter.de
Wed Jul 26 11:45:27 UTC 2006


Hi there!

Since last night, I let the devel module collect query statistics on 
drupal.org. We now can see which queries are run very often and which 
are just slow.

Here are the first queries by accumulated time.
The first column is accumulated time, the second average time/query, the 
third the number of times the query was run, the fourth the function 
which calls the query, the last the query itself:

927.011	0.005	192603	cache_get	SELECT data, created, headers, expire 
FROM cache WHERE cid = S
905.582	0.001	973355	drupal_lookup_path	SELECT dst FROM url_alias WHERE 
src = S
883.059	0.098	8986	theme_forum_topic_navigation	SELECT n.nid, n.title, 
n.sticky, l.comment_count, l.last_comment_timestamp FROM node n INNER 
JOIN node_comment_statistics l ON n.nid = l.nid INNER JOIN term_node r 
ON n.nid = r.nid AND r.tid = D
388.902	0.014	28330	node_load	SELECT n.nid, n.vid, n.type, n.status, 
n.created, n.changed, n.comment, n.promote, n.moderate, n.sticky, 
r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, 
r.format, u.uid, u.name, u.picture, u.data FROM node n INNER JOIN users 
u ON u.uid = n.uid INNER JOIN node_revisions r ON r.vid = n.vid WHERE 
n.nid = D
186.896	2.967	63	pager_query	SELECT DISTINCT(n.nid), n.title, n.type, 
n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, 
l.comment_count FROM node n INNER JOIN users u ON n.uid = u.uid INNER 
JOIN node_comment_statistics l ON n.nid = l.nid WHERE n.status = D
180.948	0.007	26472	cache_set	INSERT INTO cache (cid, data, created, 
expire, headers) VALUES (S)
157.065	0.022	6983	node_load	SELECT n.nid, n.vid, n.type, n.status, 
n.created, n.changed, n.comment, n.promote, n.moderate, n.sticky, 
r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, 
r.format, u.uid, u.name, u.picture, u.data FROM node n INNER JOIN users 
u ON u.uid = n.uid INNER JOIN node_revisions r ON r.vid = n.vid WHERE 
n.nid = S

I am not sure why there are two node_load queries which look identical 
otherwise. Probably these fields need to be merged.

Here are the first few queries by average query time, columns as above.

155.447	3.048	51	pager_query	SELECT DISTINCT(n.nid), n.title, n.type, 
n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, 
l.comment_count FROM node n INNER JOIN node_comment_statistics l ON 
n.nid = l.nid INNER JOIN users u ON n.uid = u.uid LEFT JOIN comments c 
ON n.nid = c.nid AND (c.status = D
186.896	2.967	63	pager_query	SELECT DISTINCT(n.nid), n.title, n.type, 
n.changed, n.uid, u.name, l.last_comment_timestamp AS last_post, 
l.comment_count FROM node n INNER JOIN users u ON n.uid = u.uid INNER 
JOIN node_comment_statistics l ON n.nid = l.nid WHERE n.status = D
94.058	1.844	51	pager_query	SELECT COUNT(DISTINCT(n.nid)) FROM node n 
LEFT JOIN comments c ON n.nid = c.nid AND (c.status = D
109.691	1.155	95	pager_query	SELECT DISTINCT m.*, r.*, u.name, u.uid 
FROM cvs_messages m INNER JOIN cvs_repositories r ON m.rid = r.rid INNER 
JOIN users u ON m.uid = u.uid ORDER BY m.created DESC LIMIT D
1.03	1.03	1	pager_query	SELECT a.aid, a.timestamp, a.url, a.uid, u.name 
FROM accesslog a LEFT JOIN users u ON a.uid = u.uid WHERE a.path LIKE S 
ORDER BY a.timestamp DESC LIMIT D
2.536	0.845	3	comment_edit	SELECT c.*, u.uid, u.name AS registered_name, 
u.data FROM comments c INNER JOIN users u ON c.uid = u.uid WHERE c.cid = D
0.614	0.614	1	eval	select message, count(message) as count from watchdog 
where type = S and uid = D
0.434	0.434	1	aggregator_page_sources	SELECT f.fid, f.title, 
f.description, f.image, MAX(i.timestamp) AS last FROM aggregator_feed f 
LEFT JOIN aggregator_item i ON f.fid = i.fid GROUP BY f.fid, f.title, 
f.description, f.image ORDER BY last DESC, f.title
0.429	0.429	1	pager_query	SELECT q.qid, q.query, q.function, t.*, 
COUNT(t.qid) AS count, SUM(t.time) AS total_time, AVG(t.time) AS 
average, STDDEV(t.time) AS stddev FROM devel_queries q INNER JOIN 
devel_times t ON q.qid = t.qid GROUP BY t.qid ORDER BY total_time DESC 
LIMIT D

The queries have been collected on every tenth page view, so you should 
multiply the count and total time values by ten for real values.

Cheers,
	Gerhard


More information about the development mailing list