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: