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
moje pytanie brzmi:
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
Zbooj napisał(-a):
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.
Do takich rzeczy trzeba znać albo polecenia ionice, nice, renice i cpulimit,
albo cały mechanizm cgroup, a to już mały horror. ;)
Nie można za dużo wymagać...
Ostatnio edytowany przez Jacekalex (2016-07-12 18:14:14)
Offline