Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Aktualizuj wiersze tabeli bez blokowania wierszy

Po pierwsze, jeśli domyślnie korzystasz z silnika przechowywania InnoDB MySQL, nie ma możliwości aktualizowania danych bez blokad wierszy, z wyjątkiem ustawienia poziomu izolacji transakcji na READ UNCOMMITTED przez uruchomienie

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

Jednak nie sądzę, aby zachowanie bazy danych było tym, czego oczekujesz, ponieważ w tym przypadku dozwolony jest nieczysty odczyt. READ UNCOMMITTED rzadko przydaje się w praktyce.

Aby uzupełnić odpowiedź z @Tim, naprawdę dobrym pomysłem jest posiadanie unikalnego indeksu w kolumnie użytej w klauzuli where. Należy jednak pamiętać, że nie ma absolutnej gwarancji, że optymalizator ostatecznie wybierze taki plan wykonania przy użyciu utworzonego indeksu. Może działać lub nie działać, w zależności od przypadku.

W Twoim przypadku możesz podzielić długą transakcję na wiele krótkich transakcji. Zamiast aktualizować miliony wierszy w jednym ujęciu, lepsze byłoby skanowanie tylko tysięcy wierszy za każdym razem. Blokady X są zwalniane, gdy każda krótka transakcja zostanie zatwierdzona lub wycofana, dając współbieżnym aktualizacjom możliwość kontynuowania.

Przy okazji zakładam, że Twoja partia ma niższy priorytet niż inne procesy online, dlatego może być planowana poza godzinami szczytu, aby jeszcze bardziej zminimalizować wpływ.

PS Blokada IX nie znajduje się w samym rekordzie, ale jest dołączona do obiektu tabeli o wyższej szczegółowości. Nawet przy poziomie izolacji transakcji REPEATABLE READ nie ma luki, gdy zapytanie używa unikalnego indeksu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja tabel sekwencji Spring Batch MyISAM do InnoDB

  2. Zapobiegaj duplikowaniu rekordów w tabeli za pomocą PHP

  3. Przeszukiwanie bazy danych MySQL za pomocą PHP, AJAX i jQuery

  4. Sprawdzanie, czy mysql_query coś zwróciło, czy nie

  5. Laravel/ PHP:Sortuj alfabetycznie z numerami w kolejności