PDA

Zobacz pełną wersję : Obciążenie bazy danych i dziwne zapytania



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

robak142
24-04-2013, 01:02
Załączam podejrzane zapytania wg typów. Lepiej to widać. Jak widać ilość obłędna. Mam 31 użytkowników na zapleczu i jak widać, tyleż podejrzanych zapytań do powiązanych tabel. Co ciekawe w panelu admina i analizie systemu wygląda to identycznie jak na froncie. Do tego po zmianie templatki na jedną z domyślnych joomla to samo. Wnioskuję z tego, że jeżeli to naruszenie, to nie na poziomie szablonu. Jak to ugryźć? Gdzie tego szukać i jak? Joomla aktualna, brak lewych dodatków, do tego małe prawdopodobieństwo włamu, choć...

31 × 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
31 × SELECT `g`.`id`,`g`.`title`
FROM `test_usergroups` AS g
INNER JOIN `test_user_usergroup_map` AS m
ON m.group_id = g.id
31 × SELECT a.rules
FROM test_assets AS a
31 × SELECT *
FROM `test_users`
31 × SELECT id
FROM test_assets

PeFik
24-04-2013, 01:53
Zatem ... czas najwyższy zacząć używać np. Akeeba Admin Tools lub RSFirewall lub inne.

Jola
24-04-2013, 03:51
Zainstalowałeś dodatek Spadaj?

robak142
24-04-2013, 10:14
Dodatek spadaj zainstalowany

Jola
24-04-2013, 15:02
Rzeczywiście dodatek spadaj generuje tego typu zapytania. Dzięki Twoim uwagom widzę, że systemowa funkcja Joomla do sprawdzania przynależności do grup generuje niepotrzebną ilość zapytań do bazy. Zmodyfikuję kod, tak żeby nie obciążał bazy i działał szybciej. O zmianach poinformuję.
Pozdrawiam

robak142
24-04-2013, 16:05
Twój post wraca mi życie. Już dobę nad tym siedzę i miałem wrażenie, że to naruszenie. Czekamy na zmiany.

Jola
24-04-2013, 17:54
Wrzuciłam nową wersję do plikowni (http://pliki.joomla.pl/index.php?option=com_sobi2&sobi2Task=sobi2Details&sobi2Id=830&Itemid=17).

Jdwind
24-04-2013, 18:12
Jolu, czy poprawa dotyczy także wersji dla Joomla 1.5, czy tam bez zmian?

Jola
24-04-2013, 18:29
Wersja 1.5 nie wymaga poprawek bo nigdy nie generowała dodatkowych pytań do bazy o uprawnienia - tak było tylko w wersji 2.5 - więc nie ma co poprawiać :)

Jdwind
24-04-2013, 19:59
Dzięki za informację i oczywiście poprawkę :).