My favorites | Sign in
Logo
          
New issue | Search
for
| Advanced search | Search tips
Issue 1144: Review Board intermittently hangs due to slow DB queries
1 person starred this issue and may be notified of changes. Back to list
Status:  Fixed
Owner:  chipx86
Closed:  Jun 2009
Type-Defect
Priority-Furious
Milestone-Release1.0
Component-Reviews


Sign in to add a comment
 
Reported by psc...@vmware.com, Jun 01, 2009
We're running Review Board 1.0rc2. We've been seeing a number of
intermittent hangs. We're running apache, and at the time of the hangs
there's a large backup of processes which appear blocked, and which clear
out very quickly once they are able to start processing again.

We suspect that requests are blocked on the DB. We turned on slow query
logging, and identified a couple queries that are taking a long time.
Examples of these queries follow:


# Time: 090529 17:46:26
# User@Host: reviewboard[reviewboard] @ localhost []
# Query_time: 65  Lock_time: 0  Rows_sent: 50  Rows_examined: 990179
SELECT DISTINCT (
                SELECT COUNT(*) FROM reviews_review
                  WHERE reviews_review.review_request_id =
                        reviews_reviewrequest.id
                    AND reviews_review.public
                    AND reviews_review.ship_it
                    AND reviews_review.base_reply_to_id is NULL
            ) AS `shipit_count`, (
                SELECT reviews_review.timestamp FROM reviews_review
                  WHERE reviews_review.review_request_id =
                        reviews_reviewrequest.id
                    AND reviews_review.public
                  ORDER BY reviews_review.timestamp DESC
                  LIMIT 1
            ) AS `last_review_timestamp`, (
                SELECT
                  CASE
                    WHEN COUNT(reviews_review.timestamp) > 0
                         AND MAX(reviews_review.timestamp) >
                             reviews_reviewrequest.last_updated
                    THEN MAX(reviews_review.timestamp)
                    ELSE reviews_reviewrequest.last_updated
                  END
                  FROM reviews_review
                  WHERE reviews_review.review_request_id=
                        reviews_reviewrequest.id
                    AND reviews_review.public
                  ORDER BY (reviews_review.timestamp) DESC
                  LIMIT 1
            ) AS `last_activity_timestamp`, `reviews_reviewrequest`.`id`,
`reviews_reviewrequest`.`submitter_id`,`reviews_reviewrequest`.`time_added`, `reviews_reviewrequest`.`last_updated`,
`reviews_reviewrequest`.`status`, `reviews_reviewrequest`.`public`,
`reviews_reviewrequest`.`changenum`,
`reviews_reviewrequest`.`repository_id`,
`reviews_reviewrequest`.`email_message_id`,
`reviews_reviewrequest`.`time_emailed`, `reviews_reviewrequest`.`summary`,
`reviews_reviewrequest`.`description`,
`reviews_reviewrequest`.`testing_done`,
`reviews_reviewrequest`.`bugs_closed`,
`reviews_reviewrequest`.`diffset_history_id`,
`reviews_reviewrequest`.`branch`, `auth_user`.`id`, `auth_user`.`username`,
`auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`,
`auth_user`.`password`, `auth_user`.`is_staff`,`auth_user`.`is_active`,
`auth_user`.`is_superuser`, `auth_user`.`last_login`,
`auth_user`.`date_joined`, `scmtools_repository`.`id`,
`scmtools_repository`.`name`, `scmtools_repository`.`path`,
`scmtools_repository`.`mirror_path`, `scmtools_repository`.`username`,
`scmtools_repository`.`password`, `scmtools_repository`.`tool_id`,
`scmtools_repository`.`bug_tracker`, `scmtools_repository`.`encoding`,
`diffviewer_diffsethistory`.`id`, `diffviewer_diffsethistory`.`name`,
`diffviewer_diffsethistory`.`timestamp` FROM `reviews_reviewrequest` INNER
JOIN `auth_user` ON (`reviews_reviewrequest`.`submitter_id` =
`auth_user`.`id`) INNER JOIN `scmtools_repository` ON
(`reviews_reviewrequest`.`repository_id` = `scmtools_repository`.`id`)
INNER JOIN `diffviewer_diffsethistory` ON
(`reviews_reviewrequest`.`diffset_history_id` =
`diffviewer_diffsethistory`.`id`) WHERE (`reviews_reviewrequest`.`public` =
1  AND (`reviews_reviewrequest`.`status` = 'P'  OR
`reviews_reviewrequest`.`status` = 'S' )) ORDER BY
`last_activity_timestamp` DESC LIMIT 50;



