lock conversion denied (215) или lock denied (216)

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

lock conversion denied (215) или lock denied (216)

Сообщение gelin » 17 дек 2004, 09:47

Firebird 1.0.3 Classic for Linux
Perl скрипт (DBD-InterBase-0.43) запускает несколько параллельных процессов, каждый из которых подключается к базе, и делает select и последующий update view. view представляет собой join двух других таблиц. Триггер на view before update обновляет одну из первых таблиц и вставляет данные в третью таблицу.
Редко (несколько раз в сутки, скрипт запускается каждые 5 минут) выскакивает ошибка
-deadlock
-page 165, page type 5 lock conversion denied (215)
Чаще всего на вызове fetchrow_array (при select), реже при вызове do (update). Пару раз выскочило:
-page 165, page type 5 lock denied (216)
Ошибки записываются в interbase.log. Страница одна и та же. После backup/restore изменился только номер страницы, ошибка не исчезла.
Замечено, что ошибки вылезают чаще, если параллельно установлено соединение с базой из EMS InterBase & FireBird Manager 3.

Что это за ошибки?
Это баг сервера, или я чего не так сделал?
Я так понимаю, что параллельные запросы не должны вызывать таких серьезных ошибок?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Re: lock conversion denied (215) или lock denied (216)

Сообщение Merlin » 17 дек 2004, 13:13

gelin писал(а):Firebird 1.0.3 Classic for Linux
Perl скрипт (DBD-InterBase-0.43) запускает несколько параллельных процессов, каждый из которых подключается к базе, и делает select и последующий update view. view представляет собой join двух других таблиц. Триггер на view before update обновляет одну из первых таблиц и вставляет данные в третью таблицу.
Редко (несколько раз в сутки, скрипт запускается каждые 5 минут) выскакивает ошибка
-deadlock
-page 165, page type 5 lock conversion denied (215)
Чаще всего на вызове fetchrow_array (при select), реже при вызове do (update). Пару раз выскочило:
-page 165, page type 5 lock denied (216)
Ошибки записываются в interbase.log. Страница одна и та же. После backup/restore изменился только номер страницы, ошибка не исчезла.
Замечено, что ошибки вылезают чаще, если параллельно установлено соединение с базой из EMS InterBase & FireBird Manager 3.

Что это за ошибки?
Это баг сервера, или я чего не так сделал?
Я так понимаю, что параллельные запросы не должны вызывать таких серьезных ошибок?
Строка соединения везде одинаковая?
У кадого процесса своё содинение с базой или пытаешься разделять одно?

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Re: lock conversion denied (215) или lock denied (216)

Сообщение gelin » 17 дек 2004, 13:30

Merlin писал(а):Строка соединения везде одинаковая?
У кадого процесса своё содинение с базой или пытаешься разделять одно?

Код: Выделить всё

...
$count = 0;
foreach $ipid (keys %ipdev)
{
 if($count >= $conf{max_threads})
 {
  last if(wait() == -1);
 }
 if(!fork())
 {
  child(\$ipdev{$ipid});
 }
}
while(wait() != -1)
{}
...
sub child
{
...
 $dsn = "dbi:InterBase:db=$conf{db_name}";
 $dsn .= ";ib_dialect=3";
 $dsn .= ";ib_role=$conf{db_role}" if($conf{db_role});
 $dbh = DBI->connect($dsn, $conf{db_user}, $conf{db_pass})
   or die("can't connect to database $conf{db_name}\n");
 $dbh->{AutoCommit} = 0;
...
 $dbh->do($sql) or die("can't execute '$sql'\n");
...
 $dbh->commit();
 $dbh->disconnect();
 exit 0;
} 
Везде одинаковые.
У каждого свое.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 17 дек 2004, 14:03

Ну вот, немного поковырялся в базе.
Страница, на которой происходит ошибка - это страница данных той самой таблицы, на основе которой составлен view и которая обновляется триггером before update этого view.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 17 дек 2004, 14:05

Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 17 дек 2004, 14:31

gelin писал(а):Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?
Имхо вряд ли, это что-то в самом lock manager. Могу только посоветовать дождаться dimitr, если его ещё интересуют проблемы с FB1. Вот если на 1.5.1 воспроизводится - тогда точно заинтересуется.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 18 дек 2004, 10:36

Однако.
"Откатился" к оригинальному Interbase CS 6.0.1. Все то же:
page 165, page type 5 lock denied (216)
page 165, page type 5 lock conversion denied (215)
Один раз выдал:
page 471, page type 5 lock conversion denied (215)
т.е. ругнулся на другую страницу.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 18 дек 2004, 11:11

Может это происходить из-за каких-то проблем с доступом к файлу isc1_lock.hostname?

Я запускаю interbase не от рута, а от пользователя ibase.
# id ibase
uid=1004(ibase) gid=1004(ibase) groups=1004(ibase)
# ls -l
-rw-rw-rw- 1 ibase ibase 98304 Dec 18 13:58 isc_lock1.stat-server
inetd.conf:
gds_db stream tcp nowait.30000 ibase /opt/interbase/bin/gds_inet_server gds_inet_server # InterBase Database Remote Server

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 18 дек 2004, 12:38

