Страница 1 из 9
lock conversion denied (215) или lock denied (216)
Добавлено: 17 дек 2004, 09:47
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.
Что это за ошибки?
Это баг сервера, или я чего не так сделал?
Я так понимаю, что параллельные запросы не должны вызывать таких серьезных ошибок?
Re: lock conversion denied (215) или lock denied (216)
Добавлено: 17 дек 2004, 13:13
Merlin
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.
Что это за ошибки?
Это баг сервера, или я чего не так сделал?
Я так понимаю, что параллельные запросы не должны вызывать таких серьезных ошибок?
Строка соединения везде одинаковая?
У кадого процесса своё содинение с базой или пытаешься разделять одно?
Re: lock conversion denied (215) или lock denied (216)
Добавлено: 17 дек 2004, 13:30
gelin
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;
}
Везде одинаковые.
У каждого свое.
Добавлено: 17 дек 2004, 14:03
gelin
Ну вот, немного поковырялся в базе.
Страница, на которой происходит ошибка - это страница данных той самой таблицы, на основе которой составлен view и которая обновляется триггером before update этого view.
Добавлено: 17 дек 2004, 14:05
gelin
Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?
Добавлено: 17 дек 2004, 14:31
Merlin
gelin писал(а):Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?
Имхо вряд ли, это что-то в самом lock manager. Могу только посоветовать дождаться dimitr, если его ещё интересуют проблемы с FB1. Вот если на 1.5.1 воспроизводится - тогда точно заинтересуется.
Добавлено: 18 дек 2004, 10:36
gelin
Однако.
"Откатился" к оригинальному 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)
т.е. ругнулся на другую страницу.
Добавлено: 18 дек 2004, 11:11
gelin
Может это происходить из-за каких-то проблем с доступом к файлу 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
Добавлено: 18 дек 2004, 12:38
dimitr
Я за этой ошибкой гоняюсь уже несколько месяцев. Но у всех она проявляется спонтанно и тестовый пример подготовить не представляется возможным
Черт побери.
Добавлено: 18 дек 2004, 12:48
gelin
dimitr писал(а):Я за этой ошибкой гоняюсь уже несколько месяцев. Но у всех она проявляется спонтанно и тестовый пример подготовить не представляется возможным
Черт побери.
У меня она вылезает с завидной регулярностью
Выложить здесь SQL и Perlовый скрипт?
Добавлено: 18 дек 2004, 15:44
dimitr
Если "редко (несколько раз в сутки)" - это с завидной регулярностью, то как мне ее ловить прикажешь? Я так двое суток под отладчиком могу прождать...
Добавлено: 20 дек 2004, 07:14
gelin
Ну. В данный момент устанавливается два одновременных подключения к базе. Если в это же время установлено длительное подключение из какой-нибудь утилиты администрирования (EMS IBManager, BlazeTop), ошибка вылезает в 30-50% запусков. Уже неплохо? А если увеличить число одновременных подключений?...
Надо попробовать...
Добавлено: 11 янв 2005, 01:12
VD
gelin писал(а):Поиграться с уровнями изоляции транзакций поможет?
Тогда в какую сторону играться?
Попробуй
$dbh->func(
-access_mode => 'read_write',
-isolation_level => ['read_committed','record_version'],
-lock_resolution => 'no_wait',
'ib_set_tx_param'
);
и напиши, что получиться.
Добавлено: 11 янв 2005, 01:38
VD
dimitr писал(а):Если "редко (несколько раз в сутки)" - это с завидной регулярностью, то как мне ее ловить прикажешь? Я так двое суток под отладчиком могу прождать...
Ситуация у всех (у кого эта ошибка происходит) примерно одинаковая
gelin писал(а):запускает несколько параллельных процессов, каждый из которых подключается к базе, и делает select и последующий update
Есть мысль, что делается это с помощью скриптов, уровень изоляции транзакций по-умолчанию=snapshot.
Сейчас мы везде стали указывать read_committed. Ошибки стали реже (целый месяц не было). Однако, уже в этом году, вновь получили ошибку на одном объекте.
Беда в том, что база при этой ошибке портится.
Ждем, Дмитрий, твоей помощи.
Добавлено: 11 янв 2005, 08:12
gelin
VD писал(а):Попробуй
...
и напиши, что получиться.
Вообще-то, по условиям задачи (сбор по SNMP статистики по интерфейсам и запихивание в базу) нет необходимости в нескольких соединениях с базой. Правда приходится помучиться с IPC.
В общем, я пошел другим, для меня, пожалуй, более эффективным, путем: одно соединение с базой в основном процессе, дочерние процессы параллельно собирают статистику и передают ее основному процессу, который уже вставляет.
Так что, наверное, не попробую.
Добавлено: 11 янв 2005, 10:34
dimitr
VD писал(а):Ждем, Дмитрий, твоей помощи.
Вадим, напомни, у вас этот баг только на фри воспроизводится? Или на винде просто не пробовали?
Добавлено: 11 янв 2005, 11:54
VD
dimitr писал(а):
Вадим, напомни, у вас этот баг только на фри воспроизводится? Или на винде просто не пробовали?
У нас эта ошибка только на фри. Базы там сильно загружены.
Получаем мы ее достаточно случайно. Как я писал выше, в последний раз продержались месяц.
Думаю, что нужно просить людей, которые могут воспроизвести эту ошибку прислать тебе базу, скрипты и данные, при загрузке которых эта ошибка возникает.
Если таких людей, даже с помощью DK, найти не сможем, то
сделай отладочную версию с записью в лог всего, чего можно и мы соберем ее на фри и поставим на боевой сервер. Админ сказал, что больших логов не боиться. И будем ждать.
у нас тоже встречается
Добавлено: 06 май 2005, 19:43
lexas
используем трехзвенку (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-ом
Re: у нас тоже встречается
Добавлено: 06 сен 2006, 14:43
Chemist
Появилась такая же ошибка. Одновременно ~ 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)
Re: у нас тоже встречается
Добавлено: 06 сен 2006, 19:23
Chemist
Наблюдение, после возникновения данной ошибки начинает расти разрыв Oldest active -> Next transaction
пока не убьешь клиента, который получил отлуп.