# Time: 090529 17:48:36
# User@Host: reviewboard[reviewboard] @ localhost []
# Query_time: 62  Lock_time: 0  Rows_sent: 50  Rows_examined: 990323
SELECT DISTINCT (
                SELECT COUNT(*) FROM reviews_review
                  WHERE reviews_review.review_request_id =
                        reviews_reviewrequest.id
                    AND reviews_review.public
                    AND reviews_review.ship_it
                    AND reviews_review.base_reply_to_id is NULL
            ) AS `shipit_count`, (
                SELECT reviews_review.timestamp FROM reviews_review
                  WHERE reviews_review.review_request_id =
                        reviews_reviewrequest.id
                    AND reviews_review.public
                  ORDER BY reviews_review.timestamp DESC
                  LIMIT 1
            ) AS `last_review_timestamp`, (
                SELECT
                  CASE
                    WHEN COUNT(reviews_review.timestamp) > 0
                         AND MAX(reviews_review.timestamp) >
                             reviews_reviewrequest.last_updated
                    THEN MAX(reviews_review.timestamp)
                    ELSE reviews_reviewrequest.last_updated
                  END
                  FROM reviews_review
                  WHERE reviews_review.review_request_id=
                        reviews_reviewrequest.id
                    AND reviews_review.public
                  ORDER BY (reviews_review.timestamp) DESC
                  LIMIT 1
            ) AS `last_activity_timestamp`, (
                    SELECT COUNT(*)
                      FROM reviews_review, accounts_reviewrequestvisit
                      WHERE reviews_review.public
                        AND reviews_review.review_request_id =
                            reviews_reviewrequest.id
                        AND accounts_reviewrequestvisit.review_request_id =
                            reviews_reviewrequest.id
                        AND accounts_reviewrequestvisit.user_id = 1519
                        AND reviews_review.timestamp >
                            accounts_reviewrequestvisit.timestamp
                        AND reviews_review.user_id != 1519
                ) AS `new_review_count`, `reviews_reviewrequest`.`id`,
`reviews_reviewrequest`.`submitter_id`,
`reviews_reviewrequest`.`time_added`,
`reviews_reviewrequest`.`last_updated`, `reviews_reviewrequest`.`status`,
`reviews_reviewrequest`.`public`, `reviews_reviewrequest`.`changenum`,
`reviews_reviewrequest`.`repository_id`,
`reviews_reviewrequest`.`email_message_id`,
`reviews_reviewrequest`.`time_emailed`, `reviews_reviewrequest`.`summary`,
`reviews_reviewrequest`.`description`,
`reviews_reviewrequest`.`testing_done`,
`reviews_reviewrequest`.`bugs_closed`,
`reviews_reviewrequest`.`diffset_history_id`,
`reviews_reviewrequest`.`branch`, `auth_user`.`id`, `auth_user`.`username`,
`auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`,
`auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`,
`auth_user`.`is_superuser`, `auth_user`.`last_login`,
`auth_user`.`date_joined`, `scmtools_repository`.`id`,
`scmtools_repository`.`name`, `scmtools_repository`.`path`,
`scmtools_repository`.`mirror_path`, `scmtools_repository`.`username`,
`scmtools_repository`.`password`, `scmtools_repository`.`tool_id`,
`scmtools_repository`.`bug_tracker`, `scmtools_repository`.`encoding`,
`diffviewer_diffsethistory`.`id`, `diffviewer_diffsethistory`.`name`,
`diffviewer_diffsethistory`.`timestamp` FROM `reviews_reviewrequest` INNER
JOIN `auth_user` ON (`reviews_reviewrequest`.`submitter_id` =
`auth_user`.`id`) INNER JOIN `scmtools_repository` ON
(`reviews_reviewrequest`.`repository_id` = `scmtools_repository`.`id`)
INNER JOIN `diffviewer_diffsethistory` ON
(`reviews_reviewrequest`.`diffset_history_id` =
`diffviewer_diffsethistory`.`id`) WHERE ((`reviews_reviewrequest`.`public`
= 1  OR `reviews_reviewrequest`.`submitter_id` = 1519 ) AND
(`reviews_reviewrequest`.`status` = 'P'  OR
`reviews_reviewrequest`.`status` = 'S' )) ORDER BY
`last_activity_timestamp` DESC LIMIT 50;


