Zalety blokowania na poziomie stołu


7

Jakie są korzyści z blokowania na poziomie tabeli, które jest używane przez silnik pamięci masowej MyISAM?Blokowanie na poziomie wiersza ma wiele zalet, takich jak równoczesne aktualizacje i odczyty, które nie blokują tabeli.

EdytowaćPowszechnie uważa się, że blokowanie na poziomie tabeli zapobiega zakleszczeniom.Ale czy warto zapobiegać zakleszczeniom kosztem współbieżności?

  0

[Ta dyskusja] (http://dba.stackexchange.com/questions/1/what-are-t-main-differences-between-innodb-and-myisam) może mieć dla ciebie jakieś istotne informacje. 14 wrz. 112011-09-14 20:57:50

  0

Ta dyskusja dotyczy cech MyISAM vs InnoDB. Nic nie mówi o zaletach blokowania na poziomie tabeli. 14 wrz. 112011-09-14 21:05:21

5

MyISAM nie ma zakleszczenia, ale w pewnym sensie zakleszczenie jest ulepszeniem w stosunku do blokowania na poziomie tabeli.

Gdy próbujesz WSTAWIĆ/AKTUALIZOWAĆ/USUŃ z zablokowanej tabeli, będziesz musiał poczekać, aż będzie dostępny lub dopóki nie otrzymasz limitu czasu (domyślnie 28800 sekund).W przypadku zakleszczenia w silniku blokującym na poziomie wiersza należy poczekać, jeśli nie jest on wolny i jeśli serwer wykryje rodzaj „nieskończonej pętli” - gdzie 2 połączenia nie zrezygnują z wiersza - wtedy szybko odrzuci oba połączenia dać impas.

Jeśli próbujesz rozwiązać zakleszczenie, zasugerowałbym, aby spojrzeć na następujące rzeczy:

  • Czy zakleszczenie ma miejsce w przypadku złego kodu w transakcji?czy naprawdę trzeba „przytrzymać” wiersz, aby zakończyć obliczenia i zaktualizować je?
  • Czy istnieje indeks warunku w wyciągu?w przeciwnym razie InnoDB może oznaczyć całą tabelę jako oczekującą na aktualizację.
  • Czy to możliwe, że dysk twardy na serwerze nie zatwierdza zmian InnoDB wystarczająco szybko?czy operacja punktu kontrolnego na serwerze powoduje problemy/problemy z InnoDB?
  • Czy to z powodu blokowania automatycznego przyrostu?Jeśli tak, może powinieneś spojrzeć na bardziej liberalne automatyczne zwiększanie - ustawienie http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html (patrz także na blokowanie na poziomie wiersza, aby rozwiązać niektóre problemy spowodowane przez takie zmiany)

3

Blokada tabel (taka jak używana przez MyISAM) jest wolna od problemów deadlock .

  0

BTW +1 za udzielenie pierwszej odpowiedzi na zakleszczenie !!! 14 wrz. 112011-09-14 21:17:32


6

Ponieważ mysql planuje zapytania do wykonania w ten sposób:

  • Żądania zapisu (takie jak UPDATE i DELETE) mają pierwszeństwo przed żądaniami odczytu (SELECT)
  • Serwer wykonuje zapis w trybie FIFO (w otrzymanej kolejności)

Jakie są korzyści ?

Zakleszczenia nie mogą wystąpić w MyISAM.Serwer MySQL może zatem zarządzać wszystkimi rywalizacjami, jawnymi (LOCK TABLE) lub implcit (Any DML).

Tak długo, jak tabela MyISAM nie zawiera usuniętych lub zaktualizowanych rekordów, współbieżne wstawki mogą swobodnie występować bezkarnie.W rzeczy samej obejmowałoby to INSERT na tabeli, która ma jawną blokadę odczytu.

Dla każdej tabeli z przerwami uruchomienie tabeli OPTIMIZE usunie te luki i ponownie zezwoli na jednoczesne wstawianie.

Aby uzyskać więcej informacji, przeczytaj "MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2 .

  0

W ten sposób zakleszczenie nigdy nie wystąpi, ale przynosi korzyści w porównaniu z jego wadami, takimi jak brak współbieżności.A przy dużym obciążeniu wolna przepustowość bazy danych. 14 wrz. 112011-09-14 21:10:03

+2

@rickjames korzyść z myisam nie polega na tym, jak zarządza aktualizacjami.Najlepiej sprawdza się w sytuacji, w której nie ma intensywnego zapisu. 14 wrz. 112011-09-14 21:13:01

  0

Niestety, wiele osób korzysta z WordPress, Drupal i MoveableTypes CMS, których domyślnie jest zawsze MyISAM.Jeśli ktoś ma stronę o wysokim handlu ludźmi, musi uciec od MyISAM.W przeciwnym razie wystarczy MyISAM. 14 wrz. 112011-09-14 21:13:45

  0

@DTest prawo, ale nawet w systemie intensywnie odczytującym, jak to jest korzystne w porównaniu z blokowaniem na poziomie wiersza? 14 wrz. 112011-09-14 21:14:38

  0

Nawet w systemie do odczytu i odczytu tylko jedno polecenie DELETE lub UPDATE szybko unieważni wszelkie korzyści, jakie ma MyISAM. 14 wrz. 112011-09-14 21:16:59

  0

Usunięcie zakleszczeń @rickjames to „zaleta” blokady tabeli w stosunku do blokady wiersza.MyISAM ma inne zalety niż innodb, ale nie jest to dyskusja na ten temat (innodb ma wiele zalet w porównaniu z myisam!) 14 wrz. 112011-09-14 21:25:24

  0

Obawiam się, że jest to bardzo typowe dla organizacji MySQL.Powodem, dla którego MyISAM ma blokowanie na poziomie tabeli, jest po prostu to, że nie byli w stanie zaimplementować blokowania na poziomie wiersza (zostało to stronie trzeciej, która dała nam InnoDB).Ale próbują to kręcić tak, jakby od początku chcieli.Pamiętam, że kiedyś mówili, że nie potrzebujesz obcych kluczy, transakcji, przechowywanych proc itp., Kiedy naprawdę nie mogli ich zrobić.Weź ich dokumentację z ** DUŻĄ ** szczyptą soli. 15 wrz. 112011-09-15 18:28:52


3

Dwie korzyści.

za.Tabele brute-force algorithm to przykład brute-force algorithm do rozwiązania problemu zakleszczeń.Brute force zawsze działa, dla odpowiednich wartości „prac”.

Doniesiono, że Ken Thompson, współtwórca Uniksa, wypowiedział epigram „W razie wątpliwości użyj brutalnej siły”.Prawdopodobnie zamierzał traktować to jako ha ha tylko poważnie, ale wydaje się, że pierwotne preferencje jądra Uniksa dla prostych, solidnych i przenośnych algorytmów nad kruchymi „inteligentnymi” algorytmami były istotnym czynnikiem sukcesu tego systemu operacyjnego.Podobnie jak wiele innych kompromisów w projektowaniu oprogramowania, wybór między brutalną siłą a złożoną, precyzyjnie zestrojoną sprytem jest często trudny i wymaga zarówno inżynieryjnego, jak i delikatnego osądu estetycznego.

b.Bez wątpienia będziesz podejmował różne decyzje, zdobywając zarówno inżynierski, jak i estetyczny osąd.Nie wpływa to na ważność „a” powyżej.