Обсуждение: несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
Доброго всем. На слабеньком тестовом двухядерном компе 2Гб RAM запустил приличную базу данных. На приличной таблице стал оптимизировать столбцы, запускал разные update, что-то останавливал по Ctrl+C, запускал в разных сеансах psql. Потом заметил, что не остановился ненужный update, причем прошло больше суток по времени и видимо наросла большая транзакция. Посмотрел его pid и сделал kill <pid>, потом еще зачем-то kill -9 <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" сервер неожиданно закрыл соединение Скорее всего сервер прекратил работу из-за сбоя до или в процессе выполнения запроса. Подключение к серверу потеряно. Попытка восстановления неудачна. Через несколько минут зашел psql - данных в таблицах нет, не показываются, во всех таблицах 0 строк. Стал останавливать сервер: СООБЩЕНИЕ: получен запрос на "вежливое" выключение СООБЩЕНИЕ: процесс запуска автоочистки завершается ВАЖНО: система баз данных останавливается ... Все. Больше суток система висит или делаются откаты транзакций, не понятно. Ощущение, что не дождусь позитивного останова сервера. Что можно сделать, чтобы перезапустить кластер, пусть с потерями последних транзакций? -- --- С уважением, Михаил
Re: несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
От
"Dmitry E. Oboukhov"
Дата:
> Все. Больше суток система висит или делаются откаты транзакций, не > понятно. Ощущение, что не дождусь позитивного останова сервера. Что > можно сделать, чтобы перезапустить кластер, пусть с потерями последних > транзакций? а WAL-лог был включен? можно попробовать откатиться назад по чекпоинту и WAL, правда если запрос висел несколько часов - хз -- . ''`. Dmitry E. Oboukhov : :’ : email: unera@debian.org jabber://UNera@uvw.ru `. `~’ GPGKey: 1024D / F8E26537 2006-11-21 `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Вложения
Re: [pgsql-ru-general] несколько upadate + убитие процесса + защита мультитранзакций + останов кластера
От
KuK officialidioten
Дата:
>На слабеньком тестовом двухядерном компе 2Гб RAM запустил приличную >базу данных. > >На приличной таблице стал оптимизировать столбцы, запускал разные >update, что-то останавливал по Ctrl+C, запускал в разных сеансах psql. ... >Стал останавливать сервер: >СООБЩЕНИЕ: получен запрос на "вежливое" выключение >СООБЩЕНИЕ: процесс запуска автоочистки завершается >ВАЖНО: система баз данных останавливается >... > >Все. Больше суток система висит или делаются откаты транзакций, не >понятно. Ощущение, что не дождусь позитивного останова сервера. Что >можно сделать, чтобы перезапустить кластер, пусть с потерями последних >транзакций? fsync был в каком состоянии? -- Ай ам
Добрый день, > 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
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. Я никогда этим не пользовался и если честно не понимаю. Спасибо за ответы. -- --- С уважением, Михаил
Да это все. Данные в нежурналируемых таблицах грохнулись. -- --- С уважением, Михаил Наседкин