PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Klient Postgres blokuje się podczas tworzenia nowej tabeli

Jeśli możliwe jest ponowne uruchomienie postgresa, najprawdopodobniej rozwiąże to problem i oszczędzi Ci spędzania czasu na czytaniu reszty tej odpowiedzi :-)

Sprawdź pg_stat_activity widok, prawdopodobnie istnieje jakaś inna transakcja blokująca zmianę schematu.

select * from pg_stat_activity 
where 
wait_event_type is NULL and xact_start is not NULL order by xact_start;

(pg_stat_activity jest nieco zmieniana w każdym głównym wydaniu pg, wypróbuj to dla starszych wersji):

select * from pg_stat_activity 
where 
not waiting and xact_start is not NULL order by xact_start;

Pierwszy wiersz, który się pojawi, to prawdopodobnie ten, który powoduje problemy. Często jest to "bezczynna transakcja" - może to bardzo dobrze utrzymać blokady, a jeśli jest to stara transakcja, może to równie dobrze zabić wydajność. Prawdopodobnie programista zapomniał zapewnić zakończenie transakcji za pomocą „zatwierdź” lub „wycofania”, a może jakaś sesja db utknęła z powodu problemów z siecią.

Aby zakończyć transakcję z pid 1234, użyj select pg_cancel_backend(1234); , jeśli to się nie powiedzie, select pg_terminate_backend(1234) . Przy dostępie do powłoki równoważne polecenia to kill -INT 1234 i kill 1234 . (pamiętaj, kill -9 1234 to naprawdę zły pomysł).

Istnieje również widok pg_locks co może dać pewien wgląd, choć prawdopodobnie nie będzie łatwo uzyskać z niego przydatne informacje. Jeśli granted jest prawdziwe, blokada jest wstrzymywana, gdy granted jest fałszywe, oznacza to, że zapytanie czeka na blokadę. Oto kilka wskazówek, jak wyodrębnić przydatne informacje z pg_locks:http://wiki.postgresql. org/wiki/Lock_Monitoring

Jeśli wszystko inne zawiedzie, prawdopodobnie nadszedł czas na proste rozwiązanie, zrestartuj serwer bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks GIN w kolumnie smallint[] nie jest używany lub operator błędu nie jest unikalny

  2. Nie można skopiować tabeli do innej bazy danych za pomocą pg_dump

  3. PostgreSQL - zaokrąglanie liczb zmiennoprzecinkowych

  4. Dynamicznie generuj kolumny w PostgreSQL

  5. Jak clock_timestamp() działa w PostgreSQL