Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера - Mailing list pgsql-ru-general
From | Михаил |
---|---|
Subject | Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера |
Date | |
Msg-id | CALSKcLQRBLm5aFC2h-K2XXegQwdL5cL2BN6BbWAzx4SMUs+Yfg@mail.gmail.com Whole thread Raw |
In response to | Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера (Oleksii Kliukin <alexk@hintbits.com>) |
Responses |
Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
|
List | pgsql-ru-general |
29.07.16, Oleksii Kliukin<alexk@hintbits.com> написал(а): > Добрый день, > >> 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 строк. > > Это странно. Были ли какие-нибудь еще сообщения об ошибках? Пара строк про кортежи таблицы. И еще: СООБЩЕНИЕ: запись REDO начинается со смещения 4/443CBA40 СООБЩЕНИЕ: запись нулевой длины по смещению 4/443D4730 СООБЩЕНИЕ: записи REDO обработаны до смещения 4/443D4700 > Были ли это временные или нежурналируемые таблицы? Вот да. Таблицы в базе нежурналируемые. Я попал? > Были ли в этих таблицах данные до запуска транзакций, которые были в > процессе работы на момент аварийного завершения процессов? Все были заполнены. >> >> Стал останавливать сервер: >> СООБЩЕНИЕ: получен запрос на "вежливое" выключение >> СООБЩЕНИЕ: процесс запуска автоочистки завершается >> ВАЖНО: система баз данных останавливается > > Обычный pg_ctl stop ждет, пока все соединения не завершатся. Все соединения сам завершил. Сейчас при заходе psql выдает: psql: ВАЖНО: система баз данных останавливается >> >> Все. Больше суток система висит или делаются откаты транзакций, не >> понятно. Ощущение, что не дождусь позитивного останова сервера. Что >> можно сделать, чтобы перезапустить кластер, пусть с потерями последних >> транзакций? > > Попробуйте pg_ctl -mf fast stop (быстрая остановка) и потом pg_ctl start. Буду пробовать. Несколько дней висит. > -- > Oleksii > > Еще отвечу про fsync. Я никогда этим не пользовался и если честно не понимаю. Спасибо за ответы. -- --- С уважением, Михаил
pgsql-ru-general by date: