powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
25 сообщений из 135, страница 1 из 6
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38450928
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all. Сабж.

Встречается эта "комета" чрезвычайно редко (я видел последний раз несколько лет взад, хотя изгаляюсь над ФБ чуть ли не каждый день).
Все транзакции стартуют как read committed record_version no wait, число isql'ей = 350.

Молотьба шла с 31-10-2013 15:53, остановлена только что. За эти 50 ч в двух error-логах окошек вылезло:
Код: plaintext
1.
2.
3.
4.
5.
-- log #1
02:19:56.700 Statement failed, SQLSTATE = 40001
02:19:56.700 lock conflict on no wait transaction
02:19:56.700 After line 0 in file t004-ins-log.sql
02:19:56.715 Cannot get server version without database connection
02:19:56.715 Command error: show database

Код: plaintext
1.
2.
3.
4.
5.
6.
-- log #2
22:17:22.257 Statement failed, SQLSTATE = 40001
22:17:22.289 lock conflict on no wait transaction
22:17:22.289 After line 0 in file t004-ins-log.sql
22:17:22.304 Cannot get server version without database connection
22:17:22.304 Command error: show database
(увы, в логах есть только время, без даты; причина - тумблер "тупизьм" был в положении ON: я просто забыл добавить ключ /d в mtee )

Видно, что каждый из этих isql'ей в соотв-щий ошибке момент времени не мог достучаться до сервака ("Cannot get server version without database connection"). Но в firebird.log'е НИЧЕГО нету! И крашей тоже не было.

И чего тогда это могло быть ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ISQL Version: WI-V2.5.3.26682 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-T3.0.0.30695 Firebird 3.0 Alpha 1"
Firebird/linux AMD64 (remote server), version "LI-T3.0.0.30695 Firebird 3.0 Alpha 1/tcp (oel64)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26682 Firebird 2.5/tcp (CSMIRROR)/P12"
on disk structure version 12.0
Database: 192.168.0.220/3330:idx_test

PS. Вопрос ДСа от 2009 на эту же тему читал, но так и не понял, где собака порылась.
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38450959
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидPS. Вопрос ДСа от 2009 на эту же тему читал
Тот мой вопрос был совсем на другую тему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38450962
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а, точно. Тогда всё еще загадочнее.
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451009
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Видно, что каждый из этих isql'ей в соотв-щий ошибке
Таблоид> момент времени не мог достучаться до сервака

Вроде бы это может не иметь никакого отношения к самим insert-ам,
т.е. если какая-то бага и проблем действительно есть, то где-нибудь
в другом месте. Иначе старый рецепт бесконфликтности insert-ов
придётся пересматривать, чего лично мне очень бы не хотелось.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451027
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВроде бы это может не иметь никакого отношения к самим insert-ам, т.е. если какая-то бага и проблем действительно есть, то где-нибудь в другом месте.Вероятнее всего - именно так. Ибо "встреча" с этим сообщением для инсертов происходит ЧРЕЗВЫЧАЙНО редко.
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451030
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так хочешь поймать - избавься от всех реконнектов и пр.
Оставь только 1 коннект в самом начале и запусти тест.
Заодно ещё и нагрузку можно будет увеличть.

Более того, в идеале - ещё и сначала 350 коннектов и
только потом 350 молотилок insert-а.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451035
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так попробуй не использовать no wait. Ибо что бы там ни говорил kdv, no wait это не
единственный правильный вариант.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451037
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как wait вместо no wait должен помочь в данном случае?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451038
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА как wait вместо no wait должен помочь в данном случае?

Заставит транзакцию подождать освобождения ресурса за который она конфликтует.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451051
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГРТак хочешь поймать - избавься от всех реконнектов и пр.
Оставь только 1 коннект в самом начале и запусти тест .Т.е. создать огромный скрипт не с 30 (как сейчас), а с 3000 execute_block'ами + коммитами и молотили чтобы без передыхов (типа shell ping -n 30 localhost>nul) - так ?

ГРЗаодно ещё и нагрузку можно будет увеличть.Нагрузку могу увеличить раза в полтора-два, не более.
Как-то делал 700-800 аттачей, ~полтора года взад, когда с missing entries воевал, - сервер начинает загибаться.
Ошибка (на имеющемся у мну железе) появляется не чаще, чем орбитальные сближения Марса с Землёй.

