robak142
23-04-2013, 23:16
Witam,
Przy pracy nad nową witryną zauważyłem nagłe obciążenie serwera. Po żmudnym sprawdzaniu doszedłem do że, ilość zapytań do bazy danych wzrosła kilkukrotnie. Ponieważ posiadam kopię, która niewiele różni się od oryginału, sprawdziłem, korzystając z analizy systemu ilość zapytań do mysql'a. Różnica jest kilkukrotna.
Zauważyłem dziwną sekwencje zapytań na istotnych tabelach, która powtarza się wielokrotnie i mam wrażenie, że to jest źródło problemu. Zastanawiam się, czy to coś podejrzanego ? Poniżej podaje te zapytania, ale dodam jeszcze, że Jommla 2.5.9, oczywiście prefiksy zmieniłem.
Jakieś pomysły? Czy powinienem się zaniepokoić?
select id, password
from test_users u join test_user_usergroup_map m
on u.id=m.user_id
select id, password
from test_users u join test_user_usergroup_map m
on u.id=m.user_id
SHOW FULL COLUMNS
FROM `test_users`
SELECT *
FROM `test_users`
WHERE `id` = 54
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 54
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 54
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SHOW FULL COLUMNS
FROM `test_assets`
SELECT id
FROM test_assets
WHERE parent_id = 0
SELECT b.rules
FROM test_assets AS a
LEFT JOIN test_assets AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE (a.id = 1 OR a.parent_id=0)
GROUP BY b.id, b.rules, b.lft
ORDER BY b.lft
i potem kolejne
SELECT *
FROM `test_users`
WHERE `id` = 863
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 863
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 863
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SELECT *
FROM `test_users`
WHERE `id` = 864
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 864
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 864
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SELECT id
FROM test_assets
WHERE parent_id = 0
Przy pracy nad nową witryną zauważyłem nagłe obciążenie serwera. Po żmudnym sprawdzaniu doszedłem do że, ilość zapytań do bazy danych wzrosła kilkukrotnie. Ponieważ posiadam kopię, która niewiele różni się od oryginału, sprawdziłem, korzystając z analizy systemu ilość zapytań do mysql'a. Różnica jest kilkukrotna.
Zauważyłem dziwną sekwencje zapytań na istotnych tabelach, która powtarza się wielokrotnie i mam wrażenie, że to jest źródło problemu. Zastanawiam się, czy to coś podejrzanego ? Poniżej podaje te zapytania, ale dodam jeszcze, że Jommla 2.5.9, oczywiście prefiksy zmieniłem.
Jakieś pomysły? Czy powinienem się zaniepokoić?
select id, password
from test_users u join test_user_usergroup_map m
on u.id=m.user_id
select id, password
from test_users u join test_user_usergroup_map m
on u.id=m.user_id
SHOW FULL COLUMNS
FROM `test_users`
SELECT *
FROM `test_users`
WHERE `id` = 54
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 54
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 54
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SHOW FULL COLUMNS
FROM `test_assets`
SELECT id
FROM test_assets
WHERE parent_id = 0
SELECT b.rules
FROM test_assets AS a
LEFT JOIN test_assets AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE (a.id = 1 OR a.parent_id=0)
GROUP BY b.id, b.rules, b.lft
ORDER BY b.lft
i potem kolejne
SELECT *
FROM `test_users`
WHERE `id` = 863
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 863
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 863
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SELECT *
FROM `test_users`
WHERE `id` = 864
SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
WHERE `m`.`user_id` = 864
SELECT b.id
FROM test_user_usergroup_map AS map
LEFT JOIN test_usergroups AS a
ON a.id = map.group_id
LEFT JOIN test_usergroups AS b
ON b.lft <= a.lft
AND b.rgt >= a.rgt
WHERE map.user_id = 864
SELECT a.rules
FROM test_assets AS a
WHERE (a.id = 1)
GROUP BY a.id, a.rules, a.lft
SELECT id
FROM test_assets
WHERE parent_id = 0