Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера - Mailing list pgsql-ru-general

From Oleksii Kliukin
Subject Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
Date
Msg-id 616B2D89-4702-4E15-B4B4-21431AD332F3@hintbits.com
Whole thread Raw
In response to несколько upadate + убитие процесса + защита мультитранзакций + останов кластера  (Михаил <m.nasedkin@gmail.com>)
Responses Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
List pgsql-ru-general
Добрый день, 

> On 29 Jul 2016, at 08:50, Михаил <m.nasedkin@gmail.com> wrote:
> 
> Доброго всем.
> 
> На слабеньком тестовом двухядерном компе 2Гб RAM  запустил приличную
> базу данных.
> 
> На приличной таблице стал оптимизировать столбцы, запускал разные
> update, что-то останавливал по Ctrl+C, запускал в разных сеансах psql.
> 
> Потом заметил, что не остановился ненужный update, причем прошло
> больше суток по времени и видимо наросла большая транзакция. Посмотрел
> его pid и сделал kill <pid>, потом еще зачем-то kill -9 <pid>.

Лучше делать SELECT pg_terminate_backend(pid) из SQL запроса. Это эквивалентно kill <pid>.


> И вот.
> 
> logfile:
> СООБЩЕНИЕ:  процесс сервера (PID 16263) был завершён по сигналу 9: Killed
> ПОДРОБНОСТИ:  Завершившийся процесс выполнял действие: update ...
> СООБЩЕНИЕ:  завершение всех остальных активных серверных процессов
> ПРЕДУПРЕЖДЕНИЕ:  закрытие подключения из-за краха другого серверного процесса
> ПОДРОБНОСТИ:  Управляющий процесс отдал команду этому серверному
> процессу откатить текущую транзакцию и завершиться, так как другой
> серверный процесс завершился аварийно и возможно разрушил разделяемую память.
> ПОДСКАЗКА:  Вы сможете переподключиться к базе данных и повторить вашу
> команду сию минуту.
> ....
> ВАЖНО:  система баз данных в режиме восстановления
> СООБЩЕНИЕ:  все серверные процессы завершены... переинициализация
> ВАЖНО:  система баз данных в режиме восстановления
> СООБЩЕНИЕ:  работа системы БД была прервана; последний момент работы:
> 2016-07-28 17:42:05 YEKT
> СООБЩЕНИЕ:  система БД была остановлена нештатно; производится
> автоматическое восстановление
> ВАЖНО:  система баз данных в режиме восстановления
> СООБЩЕНИЕ:  запись REDO начинается со смещения 4/443CBA40
> СООБЩЕНИЕ:  запись нулевой длины по смещению 4/443D4730
> СООБЩЕНИЕ:  записи REDO обработаны до смещения 4/443D4700
> СООБЩЕНИЕ:  последняя завершённая транзакция была выполнена в
> 2016-07-28 17:43:11.917649+06
> ВАЖНО:  система баз данных в режиме восстановления
> ВАЖНО:  система баз данных в режиме восстановления
> ВАЖНО:  система баз данных в режиме восстановления
> ВАЖНО:  система баз данных в режиме восстановления
> СООБЩЕНИЕ:  Защита от наложения мультитранзакций сейчас включена
> СООБЩЕНИЕ:  система БД готова принимать подключения
> СООБЩЕНИЕ:  процесс запуска автоочистки создан
> 
> При этом в другом процессе тоже шел большой update той же таблицы. Там вышло:
> 
> ПРЕДУПРЕЖДЕНИЕ:  закрытие подключения из-за краха другого серверного процесса
> ПОДРОБНОСТИ:  Управляющий процесс отдал команду этому серверному
> процессу откатить текущую транзакцию и завершиться, так как другой
> серверный процесс завершился аварийно и возможно разрушил разделяемую
> память.
> ПОДСКАЗКА:  Вы сможете переподключиться к базе данных и повторить вашу
> команду сию минуту.
> КОНТЕКСТ:  при изменении кортежа (73696,1) в отношении "tableXXX"
> сервер неожиданно закрыл соединение
>        Скорее всего сервер прекратил работу из-за сбоя
>        до или в процессе выполнения запроса.
> Подключение к серверу потеряно. Попытка восстановления неудачна.

Это следствие kill -9. Сервер увидел, что один из процессов завершился аварийно.
Так как этот процесс мог навредить в разделяемой памяти, в которой хранятся “грязные” данные из таблиц -  сервер
завершилвсе остальные процессы
 

> 
> Через несколько минут зашел psql - данных в таблицах нет, не
> показываются, во всех таблицах 0 строк.

Это странно. Были ли какие-нибудь еще сообщения об ошибках?
Были ли это временные или нежурналируемые таблицы?
Были ли в этих таблицах данные до запуска транзакций, которые были в процессе работы на момент аварийного завершения
процессов?

> 
> Стал останавливать сервер:
> СООБЩЕНИЕ:  получен запрос на "вежливое" выключение
> СООБЩЕНИЕ:  процесс запуска автоочистки завершается
> ВАЖНО:  система баз данных останавливается

Обычный pg_ctl stop ждет, пока все соединения не завершатся.

> ...
> 
> Все. Больше суток система висит или делаются откаты транзакций, не
> понятно. Ощущение, что не дождусь позитивного останова сервера. Что
> можно сделать, чтобы перезапустить кластер, пусть с потерями последних
> транзакций?

Попробуйте pg_ctl -mf fast stop (быстрая остановка) и потом pg_ctl start.

--
Oleksii


pgsql-ru-general by date:

Previous
From: KuK officialidioten
Date:
Subject: Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
Next
From: Михаил
Date:
Subject: Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера