2014-07-11 12 views
7

Czy można przypisać niższy priorytet zapytaniu w MySQL podobnym do polecenia nice w wierszu poleceń (w systemie Linux)? Jeśli nie, czy istnieją bazy danych, które mogą zrobić coś takiego?Zapytanie o niskim priorytecie w Mysql

+0

Który problem chcesz rozwiązać przez to? – VMai

+0

MySQL ma odwrotność: _HIGH_PRIORITY nadaje SELECT wyższy priorytet niż instrukcja aktualizująca tabelę. Powinieneś używać tego tylko w przypadku bardzo szybkich zapytań, które muszą być wykonane od razu. Zapytanie SELECT HIGH_PRIORITY, które jest wydawane, gdy tabela jest zablokowana do odczytu działa, nawet jeśli istnieje instrukcja aktualizacji oczekująca na to, że tabela będzie wolna. Ma to wpływ tylko na silniki pamięci masowej wykorzystujące tylko blokowanie na poziomie tabeli (takie jak MyISAM, MEMORY i MERGE) ._ source: manual page [SELECT] (https://dev.mysql.com/doc/refman/5.6/en /select.html) – VMai

Odpowiedz

11

Można użyć LOW_PRIORITY lub HIGH_PRIORITY w zapytaniach w zależności od rodzaju zapytania wykonać:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] INTO ... 
SELECT [HIGH_PRIORITY] * FROM ... 
UPDATE [LOW_PRIORITY] table ... 

Z Mysql 5.7 documentation dla zapytania INSERT na przykład:

Jeśli używasz Słowo kluczowe LOW_PRIORITY, wykonanie INSERT jest opóźnione, dopóki żaden inny klient nie odczyta z tabeli. Dotyczy to również innych klientów, którzy rozpoczęli odczytywanie, podczas gdy istniejący klienci czytają i gdy oczekuje instrukcja INSERT LOW_PRIORITY. Możliwe jest zatem, że klient, który wystawi instrukcję INSERT LOW_PRIORITY, będzie czekał przez bardzo długi czas.

Ale mówi się też:

ten dotyczy tylko silników składowania, które używają tylko blokowanie tabeli poziomu (takie jak MyISAM, pamięci i połączyć)

więc wygrał” t móc korzystać z tej funkcji na przykład z innodb, chyba że chcesz użyć LOCK_TABLES, a tym samym zmniejszyć jego wydajność.

+0

I [przeczytaj tutaj na stosie wymiany dba] (http://dba.stackexchange.com/a/56379/8378), że zapytanie LOW_PRIORITY może nigdy nie zostać uruchomione, jeśli twoja baza danych jest zawsze zajęta normalnym lub Prośby o HIGH_PRIORITY ... więc jedzenie do myślenia! –

+0

Ta odpowiedź mówi, że możesz użyć LOW_PRIORITY dla INSERT, SELECT i UPDATE. Począwszy od wersji MySQL 5,7, ta opcja nie jest dostępna dla instrukcji SELECT. Zobacz https://dev.mysql.com/doc/refman/5.7/en/select.html – ChrisInEdmonton

+0

@ChrisInEdmonton Dzięki, poprawiłem swoją odpowiedź. "LOW_PRIORITY" nie jest możliwe w zapytaniach SELECT (i to nie tylko w 5.7), [ale "HIGH_PRIORITY" to] (https://dev.mysql.com/doc/refman/5.7/en/select.html) – julienc

Powiązane problemy