# Time: 090529 18:06:19
# User@Host: reviewboard[reviewboard] @ localhost []
# Query_time: 31  Lock_time: 0  Rows_sent: 50  Rows_examined: 576697
select distinct (SELECT
                  CASE
                    WHEN COUNT(reviews_review.timestamp) > 0
                         AND MAX(reviews_review.timestamp) >
                             reviews_reviewrequest.last_updated
                    THEN MAX(reviews_review.timestamp)
                    ELSE reviews_reviewrequest.last_updated
                  END
                  FROM reviews_review
                  WHERE reviews_review.review_request_id=
                        reviews_reviewrequest.id
                    AND reviews_review.public
                  ORDER BY (reviews_review.timestamp) DESC
                  LIMIT 1
            ) AS `last_activity_timestamp`, `reviews_reviewrequest`.`id`,
`reviews_reviewrequest`.`submitter_id`,
`reviews_reviewrequest`.`time_added`,
`reviews_reviewrequest`.`last_updated`, `reviews_reviewrequest`.`status`,
`reviews_reviewrequest`.`public`, `reviews_reviewrequest`.`changenum`,
`reviews_reviewrequest`.`repository_id`,
`reviews_reviewrequest`.`email_message_id`,
`reviews_reviewrequest`.`time_emailed`, `reviews_reviewrequest`.`summary`,
`reviews_reviewrequest`.`description`,
`reviews_reviewrequest`.`testing_done`,
`reviews_reviewrequest`.`bugs_closed`,
`reviews_reviewrequest`.`diffset_history_id`,
`reviews_reviewrequest`.`branch`, `auth_user`.`id`, `auth_user`.`username`,
`auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`,
`auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`,
`auth_user`.`is_superuser`, `auth_user`.`last_login`,
`auth_user`.`date_joined`, `scmtools_repository`.`id`,
`scmtools_repository`.`name`, `scmtools_repository`.`path`,
`scmtools_repository`.`mirror_path`, `scmtools_repository`.`username`,
`scmtools_repository`.`password`, `scmtools_repository`.`tool_id`,
`scmtools_repository`.`bug_tracker`, `scmtools_repository`.`encoding`,
`diffviewer_diffsethistory`.`id`, `diffviewer_diffsethistory`.`name`,
`diffviewer_diffsethistory`.`timestamp` FROM `reviews_reviewrequest` INNER
JOIN `auth_user` ON (`reviews_reviewrequest`.`submitter_id` =
`auth_user`.`id`) INNER JOIN `scmtools_repository` ON
(`reviews_reviewrequest`.`repository_id` = `scmtools_repository`.`id`)
INNER JOIN `diffviewer_diffsethistory` ON
(`reviews_reviewrequest`.`diffset_history_id` =
`diffviewer_diffsethistory`.`id`) WHERE (`reviews_reviewrequest`.`public` =
1  AND (`reviews_reviewrequest`.`status` = 'P'  OR
`reviews_reviewrequest`.`status` = 'S' )) ORDER BY
`last_activity_timestamp` DESC LIMIT 50;
Comment 1 by chipx86, Jun 02, 2009
(No comment was entered for this change.)
Status: Started
Owner: chipx86
Labels: -Priority-Medium Priority-Furious Milestone-Release1.0 Component-Reviews
Comment 2 by chipx86, Jun 02, 2009
Fixed in r1993.
Status: Fixed
Sign in to add a comment

Powered by Google Project Hosting