2016-12-10 9 views
9

Po włączeniu powolnego rejestrowania zapytań, wiele z nich zajmuje COMMIT i zajmuje więcej niż kilka sekund w naszej bazie danych produkcji. W trakcie dochodzenia są to zazwyczaj proste transakcje: pobierz wiersz, UPDATE wiersz, COMMIT. Identyfikatory s i UPDATE w tych konkretnych transakcjach nie są rejestrowane jako wolne. Czy jest coś, co możemy zrobić, lub narzędzia, których możemy użyć, aby znaleźć przyczynę tych powolnych zobowiązań? Pracujemy na SSD i przesyłamy strumieniowo do niewolnika, jeśli to robi różnicę.Debugowanie powolne PostgreSQL 9.3 ZOBOWIĄZANIA

+2

Przesyłanie strumieniowe do repliki może mieć duże znaczenie. Czy włączona jest replikacja synchroniczna? Jeśli tak, może to łatwo spowodować opóźnione zatwierdzenia. Możesz to potwierdzić, tymczasowo wyłączając synchroniczną replikację (ustawienie 'synchronous_standby_names = ''' lub ustawienie 'synchronous_commit = 'local'') –

+0

Oba te ustawienia są ustawione domyślnie, co, jak rozumiem w dokumentach, oznacza, że ​​synchronous_commit jest już skutecznie "lokalny". –

+1

Spróbuj 'log_lock_waits = true', aby sprawdzić, czy twoje zapisy są kontestowane. – teppic

Odpowiedz

0

Zatwierdzenia PostgreS są synchroniczne. Oznacza to, że będą czekać na zakończenie zapisów WAL przed przejściem do następnego. Możesz dostosować ustawienia WAL w pliku konfiguracyjnym, aby to zmienić.

Możesz ustawić poziom zatwierdzania na asynchroniczny na poziomie sesji/użytkownika lub bazy danych z wartością synchronous_commit w pliku konfiguracyjnym.

Po stronie bazy danych.

Odkurz tabele i zaktualizuj statystyki. To pozbędzie się martwych krotek od twoich aktualizacji, będzie ich wiele.

VACUUM ANALYZE 
Powiązane problemy