ГРБолее того, в идеале - ещё и сначала 350 коннектов и только потом 350 молотилок insert-а. Сделать что-то типа барьера (термин из java), когда 100 задач подходят к стартовой точке, НЕ начиная выполнения до тех пор, пока не откроется барьер, а затем после открытия этого шлагбаума сразу все вместе ломятся со своими 100500 insert'ами - я правильно понял твою мысль ?
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451052
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГаджимурадов РустамА как wait вместо no wait должен помочь в данном случае?Заставит транзакцию подождать освобождения ресурса за который она конфликтует.Она дождётся этот ресурс и... чего дальше ? insert не может вызвать конфликт потерянного обновления, а в условиях юзания генератора для ПК - не может также вызвать нарушание этого ПК.
Будет ли вообще сабжевая ошибка при таких условиях ?
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451054
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидОна дождётся этот ресурс и... чего дальше ?
Скорее всего сделает что хочет и пойдёт дальше работать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451059
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТаблоидОна дождётся этот ресурс и... чего дальше ?
Скорее всего сделает что хочет и пойдёт дальше работать.ну, и как зарегистрировать тот факт, что перед этим моментом она некоторое время не могла делать insert ?
т.е. вот упёрлась она wait-лбом во что-то - и как залогировать это её "затруднение" ?
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451072
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидкак залогировать это её "затруднение" ?
Никак, это рабочая ситуация.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451075
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТаблоидкак залогировать это её "затруднение" ?Никак, это рабочая ситуация.ну, и в чём профит ? с no_wait хотя бы видно, что проблема существует, а так и не увидим ничего...
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451076
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидс no_wait хотя бы видно, что проблема существует
Какая проблема?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451096
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТаблоидс no_wait хотя бы видно, что проблема существуетКакая проблема?Проблема непонятности, см. стартовый вопрос топега... :-)
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПроблема непонятности, см. стартовый вопрос топега... :-)
Проблема малоинформативности сообщений об ошибках в Firebird видна в любом случае. Но вот
отсутствие в твоих логах собственно того statement, который failed, это уже проблема твоих
логов, с Firebird не связанная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451115
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл я, где это происходит: к этому приводит во всех имеющихся случаях... запрос show version!
Этот запрос сидит в самом начале .sql-скрипта, выполняемого каждой молотилкой. Вот как он выглядит:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
set warnings off; set sql dialect 3; 
 show version;  
show database; 

set heading off; set list off;  
select '-- PACKET # 1:' BEGIN_SECTION from rdb$database; commit;  
COMMIT;
SET TRANSACTION READ WRITE READ COMMITTED RECORD_VERSION NO WAIT;
set heading off;
set list off;
set term ^;

execute block returns(msg varchar(200)) as
   <. . . тут идут insert'ы (в других двух скриптах - update & delete) . . .>
end
^set term ;^
commit;

select 'Take some pause at '||cast('now' as timestamp) msg from rdb$database;
-- тут ему даётся передых, примерно 30 сек:
shell rndpause.bat;
select 'Pause is over   at '||cast('now' as timestamp) msg from rdb$database;

----------------------------------------------------------------------------------
-- а теперь всё повторяем заново,  ЗА ИСКЛЮЧЕНИЕМ  show version & show database:
set heading off; set list off;  
select '-- PACKET # 2:' BEGIN_SECTION from rdb$database; commit;  
COMMIT;
SET TRANSACTION READ WRITE READ COMMITTED RECORD_VERSION NO WAIT;
set heading off;
set list off;
set term ^;

<. . . далее всё повторяется . . . >
Перед вызовом isql с вышепоказанным скриптом и сразу после возврата из isql в батнике в тот же лог пишется "Start iter #..." и "Finish iter #..." соотв-но.
Вызов isql идёт с ключиком `-b` (bail on error), поэтому при обломе ЛЮБОЙ из команд скрипта (в т.ч. show-) будет немедленный возврат из скрипта.

В итоге, вместо вот такого лога:
типичный лог, когда нет ошибок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
-- INSERTING, window # 247.  Start  iter # 1  at 19:23:18,00 
ISQL Version: WI-V2.5.3.26682 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-T3.0.0.30695 Firebird 3.0 Alpha 1"
Firebird/linux AMD64 (remote server), version "LI-T3.0.0.30695 Firebird 3.0 Alpha 1/tcp (oel64)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26682 Firebird 2.5/tcp (CSMIRROR)/P12"
on disk structure version 12.0
Database: 192.168.0.220/3330:idx_test
        Owner: SYSDBA                         
