Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Na bazach danych codziennie rano wykonywane jest polecenie mysqlcheck. Polecenie to wykonywane jest na kolejnych DB dopóki nie nastanie godzina 7 rano czyli "czas produkcyjny". Niestety, kiedy skrypt o godzinie 6.45 napotka na dużą (>10GB) BD to taką też zacznie przetwarzać, a wykonanie polecenia może się zakończyć grubo po 8. W przypadku, kiedy działanie polecenia mysqlcheck przedłuża się, chciałbym je zatrzymać. Niestety nie wiem jak to zrobić, tak więc
[b]moje pytanie brzmi:[/b]
Jak zatrzymać polecenie mysqlcheck ze skutkiem natychmiastowym (albo prawie natychmiastowym).
Offline
Nie rozwali, baza jest porządkowana w ten sposób, że z aktualnie istniejącej BD dane są tylko odczytywane, a obok robi się docelowa kopia, rzecz w tym, że ubicie skryptu zatrzymuje skrypt, natomiast nie zatrzymuje polecenia bazodanowego.
Offline
zawsze można utłuc serwer mysql.
btw. po kiego grzyba robić codziennie mysqlcheck? jakoś mi to pachnie amatorszczyzną, ale mogę się mylić.
Offline
Nie wiem po co, nie wnikam, nie chcę też się rozpisywać, dla ścisłości polecenie nie jest wykonywane na wszystkich bazach codziennie, a jedynie skrypt się uruchamia codziennie, mysqlcheck jest wykonywane jedynie dla tych z odpowiednio dużą wartością -free i -size, w każdym razie nie w tym rzecz, pytałem o możliwość ubicia tej czynności, a nie zasadności jej użycia.
Offline
Ja bym przeniósł polecenie na godziny najmniejszego ruchu, i odpalał kilka poleceń, dając do sprawdzenia jedną bazę (albo pojedyncze tabele, jeśli są takie olbrzymie), a nie wszystkie na raz.
Poza tym po to użytkownicy bazy mają polecenia REPAIR i OPTIMIZE w bazie, żeby ten mysqlchceck nie był niezbędny codziennie.
Ostatnio edytowany przez Jacekalex (2016-07-11 20:37:10)
Offline
Pytanie kontrolne.
Jeśli:
a) znasz wielkość bazy
b) potrafisz na tej podstawie oszacować czas wykonania polecenia mysqlcheck
c) wiesz która jest godzina
d) wiesz o której masz skończyć
to po co wykonujesz polecenie o którym z góry wiesz, że nie zdąży się wykonać?
Zacznij leczyć przyczyny a nie objawy.
Przy okazji - wyrażaj się precyzyjniej. W pierwszym poście napisałeś że mysqlcheck wykonywany jest codziennie, w następnym że jego wykonanie jest uzależnione od jakichś tam parametrów bazy. Zdecyduj się która wersja jest prawdziwa.
Ostatnio edytowany przez ethanak (2016-07-12 02:23:17)
Offline
1. Jest wykonywany codziennie, ale na wybranych BD.
2. Polecenie już rusza w godzinach najmniejszego ruchu zaraz po kopii bezpieczeństwa.
3. Nie zawsze wiem czy się wykona w czasie czy nie, szacuję na podstawie wielkości BD i dostępnego czasu, czasami serwer wykonuje jakieś dodatkowe czynności, co go spowalnia, chciałbym używać stopowania polecenia jako zaworu bezpieczeństwa, tak w razie w.
Offline
Dlaczego nie obniżysz priorytetu skryptu realizującego mysqlcheck? Nie będzie obciążało systemu i wykona się do końca, chociaż wiadomo dłużej potrwa.
Offline
[quote=Zbooj]Dlaczego nie obniżysz priorytetu skryptu realizującego mysqlcheck? Nie będzie obciążało systemu i wykona się do końca, chociaż wiadomo dłużej potrwa.[/quote]
Do takich rzeczy trzeba znać albo polecenia [b]ionice[/b], [b]nice[/b], [b]renice[/b] i [b]cpulimit[/b],
albo cały mechanizm [b]cgroup[/b], a to już mały horror. ;)
Nie można za dużo wymagać...
Ostatnio edytowany przez Jacekalex (2016-07-12 18:14:14)
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00142 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.141.201.95' WHERE u.id=1 |
0.00068 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.141.201.95', 1732756103) |
0.00041 | SELECT * FROM punbb_online WHERE logged<1732755803 |
0.00055 | SELECT topic_id FROM punbb_posts WHERE id=303193 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=28778 ORDER BY posted |
0.00054 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28778 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00150 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28778 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28778 |
Total query time: 0.00615 s |