Я за этой ошибкой гоняюсь уже несколько месяцев. Но у всех она проявляется спонтанно и тестовый пример подготовить не представляется возможным :-( Черт побери.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 18 дек 2004, 12:48

dimitr писал(а):Я за этой ошибкой гоняюсь уже несколько месяцев. Но у всех она проявляется спонтанно и тестовый пример подготовить не представляется возможным :-( Черт побери.
У меня она вылезает с завидной регулярностью :(
Выложить здесь SQL и Perlовый скрипт?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 18 дек 2004, 15:44

Если "редко (несколько раз в сутки)" - это с завидной регулярностью, то как мне ее ловить прикажешь? Я так двое суток под отладчиком могу прождать...

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 20 дек 2004, 07:14

Ну. В данный момент устанавливается два одновременных подключения к базе. Если в это же время установлено длительное подключение из какой-нибудь утилиты администрирования (EMS IBManager, BlazeTop), ошибка вылезает в 30-50% запусков. Уже неплохо? А если увеличить число одновременных подключений?...
Надо попробовать...

VD
Сообщения: 3
Зарегистрирован: 26 окт 2004, 22:34

Сообщение VD » 11 янв 2005, 01:12

gelin писал(а):Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?
Попробуй

$dbh->func(
-access_mode => 'read_write',
-isolation_level => ['read_committed','record_version'],
-lock_resolution => 'no_wait',
'ib_set_tx_param'
);

и напиши, что получиться.

VD
Сообщения: 3
Зарегистрирован: 26 окт 2004, 22:34

Сообщение VD » 11 янв 2005, 01:38

dimitr писал(а):Если "редко (несколько раз в сутки)" - это с завидной регулярностью, то как мне ее ловить прикажешь? Я так двое суток под отладчиком могу прождать...
Ситуация у всех (у кого эта ошибка происходит) примерно одинаковая
gelin писал(а):запускает несколько параллельных процессов, каждый из которых подключается к базе, и делает select и последующий update
Есть мысль, что делается это с помощью скриптов, уровень изоляции транзакций по-умолчанию=snapshot.
Сейчас мы везде стали указывать read_committed. Ошибки стали реже (целый месяц не было). Однако, уже в этом году, вновь получили ошибку на одном объекте.
Беда в том, что база при этой ошибке портится.
Ждем, Дмитрий, твоей помощи.

gelin
Сообщения: 13
Зарегистрирован: 17 дек 2004, 09:23

Сообщение gelin » 11 янв 2005, 08:12

VD писал(а):Попробуй
...
и напиши, что получиться.
Вообще-то, по условиям задачи (сбор по SNMP статистики по интерфейсам и запихивание в базу) нет необходимости в нескольких соединениях с базой. Правда приходится помучиться с IPC.
В общем, я пошел другим, для меня, пожалуй, более эффективным, путем: одно соединение с базой в основном процессе, дочерние процессы параллельно собирают статистику и передают ее основному процессу, который уже вставляет.
Так что, наверное, не попробую.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 11 янв 2005, 10:34

VD писал(а):Ждем, Дмитрий, твоей помощи.
Вадим, напомни, у вас этот баг только на фри воспроизводится? Или на винде просто не пробовали?

VD
Сообщения: 3
Зарегистрирован: 26 окт 2004, 22:34

Сообщение VD » 11 янв 2005, 11:54

dimitr писал(а): Вадим, напомни, у вас этот баг только на фри воспроизводится? Или на винде просто не пробовали?
У нас эта ошибка только на фри. Базы там сильно загружены.
Получаем мы ее достаточно случайно. Как я писал выше, в последний раз продержались месяц.
Думаю, что нужно просить людей, которые могут воспроизвести эту ошибку прислать тебе базу, скрипты и данные, при загрузке которых эта ошибка возникает.
Если таких людей, даже с помощью DK, найти не сможем, то
сделай отладочную версию с записью в лог всего, чего можно и мы соберем ее на фри и поставим на боевой сервер. Админ сказал, что больших логов не боиться. И будем ждать.

lexas
Сообщения: 9
Зарегистрирован: 06 май 2005, 19:40

у нас тоже встречается

Сообщение lexas » 06 май 2005, 19:43

используем трехзвенку (java-fb). При использовании jaybird 1.5.0 вылезало.

org.firebirdsql.jdbc.FBSQLException: GDS Exception 335544336. deadlock
page 142458, page type 5 lock conversion denied

было залечено драйвером, но его происхождение мне неизвестно (толи skidder помог, толи ещё где)

при использовании 1.5.5 и 1.6 (from CVS) повторяется, правда без
page type 5 lock conversion denied, а просто плюется deadlock-ом

Chemist
Сообщения: 88
Зарегистрирован: 27 окт 2004, 09:39

Re: у нас тоже встречается

Сообщение Chemist » 06 сен 2006, 14:43

Появилась такая же ошибка. Одновременно ~ 80 пользователей при 100 коннектах - нагрузка средне-большая. Используется FB2 RC4. С чем это может быть связано?

Код: Выделить всё

localhost	Wed Sep  6 13:51:13 2006
	Database: /samba/db/base_test.fdb
	page 6226674, page type 5 lock conversion denied (215)


localhost	Wed Sep  6 13:51:13 2006
	Database: /samba/db/base_test.fdb
	deadlock
	page 6226674, page type 5 lock conversion denied
	internal gds software consistency check (error during savepoint backout (290), file: exe.cpp line: 3710)


localhost	Wed Sep  6 14:04:00 2006
	Database: /samba/db/base_test.fdb
	page 6227366, page type 5 lock conversion denied (215)


localhost	Wed Sep  6 14:04:00 2006
	Database: /samba/db/base_test.fdb
	page 6227369, page type 5 lock conversion denied (215)


localhost	Wed Sep  6 14:17:15 2006
	Database: /samba/db/base_test.fdb
	page 6145378, page type 5 lock conversion denied (215) 

Chemist
Сообщения: 88
Зарегистрирован: 27 окт 2004, 09:39

Re: у нас тоже встречается

Сообщение Chemist » 06 сен 2006, 19:23

Наблюдение, после возникновения данной ошибки начинает расти разрыв Oldest active -> Next transaction :? пока не убьешь клиента, который получил отлуп.

Ответить