PAGE_SIZE 4096
Number of DB pages allocated = 32220
Sweep interval = 0
Forced Writes are OFF
Transaction - oldest = 739
Transaction - oldest active = 740
Transaction - oldest snapshot = 179
Transaction - Next = 2480
ODS = 12.0
Default Character set: WIN1251

-- PACKET  # 1 : 


-- attach_id=285, intro .sql at 2013-11-02 19:23:07.8550, init gen_test=1312440                                                                                                                          
-- adding 147 rows, v_rnd4err=0.69, LOWER_THRESHOLD_FOR_ERR=0.00, v_last_gen=1312440                                                                                                                     
insert into tmp(. . .) values(. . .); -- i=0                                 
insert into tmp(. . .) values(. . .); -- i=1                                  
<...>
insert into tmp(. . .) values(. . .); -- i=146                              
commit; -- finish adding 147 rows at 2013-11-02 19:23:07.8670, i=147, curr gen_test=1312637                                                                                                              


Take some pause at 2013-11-02 19:23:07.8720  


Pause is over   at 2013-11-02 19:23:35.7900  


-- PACKET  # 2 : 

<... далее всё, как в пакете # 1: несколько сотен аналогичных строк. . .>

-- INSERTING, window # 247.  Finish iter # 1  at 19:28:26,98 

-- в каждом "странном" случае получаю вот такую пустышку:

Код: plaintext
1.
2.
3.
4.
-- INSERTING, window # 91.  Start  iter # 19  at 20:53:22,22 
ISQL Version: WI-V2.5.3.26682 Firebird 2.5
Server version:
-- INSERTING, window # 91.  Finish iter # 19  at 20:53:28,92 

И сопоставляя выведенный текст (в этой пустышке) с временем возникновения ошибки:
Код: plaintext
1.
2.
3.
4.
2013-11-02  20:53:26 .206 Statement failed, SQLSTATE = 40001
2013-11-02 20:53:26.721 lock conflict on no wait transaction
2013-11-02 20:53:26.721 After line 0 in file t004-ins-log.sql
2013-11-02 20:53:28.721 Cannot get server version without database connection
2013-11-02 20:53:28.721 Command error: show database
-- вижу, что спотыкач случился именно на show version .
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451122
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидвижу, что спотыкач случился именно на show version.
Правильно. Потому что CONNECT обломился с приведённой ошибкой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451128
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТаблоидвижу, что спотыкач случился именно на show version.
Правильно. Потому что CONNECT обломился с приведённой ошибкой.А не обломился ли он именно от того, что первая команда в скрипте есть show version ?
PS. Вызов isql'я (на всякий):
Код: plaintext
%fb_isql% %fb_testdb%  -b -n -now -q  -user %fb_usr% -pas %fb_psw% -i t004-%mode%-log.sql 2>&1 1>>%fb_log% | mtee /d/t/+ %fb_err% > nul
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451130
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Нашёл я, где это происходит: к этому приводит во всех имеющихся случаях... запрос show version!

Начал было отвечать на твоё сообщение выше, но вовремя увидел это.
Так вот - так тебе и надо! :)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451134
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТаблоид> Нашёл я, где это происходит: к этому приводит во всех имеющихся случаях... запрос show version!

Начал было отвечать на твоё сообщение выше, но вовремя увидел это.
Так вот - так тебе и надо! :)а чё не так ? нельзя версию спросить, что ле ?!.. :-)
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451148
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> а чё не так ?

Подход к тестированию:

а) тест синтетически не чистый (у тебя всегда так)
б) тест плохо реализован (выводить кривой
оператор нужно было сразу, а не с подсказки ДСа).

> нельзя версию спросить, что ле ?!.. :-)

Да хоть обспрашивайся, мне не жалко. :)
Но посягать на святое - бесконфликтность
инсертов - не нааадо!...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
    #38451182
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамИначе старый рецепт бесконфликтности insert-ов
придётся пересматривать, чего лично мне очень бы не хотелось. Я в оракле недавно наткнулся на блокировку при вставке из-за наличия bitmap индекса. Было больно.
...
Рейтинг: 0 / 0
25 сообщений из 135, страница 1 из 6
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / lock conflict при работе 350 аттачей, делающих только insert'ы. Отчего ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]