Jak chronić bazę danych za pomocą krytycznych danych przed arbitralnością powolnych zapytań?

Autor:penny shima glanz

Sytuacja: istnieje serwer bojowy, jest na nim serwer WWW i MySQL. Po pierwsze, skrypty PHP działające pod Apache na tym serwerze wchodzą w interakcję z mięśniami, a po drugie zdalni użytkownicy za pośrednictwem TCP. Działają z tą samą bazą. Jednak wydajność pakietu "local apache plus muskl" jest krytyczna, a "użytkownicy zdalni plus muskl" nie jest.

"Usunięty" użytkownik uruchamia niezgrabne zapytanie - na przykład wybierz REGEXP dla niezindeksowanej kolumny z 20 milionów wierszy. W tym samym czasie, w ciągu 3-5 minut, wszystkie inne żądania do tej bazy danych, które zwykle latają, spowalniają. W rezultacie krytyczna część internetowa przestaje odpowiadać w akceptowalnym tempie. Jak sprawić, aby zdalni użytkownicy mogli wysyłać żądania gówno bez szkody dla funkcjonowania lokalnych połączeń z bazą danych? "Lokalka" i "piloty" łączą się z bazą danych przez różnych użytkowników. Rozłóż bazę na dwie - opcja nie pasuje. Margines wydajności na serwerze wynosi (8 rdzeni, 24 gigabajty pamięci).

Komentarze:
Проблема частично решена существенным увеличением max_connections (по умолчанию 151) и back-log (по умолчанию 50) в my.cnf — это позволило полнее задействовать запас мощности сервера, заметно увеличив начальный порог тормозов. - j

Odpowiedzi

krystina
Wykonaj odczyt dla użytkowników zdalnych na serwerze podrzędnym (można go umieścić na tym samym sprzęcie, używaj tylko oddzielnego dysku twardego) i pisz do urządzenia głównego. Można dzielić odczyt i zapis za pomocą mysql proxy forge.mysql.com/wiki/MySQL_Proxy_RW_Splitting.
Odpowiedzi:
w tym głupim kodowaniu skryptu nie jest zapisywany. oznacza to, że ustawione nazwy nie będą używane podczas drugiego połączenia. - eva warner
lisa nelson
(nie można określić, czy klienci zdalni zmienią bazę danych): master do pracy z serwerem lokalnym, a także do zdalnego klienta i procesu usuwania archiwum dla kopii zapasowej - z urządzeniem slave. Na przykład pytanie z kopią zapasową danych z tabelami przekraczającymi 1 milion. najlepiej rekordy należy kierować za pośrednictwem odwołania do serwera podrzędnego.
Odpowiedzi:
(pierwszy komentarz lepiej pokazuje pytanie) - paul
geta t
Aby napisać demona, który sprawdzi bieżące muskulanty u zdalnego użytkownika na wymaganej częstotliwości i odrzuci je, jeśli opóźnią się dłużej niż ...
Odpowiedzi:
Wszystko, co byś kopnął. Warunkiem problemu nie jest to, że jest to bezużyteczne żądanie. - mary dawn
Warunek stwierdza, że ​​"funkcjonalność pakietu usuniętych użytkowników plus muskl nie jest krytyczna" - jordan halsey
roxannap
Podziel bazę na dwie - nie podoba mi się ta opcja.? i dlaczego konieczne jest rozbicie go na dwie części - jak już powiedziano, aby wyróżnić oddzielnego niewolnika, czy też nie jest to częścią twoich planów zbudowania systemu master slave? ponieważ w ten sposób zwiększa się nie tylko prędkość, ale także niezawodność. Tak, oczywiście, będziesz potrzebować możliwości zaprojektowania i rozwiązania wszystkich problemów związanych z synchronizacją - ale wynik może przekroczyć twoje oczekiwania.
chase carter
use Sphinx
Odpowiedzi:
co on tu robi? - jennifer lynn
Powolne zapytania będą działać szybciej. - jim harden
rodgine
Myślę, że szybkie łącze SCSI / Sas może pomóc w żelazie, a od optymalizacji oprogramowania - sort_cache, random_cache, itp. Może pomóc.
barbara mccord
Wydaje mi się, jako Inżynierowi Przedsiębiorczości, że ogólnie rzecz biorąc jest to coś dzikiego dla użytkowników, którzy nie są programistami / inżynierami wsparcia, i nie znają dobrze SQL i baz danych "w ogóle" bezpośredniego dostępu na poziomie SQL do dużej załadowanej bazy danych z ważnymi danymi (nawiasem mówiąc, to znaczy dostęp przez TCP? Czy chodziło Ci o - możliwość ręcznego uruchamiania zapytań od klientów mysql, takich jak SQLYog?)

Czy potrzebujesz tego, aby Twoi użytkownicy mogli uruchamiać swoje własne, pisane fałszywie żądania? Nie mogą dogadać się z zestawem nagłówkowych żądań raportów lub czymś w tym stylu? Nie mogą wysyłać próśb, które chcą spełnić, specjalnego kompetentnego gościa, który je zrewiduje i uruchomi? A w jaki sposób zapobiegasz nieumyślnemu usunięciu i tak dalej? Czy użytkownicy mają uprawnienia tylko do odczytu dla wszystkich obiektów bazy danych?

Jeśli jesteś tak ważny, aby zapewnić użytkownikom taki dostęp ... Następnie, jak powiedzieli tutaj, wykonaj serwer-podrzędny z replikacją lub skonfiguruj przydziały zasobów użytkownika dotyczące użycia procesora, przepustowości we-wy, pamięci dla każdego użytkownika (w ramach której użytkownicy łączą się z bazą danych ). Ja w mysql nie jest silny, ponieważ nie wiem, jak to jest z przydziałami zasobów.
Czy mozilla.org jest dostępny z Białorusi? :: Dobre książki na temat Oracle (DBA, PL / SQL) sądząc po twoim doświadczeniu? :: Zdobywanie doświadczenia w programowaniu? :: Poradź książkę o JavaScript :: Kim są iname.ua
Zostaw odpowiedź
Linki