PDA

Zobacz pełną wersję : Optymalizacja bazy danych



sebols
12-01-2010, 12:41
Witam. Dostałem e-mail, który mnie nie pokoi:
Witamy.

System monitoringu usług wykrył nadmierne obciążenie bazy danych
funkcjonujących w ramach Państwa konta hostingowego.

Załączamy raport z analizy zapytań MySQL w bazie danych.

Opis raportu:
"Zapytania długo wykonywane" - zapytania z czasem wykonania powyżej 5
sekund, od dnia 2010-01-09

Nadmierne obciążenie baz danych niekorzystnie wpływa na jakość usług
świadczonych przez Az.pl oraz dostępność usług w ramach
Państwa konta hostingowego.

Prosimy o wykonanie optymalizacji baz danych, w tym założenie indeksów w
bazach danych w celu poprawy dostępności usług.

Teraz mnie ciekawi co powinienem zrobić. Z bazą danych chyba sobie
nie poradzę,a czy zmiana dostawcy hostingowego coś zmieni?nie na długo.Jakieś pomysły?
A może jednak łatwo jest bazie dać małego kopniaka?

Raveren
12-01-2010, 14:02
Sprawdź, czy masz dostęp do phpMyadmin. Jeśli tak, to w prosty sposób zrobisz optymalizację zaznaczając wszystkie tabele bazy i wybierając opcję optymalizuj. Jest też taki komponent do Joomla 1.5.x o nazwie com_joomMyAdmin15_3_2_5 (http://joomlacode.org/gf/project/joommyadmin/frs/ )

hesar
12-01-2010, 14:19
lol
wiesz o czym pisze firma hostingowa a co robi polecenie OPTIMIZE ??
najwyrazniej jednak nie :/
http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

niestety joomla ma swoje wady a jedna z nich jest raczej kiepsko skonstruowany system wykonywania zapytan do bazy, przy duzych serwisach serwery mysql nie wyrabiaja ze wszystkimi joinami w selectach i mocno obciazaja serwer
temat byl juz wiele razy poruszany na tym forum i tak naprawde jedynym sensownym rozwiazaniem byla zmiana hostingu (albo na dedyka albo na tekigo co si nie bedzie czepial)
no chyba ze masz do wydania pare tysiecy zlotych to mozna sie pobawic w popracowanie nad struktura bazy danych ;P ;P

sebols
12-01-2010, 14:40
Dzięki za dotychczasowe odpowiedzi. Może spróbuje w tym phpAdminie, oby nic się nie popsuło, moja joomla ma ponad 1500 artykułów i troszke jest rozbudowana, codziennie dochodzą nowe. Jeszcze przysłali coś takiego:


Zapytania długo wykonywane

UPDATE `jos_session` SET `time`='S',`userid`='S',`usertype`='S',`username`= 'S',`gid`='S',`guest`='S',`client_id`='S',`data`=' S' WHERE session_id='S'
Zapytanie wykonane 39 razy na bazie s77676sg_jo151, wartosci średnie: query time: 9.31s, lock time 0.03s, rows sent 0.0, rows examined 0.0
DELETE FROM jos_session WHERE ( time < 'S' )
Zapytanie wykonane 6 razy na bazie s77676sg_jo151, wartosci średnie: query time: 10.67s, lock time 0.17s, rows sent 0.0, rows examined 0.0
SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.attribs, a.hits, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS('S', a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS("S", cc.id, cc.alias) ELSE cc.id END as catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, cc.title AS category, g.name AS groups, u.email as author_email FROM jos_content AS a INNER JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = a.sectionid LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE a.access <= N AND s.id = N AND s.access <= N AND cc.access <= N AND s.published = N AND cc.published = N AND a.state = N AND ( publish_up = 'S' OR publish_up <= 'S' ) AND ( publish_down = 'S' OR publish_down >= 'S' ) ORDER BY a.created DESC LIMIT N, N
Zapytanie wykonane 5 razy na bazie s77676sg_jo151, wartosci średnie: query time: 17.00s, lock time 2.20s, rows sent 10.0, rows examined 183.4
SELECT * FROM jos_session WHERE session_id = 'S'
Zapytanie wykonane 5 razy na bazie s77676sg_jo151, wartosci średnie: query time: 13.20s, lock time 2.00s, rows sent 1.0, rows examined 1.0
SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.attribs, a.urls, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS('S', a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS("S", cc.id, cc.alias) ELSE cc.id END as catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups, u.email as author_email, cc.title AS category, s.title AS section, s.ordering AS s_ordering, cc.ordering AS cc_ordering, a.ordering AS a_ordering, f.ordering AS f_ordering FROM jos_content AS a INNER JOIN jos_content_frontpage AS f ON f.content_id = a.id LEFT JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = a.sectionid LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE N AND a.access <= N AND a.state = N AND (( cc.published = N AND s.published = N ) OR ( a.catid = N AND a.sectionid = N ) ) AND ( a.publish_up = 'S' OR a.publish_up <= 'S' ) AND ( a.publish_down = 'S' OR a.publish_down >= 'S' ) ORDER BY f.ordering
Zapytanie wykonane 3 razy na bazie s77676sg_jo151, wartosci średnie: query time: 7.33s, lock time 1.00s, rows sent 263.0, rows examined 1 853.0
INSERT INTO `jos_session` ( `session_id`,`time`,`username`,`gid`,`guest`,`clie nt_id` ) VALUES ( 'S','S','S','S','S','S' )
Zapytanie wykonane 2 razy na bazie s77676sg_jo151, wartosci średnie: query time: 13.00s, lock time 0.00s, rows sent 0.0, rows examined 0.0
SELECT a.*, COUNT( b.id ) AS numitems, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS('S', a.id, a.alias) ELSE a.id END as slug FROM jos_categories AS a LEFT JOIN jos_content AS b ON b.catid = a.id AND b.state = N AND ( b.publish_up = 'S' OR b.publish_up <= 'S' ) AND ( b.publish_down = 'S' OR b.publish_down >= 'S' ) AND b.access <= N WHERE a.section = N AND a.published = N AND a.access <= N GROUP BY a.id HAVING numitems > N ORDER BY a.ordering
Zapytanie wykonane 2 razy na bazie s77676sg_jo151, wartosci średnie: query time: 8.50s, lock time 0.00s, rows sent 1.0, rows examined 133.5
SELECT guest, usertype, client_id FROM jos_session WHERE client_id = N
Zapytanie wykonane 2 razy na bazie s77676sg_jo151, wartosci średnie: query time: 9.00s, lock time 0.00s, rows sent 21.5, rows examined 22.5
SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.attribs, a.hits, a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS('S', a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS("S", cc.id, cc.alias) ELSE cc.id END as catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, cc.title AS category, g.name AS groups, u.email as author_email FROM jos_content AS a INNER JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = a.sectionid LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE a.access <= N AND s.id = N AND s.access <= N AND cc.access <= N AND s.published = N AND cc.published = N AND a.state = N AND ( publish_up = 'S' OR publish_up <= 'S' ) AND ( publish_down = 'S' OR publish_down >= 'S' ) ORDER BY a.created DESC
Zapytanie wykonane 2 razy na bazie s77676sg_jo151, wartosci średnie: query time: 23.00s, lock time 1.00s, rows sent 114.0, rows examined 571.0
SELECT *, RAND() AS ordering FROM jos_banner WHERE showBanner = N AND (imptotal = N OR impmade < imptotal) AND cid = N AND catid = N ORDER BY sticky DESC, ordering LIMIT N, N
Zapytanie wykonane 2 razy na bazie s77676sg_jo151, wartosci średnie: query time: 19.00s, lock time 0.50s, rows sent 1.0, rows examined 3.5
SELECT comment AS text , date AS created , 'S' AS browsernav , 'S' AS section , 'S' AS href , id , object_id , object_group FROM jos_jcomments WHERE published='S' AND ((LOWER(name) LIKE 'S' OR LOWER(comment) LIKE 'S') AND (LOWER(name) LIKE 'S' OR LOWER(comment) LIKE 'S')) ORDER BY object_id, date DESC LIMIT N, N
Zapytanie wykonane 1 razy na bazie s77676sg_jo151, wartosci średnie: query time: 5.00s, lock time 0.00s, rows sent 0.0, rows examined 23.0
SELECT a.id, a.sectionid, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS("S", a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS("S", cc.id, cc.alias) ELSE cc.id END as catslug FROM jos_content AS a LEFT JOIN jos_categories AS cc ON cc.id = a.catid WHERE a.id = N
Zapytanie wykonane 1 razy na bazie s77676sg_jo151, wartosci średnie: query time: 7.00s, lock time 0.00s, rows sent 1.0, rows examined 1.0
UPDATE jos_content SET hits = ( hits + N ) WHERE id='S'
Zapytanie wykonane 1 razy na bazie s77676sg_jo151, wartosci średnie: query time: 28.00s, lock time 0.00s, rows sent 0.0, rows examined 0.0
INSERT INTO jos_vvisitcounter (id, tm, ip) VALUES ('S', 'S', 'S')
Zapytanie wykonane 1 razy na bazie s77676sg_jo151, wartosci średnie: query time: 17.00s, lock time 0.00s, rows sent 0.0, rows examined 0.0
SHOW TABLES LIKE 'S'

Raveren
12-01-2010, 14:59
Zobacz 2 ostatnie zapytanie (chyba najdłużej wykonywane) Może zrezygnuj ze statystyk, jeśli nie są bezwzględnie konieczne.