|
|
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hi all Хотелось бы понять, что можно получить с помощью этого инструмента. Начну со следующего теста. Дано: Код: plaintext 1. 2. 3. 4. Код: plaintext Далее: Код: plaintext 1. Запускаю еще один isql: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 20:06:19 acquire/sacqwait/s%acqwaitacqrtry/srtrysuc/senqueue/sconvert/sdowngrd/sdequeue/sreadata/swrtdata/sqrydata/sdblop/srellop/spagelop/stranlop/srelxlop/sidxxlop/smisclop/swait/sreject/stimeout/sblckast/swakeup/sdlkscan/sdeadlck/s20:06:2020:06:2120:06:2220:06:2320:06:2420:06:2520:06:2620:06:27 < insert #1 19199123111941212220:06:2820:06:2920:06:3020:06:3120:06:3220:06:3320:06:3420:06:3520:06:36 < insert in #2 1919913211831413320:06:3720:06:3820:06:3920:06:4020:06:4120:06:4220:06:4320:06:4420:06:4520:06:4611120:06:4720:06:4820:06:4920:06:5020:06:5120:06:5220:06:5320:06:5420:06:5520:06:5611120:06:5720:06:5820:06:5920:07:0020:07:0120:07:0220:07:0320:07:0420:07:0520:07:0611120:07:0720:07:0820:07:0920:07:1020:07:1120:07:1220:07:1320:07:1420:07:1520:07:1611120:07:1720:07:1820:07:19 < commit in #1 1 1313491651120:07:2020:07:2120:07:2220:07:2320:07:2420:07:2520:07:2620:07:2720:07:2820:07:2920:07:3020:07:3120:07:3220:07:3320:07:34 Если подключить третье isql-окно и в нём также попытаться ввести дубликат первичного ключа, то лог покажет вместо единиц двойки (две ожидающих транзакции ?), но в других ячейках будут значения, отличающиеся в разную сторону от случая с двумя окнами: 20:18:31acquire/sacqwait/s%acqwaitacqrtry/srtrysuc/senqueue/sconvert/sdowngrd/sdequeue/sreadata/swrtdata/sqrydata/sdblop/srellop/spagelop/stranlop/srelxlop/sidxxlop/smisclop/swait/sreject/stimeout/sblckast/swakeup/sdlkscan/sdeadlck/s20:18:3220:18:3320:18:3420:18:3520:18:36 < insert in #1 23231133211151313320:18:3720:18:3820:18:3920:18:4020:18:4120:18:4220:18:4320:18:4420:18:4520:18:4620:18:4720:18:4820:18:4920:18:5020:18:5120:18:5220:18:5320:18:5420:18:5520:18:5620:18:5720:18:5820:18:5920:19:00 < insert in #2 111141341413320:19:0120:19:02 < insert in #3 515142311132155413420:19:0320:19:0420:19:0520:19:0620:19:0720:19:0820:19:0920:19:1020:19:1120:19:1222220:19:1320:19:1420:19:1520:19:1620:19:1720:19:1820:19:1920:19:2020:19:2120:19:2222220:19:2320:19:2420:19:2520:19:2620:19:2720:19:2820:19:2920:19:3020:19:3120:19:3222220:19:3320:19:3420:19:3520:19:3620:19:3720:19:3820:19:3920:19:4020:19:4120:19:4222220:19:4320:19:4420:19:4520:19:4620:19:4720:19:4820:19:4920:19:5020:19:5120:19:5222220:19:5320:19:5420:19:5520:19:5620:19:5720:19:5820:19:5920:20:0020:20:01 < commit in #1 42819421536121281626920:20:0220:20:0320:20:0420:20:05 1) "Кто" проверяет занятый ресурс 1 раз в 10 сек ? 2) Если проверки идут только 1 разв 10 сек, то почему после commit'a и высвобождения ресурса все ожидающие его транзакции узнают об этом тотчас ? 3) Где можно почитать описание столбцов этого лога ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 20:35:38 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидВОПРОСЫ. RTFM firebird.conf на предмет DeadlockTimeout. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 20:44:10 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТаблоидВОПРОСЫ. RTFM firebird.conf на предмет DeadlockTimeout.А, точно, псип. Так. Поставил я 5 сек, рестартанул ФБ. Вижу, что проверки действительно стали чаще. Повторил эксперимент с четырьмя окнами (одно ввело запись без коммита, остальные три - пытаются ввести дубли в ПК и ждут). Затем стал срубать все ждущие isql-окна (Ctrl-Break). Вижу, однако, что опрос лок-менеджера продолжает идти - т.е. цифры "3" так и продолжают появляться в логе каждые 5 сек. До тех пор, пока я не срубил первое окно (которое вводило запись). 20:47:44acquire/sacqwait/s%acqwaitacqrtry/srtrysuc/senqueue/sconvert/sdowngrd/sdequeue/sreadata/swrtdata/sqrydata/sdblop/srellop/spagelop/stranlop/srelxlop/sidxxlop/smisclop/swait/sreject/stimeout/sblckast/swakeup/sdlkscan/sdeadlck/s20:47:4520:47:4620:47:4720:47:4820:47:4920:47:5020:47:5120:47:5220:47:5320:47:5420:47:5520:47:5620:47:57995211143120:47:5820:47:5920:48:0020:48:0120:48:0220:48:0320:48:0420:48:0520:48:0620:48:07525242411132155514420:48:0820:48:0920:48:1020:48:1120:48:1211120:48:1320:48:14545442411132155514620:48:1520:48:1620:48:1720:48:1820:48:1922220:48:2020:48:2120:48:2220:48:2320:48:24562356424111321555146220:48:2520:48:2620:48:2720:48:2820:48:2933320:48:3020:48:3120:48:3220:48:3320:48:3433320:48:3520:48:3620:48:3720:48:3820:48:3933320:48:4020:48:4120:48:4220:48:4320:48:4433320:48:4520:48:4620:48:4720:48:4820:48:4933320:48:5020:48:5120:48:5220:48:5320:48:5433320:48:5520:48:5620:48:5720:48:5820:48:5933320:49:0020:49:0120:49:0220:49:0320:49:0433320:49:0520:49:0620:49:0720:49:0820:49:0933320:49:1020:49:1120:49:1220:49:1320:49:1433320:49:1520:49:1620:49:1720:49:1820:49:1933320:49:2020:49:2120:49:2220:49:2320:49:2433320:49:2520:49:2620:49:2720:49:2820:49:2933320:49:3020:49:3120:49:3220:49:3320:49:3433320:49:3520:49:3620:49:3720:49:3820:49:3933320:49:4020:49:4120:49:4220:49:4320:49:4431333320:49:4520:49:4620:49:4720:49:4820:49:49437235437328113644323132828136122320:49:5020:49:5120:49:5220:49:5320:49:5420:49:5520:49:5620:49:5720:49:5820:49:59 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 20:55:40 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидЗатем стал срубать все ждущие isql-окна (Ctrl-Break) думаю, что замена локального коннекта на локалхост и/или использование ctrl-c вместо ctrl-break привнесут разницу. И таки да, тебе об этом уже говорили, причем по обоим пунктам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 09:23:13 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrдумаю, что замена локального коннекта на локалхост и/или использование ctrl-c вместо ctrl-break привнесут разницу.При коннектах пяти окон по tcp (и, след-но, ожидании четырёх окон) картина меняется. Почти каждую секунду в графах acquire/s и acqrtry/s появляются значения: то 1, то 2. При обрубе окон по Ctrl-Break значения в этих графах будут в итоге нулевыми. При коммите и получении сообщений о наружении ПК - также всё сразу в ноль. 12:30:25acquire/sacqwait/s%acqwaitacqrtry/srtrysuc/senqueue/sconvert/sdowngrd/sdequeue/sreadata/swrtdata/sqrydata/sdblop/srellop/spagelop/stranlop/srelxlop/sidxxlop/smisclop/swait/sreject/stimeout/sblckast/swakeup/sdlkscan/sdeadlck/s12:30:2612:30:2712:30:2812:30:2912:30:3012:30:31525242411132155514412:30:3212:30:3312:30:3412:30:35545442411132155514612:30:3612:30:3712:30:3854115442411132155514612:30:3912:30:4011112:30:41171717133112:30:423737232411119124514612:30:4311112:30:4412:30:451112:30:4622212:30:4712:30:481112:30:4912:30:501112:30:511112:30:521112:30:531112:30:5412:30:551112:30:5612:30:572212:30:581112:30:5912:31:001112:31:0112:31:022212:31:031112:31:0412:31:051112:31:0612:31:07215212:31:081112:31:0912:31:101112:31:1112:31:122212:31:131112:31:1412:31:151112:31:1612:31:172212:31:181112:31:1912:31:201112:31:211112:31:2212:31:231112:31:2412:31:251112:31:261112:31:2712:31:281112:31:2912:31:301112:31:3112:31:32215212:31:331112:31:3412:31:351112:31:3612:31:372212:31:381112:31:3912:31:401112:31:4112:31:422212:31:431112:31:4412:31:451112:31:4612:31:472212:31:481112:31:4912:31:501112:31:5112:31:522212:31:531112:31:5412:31:551112:31:561112:31:571112:31:581112:31:5912:32:0013149371314272161513121623512:32:0112:32:0212:32:0312:32:0412:32:0512:32:0612:32:0712:32:08 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:40:19 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидо чём "об этом"? о том, что: - ctrl-break не равен ctrl-c и не прерывает текущую операцию на сервере - сервер обнаруживает отвал клиента (твой ctrl-break) и сразу закрывает коннет только в TCP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 12:54:13 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Вижу (не в первый не в первый раз уже), что когда в логе fb_lock_print -i N M значения равны нулям, то это означает сильный (или полный) ступор. Создал пустую базу, в ней: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Создал следующий .sql-скрипт для одновременного его вызова из большого числа isql-окон: Код: sql 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. Этот скрипт будет в бесконечном цикле дёргать генератор `g`, засекая время этой операции и записывая его в таблицу `log` в случае превышения некоторого порога (например, 500 мс). Кроме того, если на очередной итерации выяснится, что значение генератора оказалось меньше нуля, то будет немедленное прекращение работы скрипта. Батник для старта произвольного числа isql-окон: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Перед началом теста запустил в двух окнах накопительное логирование: 1) fb_lock_print -d: Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. Затем запустил с трёх машин в общей сложности около 850 isql-окон. Конечно, в период установки такого числа коннектов (около 3-4 минут) время дёргания генераторов каждым из них могло быть неадекватным. Интересовало, что будет дальше, когда все коннекты уже войдут в работу. Поэтому я дал им промолотить около 3 часов. Ну, так вот. Если взять первые 200 строк лога, упорядоченные по убыванию времени получения gen_id, то получим следующий результат: conn_idgen_msdts880275819:37:181468275819:37:181503275819:37:181106275819:37:181278275819:37:181527275719:37:181017275719:37:181696275719:37:181330275619:37:181260275619:37:18877275519:37:181206275419:37:181615275419:37:181192275419:37:181562275419:37:181044275419:37:181653275319:37:181320275319:37:181646275319:37:18914275319:37:181068275319:37:181418275319:37:181321275319:37:181021275119:37:181517275019:37:181665275019:37:181647275019:37:181650275019:37:181509275019:37:181282275019:37:181501274919:37:181610274919:37:181173274919:37:181266274919:37:181618274919:37:18973274919:37:181092274719:37:181187274619:37:18879274619:37:181432274519:37:181386274519:37:18972274519:37:181074274519:37:181451274519:37:181682274519:37:18925274319:37:181309274319:37:181186274219:37:181410274219:37:181159274119:37:181388274119:37:181415274119:37:181334274119:37:181560274119:37:181004274119:37:181244274019:37:181426274019:37:181012273619:37:181048273519:37:181525273519:37:18988273519:37:18907273519:37:181359273519:37:181664273419:37:181473273419:37:181108273419:37:181486273319:37:181053273319:37:18915273319:37:181105273319:37:181299273319:37:181620273319:37:181663273219:37:181383273219:37:181508272919:37:181547272819:37:181264272619:37:181498272619:37:18942272619:37:181690272619:37:181380272619:37:181283272619:37:181290272619:37:181240272619:37:181289272619:37:181029272519:04:481653272519:04:481367272519:04:481356272519:37:181188272519:37:181293272519:37:181723272519:37:181445272519:37:181097272519:37:181261272519:37:18943272519:37:181605272419:04:481120272419:04:48912272419:04:481672272419:04:481496272419:04:481167272419:04:481322272419:04:481115272419:04:481112272419:04:481350272419:04:481534272319:04:48937272219:37:181582272119:04:481566272119:37:181212272119:37:181172272019:04:481441272019:37:181392272019:37:18897271919:04:481379271919:04:481406271919:04:481203271919:04:481128271919:04:481572271919:37:181629271919:37:181003271919:37:181501271819:04:48980271819:04:481326271619:37:18892271619:37:18935271619:37:181607271519:04:481361271519:04:481473271519:04:481521271519:04:481011271519:37:181712271519:37:181293271419:04:481493271419:04:481358271419:37:181595271419:37:181458271419:37:181020271319:37:181215271219:04:481241271119:04:481603271119:04:481689271119:04:481083271119:37:181427271019:04:481719271019:04:481342271019:04:481025271019:37:181040271019:37:181089270919:04:481701270919:37:181471270919:37:181462270919:37:181354270919:37:181571270819:37:181446270819:37:181007270819:37:181654270819:37:181182270619:04:481681270619:04:481312270619:04:481482270619:37:181052270519:04:481719270519:37:181600270519:37:181485270519:37:181700270419:04:48925270419:04:481261270419:04:481022270419:04:48921270419:37:181310270419:37:181563270419:37:181401270419:37:181357270419:37:181133270419:37:181125270419:37:18989270419:37:181270270419:37:18940270419:37:181606270419:37:18908270419:37:181687270419:37:181531270419:37:181526270419:37:181546270419:37:181301270419:37:18901270419:37:181228270419:37:18882270419:37:181081270419:37:181633270319:04:48915270319:04:481388270319:04:481408270319:04:481644270319:37:181710270319:37:181443270319:37:181306270319:37:181693270319:37:18 Первому моменту времени в логе fb_lock_print -i 1 N соответствует вот это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. 2 dimitr: я помню, что ты мне говорил про эти "нулевые строки", когда шло исследование долгих коннектов. Они возникали при снятии бактрассы fb_smp_server'a одним из мониторных окон. Но сейчас этого нет. Идёт снятие только ЛТ, причём без ключика '-c'. Отчего тогда могут возникать эти затыки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:42:30 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидОтчего тогда могут возникать эти затыки ? от ожидания на блокировках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:15:37 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrот ожидания на блокировкахну, так вот я и хочу понять: где-то видны эти ожидания ? в развернутом отчете fb_lock_print'a ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:21:51 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидгде-то видны эти ожидания ? в развернутом отчете fb_lock_print'a ? конечно. С ключом -w, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 17:23:01 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидгде-то видны эти ожидания ? в развернутом отчете fb_lock_print'a ? конечно. С ключом -w, например.Хорошо, вернусь к начальному примеру. Код: plaintext 1. 2. 3. 4. Снимаю ЛТ на этот момент: fb_lock_print -w -d T1.FDB Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. Снимаю еще раз ЛТ: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Далее делал снимок ЛТ в этом же состоянии еще несколько раз: Код: plaintext 1. 2. 3. 4. 5. 6. 7. С интервалом, равным указанному в firebird.conf значению DeadlockTimeout (у мну он = 5), минус ~0.5 сек(?): Код: 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. А как понять, какая транзакция (или коннект ?) и чего именно ждёт ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 20:57:32 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидА как понять, какая транзакция (или коннект ?) и чего именно ждёт ? смотреть вывод утилиты ниже заголовка и интерпретировать его. Я об этом рассказывал на конфе, запись доступна в онлайне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 21:12:31 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrЯ об этом рассказывал на конфе, запись доступна в онлайне.Прослушал твой доклад на конфе-2011: http://www.ютуб.com/watch?v=iYNjwbYcjuc - появилось несколько вопросов (частично - потому что не смог перевести какие-то фразы, частично - слова понял, а смысл - нет). 0) время 00:25:43. Там говорится про remap лок-таблицы, когда она упирается в потолок LockMemSize. Вопрос: на сколько увеличивается в размере ЛТ, когда ей становится мало места ? 1) время 00:28:55. Что такое request-статус = 0x100 (Blocking Seen ) ? 2) время 00:38:15. Речь идёт о возможном указании в переменной окружения FIREBIRD_LOCK каталога, в котором будет храниться лок-таблица. И что кто-то там (настроив правильно размер ЛТ и HashSlots, но продолжая иметь траблы с произв-стью), назначил этой переменной каталог на RAM-диске, и у него производительность увеличилась на 50%. Вопросов тут на самом деле два: 2.1) если я правильно перевёл, ты говоришь там, что ЛТ хранится в каталоге установки ФБ. Но почему я вижу файлы fb_lock_XXX всегда в /tmp/firebird ? 2.2) зачем вообще ЛТ вытряхивать на диск, если эта структура актуальна только в момент работы с базой ? Что от неё может "пригодиться", если будет рестарт ФБ или сервака ? 3) Что обозначается в ЛТ под free-объектами (owners; locks; requests) ? 4) Не засёк в докладе места, где бы говорилось вот об этом: Код: plaintext 5.1) Допустим, увижу я в ЛТ, что некий owner, которому соотв-вует thread с id = 12345, является "держимордой" и из-за него всё заклинило. Если этот клиент просто держит что-то, НИЧЕГО не делая, то вычислить его через mon$statements не получится. Как тогда его найти ? (речь идёт о SuperClassic'e, ес-сно). 5.2) Пригляделся я к выводу fb_lock_print -o -d prodfile.fdb и охватил мну ужасный кошмар. Что там за ID'шники у thread'ов ? Вот вывод этой команды (первые 30 строк): Код: 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. я никогда не видел такого кошмара: thread id = 140170150016784, как мне сопоставить сиё с выводом потоков для fb_smp_server'a: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ЗЫ-1. В докладе на точках 00:00:48 и 00:50:20 идёт весьма ценная инфа про Hash lengths (min/avg/max) и Mutex wait%, а именно: 1) если avg больше 10, то пора увеличивать hashslots; 2) если mutex wait показатель около 12%, то следует насторожиться и анализировать причину этого. А если 20% и выше, то это уже плохо. ИМХО, надо бы сиё в firebird.conf добавить. Равно как и формулу примерного значения LockMemSize = ~ page_cache * max_connects * 100 (время ~00:31:45) ЗЫ-2. Жаль, что доклада нет в читабельном виде. На слух трудно, буду переслушивать заново. Так что вопросы еще будут, это точно :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2013, 21:40:18 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
0) на LockMemSize 1) блокирующему был доставлен АСТ и с этого момента он считается оповещенным (ждем его реакции) 2.1) до 2.5 в ФБ-руте, после - в темпе 2.2) ЛТ - это расшаренная между процессами память, сиречь MMP (memory-mapped file) 3) объекты для повторного использования, т.к. ЛТ никогда не уменьшается в размере 4) счетчики операций. enq - новый лок, cnv - изменение статуса лока, rej - отказ в локе, blk - факт блокировки кого-либо 5.1) gdb и сорцы тебе в руки 5.2) забей, это поле только для отладки, ибо отражает не текущее, а последнее известное состояние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 00:37:01 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitr5.1) gdb и сорцы тебе в рукиАааа!!! Правильно ли я понял, что: 1. Создав примитивную БД с master & detail табличками: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 2. Запустив два isql, в первом из которых удаляю master-запись ( без commit'a), а во втором - пытаясь добавить в detail строку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3. Создав снимок лок-таблицы с ключиками -a -m (см аттач) - я всё равно НЕ получу никакой инфы о номере транзакции / коннекта, который не даёт добавить строку в detail-таблицу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 00:54:26 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Вывод REQUEST BLOCK'ов (<==> ресурсов ) для каждого из двух owner'ов (<==> коннектов ) какой-то сверхъестественный: примерно по 700 строк на каждый коннект. Что можно было запросить у базы, удаляя одну строку в мастере (и еще одну же в детали), либо делая запрос на добавление строки ? Не понимаю, как можно разбираться в этом без надлежащего инструмента-парсера :( многабукф! Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. Тут какие-то lrq_own _requests и lrq_lbl _requests появились - о них в докладе я тоже не засёк ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 01:10:01 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitr5.1) gdb и сорцы тебе в рукиа это... что делать тем, кто под виндузой сидит, у них же gdb нету ? (да и знать бы еще, куда там в логе gdb смотреть... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 01:12:56 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitr2.2) ЛТ - это расшаренная между процессами память, сиречь MMP (memory-mapped file)А зачем это же распространять на SuperClassic, в котором процесс - один ? (потоки - они могут видеть шаред-область без "материализации" её в виде файла или нет ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 01:25:29 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидА зачем это же распространять на SuperClassic, в котором процесс - один ? кто тебе такое сказал? Твои embedded-коннекты от isql/gfix/gbak/etc святым духом с базой работают, ага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 08:36:00 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидя всё равно НЕ получу никакой инфы о номере транзакции / коннекта, который не даёт добавить строку в detail-таблицу? для NOWAIT транзакции есс-но не получишь, ибо не сможешь в ЛТ найти ожидающий коннект. Для WAIT - номер коннекта найдешь при желании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 08:39:20 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидВывод REQUEST BLOCK'ов (<==> ресурсов ) для каждого из двух owner'ов (<==> коннектов ) какой-то сверхъестественный: примерно по 700 строк на каждый коннект. Что можно было запросить у базы, удаляя одну строку в мастере (и еще одну же в детали), либо делая запрос на добавление строки ? на каждую занятую страницу кеша - по одному риквесту, плюс локи на метаданные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 08:43:03 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидчто делать тем, кто под виндузой сидит, у них же gdb нету? у них есть Visual Studio ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 08:46:05 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидНе понимаю, как можно разбираться в этом без надлежащего инструмента-парсераПытаюсь разобраться в "минимально возможных дебрях". Будет много букаф, извиняйте. Создана пустая база и единственный коннект к ней: Код: plaintext 1. 2. 3. Единственный коннект (owner id=18744) запросил при этом 9 ресурсов: Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. На три "объекта" были запрошены и получены exclusive -блокировки (оба "поля": state & mode - равны 6). Эти три request-блока имеют в полях Lock id'шники = 18892, 19704 & 19876 . Идём в секцию полученных локов (lock block's, ниже request'ов). Блок 18892 (последний в выводе) имеет вид: Код: plaintext 1. 2. 3. 4. 5. 6. Helen Borrie, page 868SymbolSeriesDescriptionLCK_database.1database lock is taken by eachprocess that attaches a database. The first process takes an exclusive lock. The next process notices a conflict and signals the first to downgrade its lock from exclusive to shared Блок 19704 имеет вид: Код: plaintext 1. 2. 3. 4. 5. Helen Borrie, page 868SymbolSeriesDescriptionLCK_attachment7Not used. Attachment lock to support dBase record locks, which can exist across transaction boundaries. Блок 19876 имеет вид: Код: plaintext 1. 2. 3. 4. 5. =============== Еще один lock bloсk, id = 19240, имеет state = 5 ( protected write: "is used for constsency mode (table stability)"): Код: plaintext 1. 2. 3. 4. 5. Но что это за объект - непонятно. В Большой Книге типы объектов ("серии") заканчиваются номером 17 (LCK_update_shadow). ================ Блок с id = 19016 имеет state = 3 ( protected read: все могут читать этот блок, но никто не может в него записывать - правильно ?). Код: plaintext 1. 2. 3. 4. 5. ================ Остальные блоки имеют статус = 2 ( shared read): Код: plaintext 1. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. Helen Borrie, page 868SymbolSeriesDescriptionLCK_rel_exist5Relation existence lock. Prevents tables from being dropped while any owner has a prepared request that uses that table.Опять не понимаю: НЕТ ни одной таблицы в базе (за исключением словарных), чего тут блокировать надо ? PS. Пфф... без инструмента типа IBAnalyst (в смысле наглядности инфы) - тяжко... Ну, и чувствуется, что Большая Книга устарела кое-где: не все типы серий расписаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 09:25:41 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrДля WAIT - номер коннекта найдешь при желании.А кто работает в wait-режиме ? Это же камикадзе надо быть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 09:30:23 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидНЕТ ни одной таблицы в базе (за исключением словарных), чего тут блокировать надо ? системные таблицы тоже надо блокировать, они отнюдь не волшебные. А на "книгу" забей, ты ей только голову себе задурил. Смотри в своих сорцах /src/jrd/lck.h, вопросы отпадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 09:55:33 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидя всё равно НЕ получу никакой инфы о номере транзакции / коннекта, который не даёт добавить строку в detail-таблицу?для NOWAIT транзакции есс-но не получишь, ибо не сможешь в ЛТ найти ожидающий коннект. Для WAIT - номер коннекта найдешь при желании.Хорошо, вот пример с WAIT. Новая база, таблица t(id int, f01 int); В таблицу добавлена единственная строка: id=1, f01=1, после чего выполнен quit. Затем: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. В этот момент была снята ЛТ: Код: plaintext Допустим, надо понять, кто не даёт второму коннекту проапдейтить строку. В лок-таблице ищем строку с pending: NNNNN, где NNNNN > 0. Такой блок - один (в данной ситуации): Код: plaintext 1. 2. 3. 4. 5. Если теперь поискать строку вида 'BLOCK 216240", то мы выходим на вот это: Код: plaintext 1. 2. 3. 4. 5. То, что в этом блоке записано "Owner: 215480", подсказывает очевидное: мы нашли нечто, что хотел заблокировать зависший коннект с id=215480. А хотел он залочить объект с id = 214264. Ищем далее строку "BLOCK 214264" и находим её тут: Код: plaintext 1. 2. 3. 4. 5. 6. Отлично. Ищем теперь строку "OWNER BLOCK 212936". Находим этот блок в самом начале ЛТ: Код: plaintext 1. 2. 3. 4. 5. 6. Номер коннекта (который равен 6 - см выше), номер транзакции - в где они тут ? С другой стороны, в mon$statements видим (с третьего окна): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. В общем, я так и не понял, как в ЛТ найти транзакцию-"держиморду", которая не даёт развиваться остальным. Что в wait-режиме, что без него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 12:58:18 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ищи лок с series = LCK_attachment, у которого будет всего один owner = 212936. Это LOCK BLOCK 214080. Его key равен номеру коннекта. С транзакцией сложнее, т.к. она напрямую с локом не связана. Если ожидание именно на записи, то смотри key у конфликтного лока 214264. Либо просто ищи все тр-ции данного овнера по вышесказанному алгоритму, только для series = LCK_tra. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 13:29:19 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrищи лок с series = LCK_attachment, у которого будет всего один owner = 212936. Это LOCK BLOCK 214080. Его key равен номеру коннекта. С транзакцией сложнее, т.к. она напрямую с локом не связана. Если ожидание именно на записи, то смотри key у конфликтного лока 214264. Либо просто ищи все тр-ции данного овнера по вышесказанному алгоритму, только для series = LCK_tra.Нашёл, псип. Вот они, коннекты (6 и 8 для данного примера): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ЗЫ. Соответствие номеров серий их мнемоникам вытащу сюда, чтобы в дальнейшем не рыскать по сырцам. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 13:39:00 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидСоответствие номеров серий их мнемоникам вытащу сюдаХм... а почему в этом списке нет краткосрочных блокировок (латчей ?), которые ставятся на страницы при их считывании ? (например, при получении gen_id, да и вообще при получении содержимого любой записи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 15:21:17 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
страничные локи - это LCK_bdb. Страничные латчи - это несколько другое и не относится к ЛМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 18:18:26 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrстраничные локи - это LCK_bdb. Страничные латчи - это несколько другое и не относится к ЛМ.LCK_bdb - это блокировка, для которой Series = 3 (я выше вытряхнул из lck.h соотв-щее перечисление). Тогда вышеприведенного примера и снимка ЛТ (файл выше в аттаче) получается 66(!) блокировок страниц: Код: plaintext 1. Если посмотреть на эти lock block'и, то увидим, только одна страница схвачена в режиме exclusive ( state=6 ), а все остальные - в режиме protected read (state=3): Код: plaintext 1. 2. 3. 4. 5. 6. Про protected read догадываюсь: это блокировки метаданных, чтобы никто таблицу `t` не дропнул. Но про последнюю, exclusive-блокировку: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:26:30 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrСтраничные латчи - это несколько другое и не относится к ЛМ.Если так, то существует ли механизм определения времени, затрачиваемого на получение этих латчей, скажем, при выполнении какого-нибудь сверхтяжкого селекта ? Т.е. вот идёт селект, ему надо прочесть огромное число страниц базы (не говоря уже про число строк таблиц!). Он запрашивает латчи на чтение каждой страницы, затем "отпускает" страницу и идёт дальше. Сколько времени у него уходит на это - как определить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 19:31:50 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидСколько времени у него уходит на это - как определить ? никак. Но в твоем случае пофиг, ибо за латчи в SC/CS практически нет конкуренции. Они свои в каждом экземпляре кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 20:43:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидимею вопрос: страница базы номер 170, затолканная в hash-гнездо номер 1, сейчас заблокирована "вусмерть", т.е. её нельзя даже прочитать . Это так ? не так. Этот лок просто кеширован коннектом. Когда кто-либо еще будет брать эту страницу, лок отпустится по АСТу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 20:45:16 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Очередной вопросик возник. Создал базу, page_size = 16K, в ней - табличку: Код: sql 1. 2. 3. 4. Дальше отсоединился и выполнил b/r. Таблица с двумя записями, очевидно, влезла в одну страницу базы: gstat -r Код: plaintext 1. 2. 3. 4. 5. 6. 7. Затем запускаю два isql окошка и в каждом них делаю апдейты строк без lock conflict'ов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plaintext Если я правильно понимаю, снимок ЛТ должен содержать множество lock block'ов с сериями = 3 (это LCK_bdb - Individual buffer block). Причём, та единственная страница базы, в которой живут две записи таблицы `T`, должна встречаться в двух lock block'ах - ведь два коннекта держут "свои" блокировки записей, которые живут на этой самой странице. И в каждом из этих лок-блоков должны быть блокировки уровня shared write, что соответствует "state: 4". Я не вижу в упор, где это в ЛТ (она в аттаче). Ибо команда поиска: Код: plaintext findstr result Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 00:16:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоиддва коннекта держут "свои" блокировки записей Ничего они не держут. Заблокировали что нужно, сделали своё грязное дело и давно уже блокировки отпустили так, что ты и глазом моргнуть не успел. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 00:26:45 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНичего они не держут. Заблокировали что нужно, сделали своё грязное дело и давно уже блокировки отпустили так, что ты и глазом моргнуть не успел.Это как это ?! а "кто" тогда мешает третьему коннекту проапдейтить эти же строки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 00:28:22 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоида "кто" тогда мешает третьему коннекту проапдейтить эти же строки ? Совесть. Он видит наличие незакоммиченных версий. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 00:46:40 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОн видит наличие незакоммиченных версий.Этого мало. Он также должен видеть, живые ли соотв-щие транзакции. Тогда получается, что составить картину типа "Кто чего сейчас держит заблокированным" практически нереально: надо пройтись по всем незакоммиченным версиям и попробовать "тихо" их залочить, чтобы понять, живы ли соотв-щие транзакции - владельцы блокировок, а затем "разлочить". Этот процесс будет выполняться долго и всё загнётся. Я прав в своей догадке ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 00:57:59 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидОн также должен видеть, живые ли соотв-щие транзакции. А для этого у него есть TIP и возможность послать сигнал "есть кто живой" другой транзакции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 01:09:36 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидПричём, та единственная страница базы, в которой живут две записи таблицы `T`, должна встречаться в двух lock block'ахНет, ибо страница - одна, значит и блокировка у неё тоже одна. Вот request'ов может быть много. А lock - один. Таблоидведь два коннекта держут "свои" блокировки записейНет никаких блокировок записей. НЕТ ИХ. Таблоидблокировки уровня shared writeНет конечно. События происходили примерно так: 1. первый коннект собирается читать страницу с данными и просит SR блокировку - блокировка получена, можно читать страницу 2. первый коннект собирается менять страницу с данными и просит PW блокировку - блокировка получена, можно менять страницу - старая SR при этом отпускается 3. второй коннект собирается читать с данными и просит SR блокировку - первый коннект получает сигнал и отпускает свою PW блокировку, при этом он пишет страницу на диск - второй коннект получает SR блокировку и читает страницу с диска 4. второй коннект собирается менять страницу с данными и просит PW блокировку ... Итого: у последнего писателя есть PW блокировка, у остальных - нет никаких блокировок этой страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 02:16:44 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Чтобы ещё больше запутать Таблоида, уточню - то, что движок считает блокировками, на самом деле лишь запросы на блокировки. Т.е. в лок-менеджере им соответствуют REQUEST'ы. Есть две основные сущности - владельцы ресурсов (OWNER'ы) и собственно ресурсы, точнее их блокировки (LOCK'и). Владельцы делают запросы (REQUEST'ы) на владение ресурсами. Можно сказать, что владельцы и ресурсы связаны как M:N посредством запросов. С точки зрения владельца его список запросов есть список ресурсов которыми он владеет или хочет овладеть. С точки зрения ресурса, его список запросов можно разделить на две части: - удовлетворённые запросы (их владельцы совместно владеют ресурсом), и - ожидающие запросы (их владельцы хотят получить доступ, несовместимый с доступом первой группы) Например, из твоего файла: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Её состояние - PR (State: 3). Ею владеют 2 владельца (18744, 20992) А вот совсем другая блокировка Код: plaintext 1. 2. 3. 4. 5. 6. Её состояние - EX (State: 6). Ею безраздельно владеет владелец 20992 PS в предыдущем посте читать вместо SR и PW соответственно PR и EX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 02:31:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
С учетом вот этой фразы:hvladчитать вместо SR и PW соответственно PR и EX- подправил тот текст и получаю:hvladСобытия происходили примерно так: 1. первый коннект собирается читать страницу с данными и просит SR Protected Read блокировку - блокировка получена, можно читать страницу 2. первый коннект собирается менять страницу с данными и просит PW Exclusive блокировку - блокировка получена, можно менять страницу - старая SR при этом отпускается ВОПРОС-1. Первый коннект выдал команду UPDATE, смысл которой - поменять содержимое страницы. Да, понятно, что сначала надо найти эту страницу. Но почему нельзя после её нахождения сразу поставить exclusive-блокировку, без промежуточной PR ? И почему, кстати, нужна именно EX, разве Protected Write не будет достаточной ? (страница ведь обновляется целиком, никаких там "частичных записей" со 153-его по 234-й байт нету ==> никто не сможет прочитать её в "несогласованном" виде. Или не так ?) И еще вопрос.hvlad Код: plaintext 1. 2. 3. 4. 5. 6. Это блокировка страницы (Series: 3) с номером 143 . Её состояние - PR (State: 3). Там еще десятки аналогичных лок-блоков: Код: 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. Все они в том же самом Protected Read, т.е. эти страницы (..., 79, 80, 81, ...) сейчас можно читать, но в них нельзя записывать. ВОПРОС-2. Что это за страницы ? Как понять, к какому объекту базы они относятся ? В gstat'e по пользовательским таблицам нет инфы о номерах страниц, а rdb$-таблицы так вообще не отображаются никак. hvlad3. второй коннект собирается читать с данными и просит Protected Read SR блокировку - первый коннект получает сигнал и отпускает свою Exclusive PW блокировку, при этом он пишет страницу на диск - второй коннект получает Protected Read SR блокировку и читает страницу с диска ВОПРОС-3. По каким правилам owner-"А", получивший сигнал "отпусти ресурс!" от owner'a-"Б", решает, можно ли это делать ? Или он делает это всегда, а уж owner-"Б" должен сам позаботиться о сохранности изменений owner'a-"A" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 11:21:23 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоид ВОПРОС-1. Первый коннект выдал команду UPDATE, смысл которой - поменять содержимое страницы. Да, понятно, что сначала надо найти эту страницу. Но почему нельзя после её нахождения сразу поставить exclusive-блокировку, без промежуточной PR ? потому что update "изнутри" - это а-ля for select + update where current of. Нафига лочить страницу на запись, если предикат может оказаться ложным и мы запись не будем менять? Но иногда таки ставится сразу EX еще при чтении, если оптимизатор сочтет это более удачным. Это экономит конверсию лока. ТаблоидИ почему, кстати, нужна именно EX, разве Protected Write не будет достаточной ? в случае страничных блокировок монопенисуально, т.к. поведение читателей от этого никак не изменится ТаблоидОни отличаются только номерами внутри хеш-гнёзда ("0001:000NNN") 0001 - это не хеш-гнездо, а номер page space Таблоид ВОПРОС-2. Что это за страницы ? Как понять, к какому объекту базы они относятся ? никак (без отладчика) Таблоид ВОПРОС-3. По каким правилам owner-"А", получивший сигнал "отпусти ресурс!" от owner'a-"Б", решает, можно ли это делать ? Или он делает это всегда, а уж owner-"Б" должен сам позаботиться о сохранности изменений owner'a-"A" ? всегда, при условии что owner A в данный момент не меняет страницу. Если меняет - то отпустит "как только так сразу". О сохранности заботится owner A, записывая измененную страницу на диск - читай ответ Влада внимательнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:05:50 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидВ gstat'e по пользовательским таблицам нет инфы о номерах страниц IBSurgeonViewer покажет. правда, не на "живой" базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:14:25 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrНафига лочить страницу на запись, если предикат может оказаться ложным и мы запись не будем менять?Ну так мы всё равно её лочим, только в режиме protected read. К тому же, предикат окажется ложным после получения protected read-блокировки только в случае, когда эта же запись подверглась модификации другой транзакцией оно ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Почему нельзя так: 1) запрашиваем страницу 123 в режиме protected write 2) получили, проверяем предикат 3) предикат не изменился ==> сразу же меняем содержимое, без затрат на повышение блокировки 4) предикат изменился ==> отвал. Ы ? dimitr0001 - это не хеш-гнездо, а номер page spaceЧто это за "единица измерения", в где-то про неё написано ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:27:19 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидНу так мы всё равно её лочим, только в режиме protected read. это не мешает остальным коннектам ее читать в этот момент, в отличие от ТаблоидК тому же, предикат окажется ложным после получения protected read-блокировки только в случае, когда эта же запись подверглась модификации другой транзакцией серверу глубоко фиолетово, какой именно у тебя предикат. Может там условие 1=0. Тоже лочить все страницы на запись? ТаблоидПочему нельзя так потому что фигню написал. Я не знаю что такое "предикат изменился". ТаблоидЧто это за "единица измерения", в где-то про неё написано ? оно тебе не надо. Это область со своей нумерацией страниц. В первом приближении это файл. Для основной базы это всегда 1, для GTT - ID экземпляра данных (временного файла). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:52:30 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdvIBSurgeonViewer покажет. правда, не на "живой" базе.Дык интересуют именно возможности анализа ЛТ живой базы, на которой юзера лбами сталкиваются :-) Впрочем, любопытная штука, спасибо. Только и по ней непонятка есть - см иллюстр. ЗЫ. Этот вьювер развивается или нет ? там указан 2004-й год... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 13:53:21 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидНу так мы всё равно её лочим, только в режиме protected read.Ты разницу между shared и exclusive понимаешь ? А то, что кроме тебя, эту страницу могут хотеть прочитать ещё 100500 коннектов - тоже понимаешь ? ТаблоидК тому же, предикат окажется ложным после получения protected read-блокировки только в случае, когда эта же запись подверглась модификации другой транзакциейУ тебя всегда и везде доступ только по ПК ? Вот откуда эта категоричность ? ТаблоидНе так уж часто сиё бываетВ конкурентной среде записи могут меняться гораздо быстрее, чем ты себе можешь представить. ТаблоидПочему нельзя такДмитрий выше написал, что так иногда делается. ТаблоидЧто это за "единица измерения", в где-то про неё написано ?Это не есть инф-ция для конечного пользователя. Посему - кому надо, те и так знают. PageSpace ввели для реализации GTT. В данный момент есть PageSpace = 1, в которой учитываются страницы основной БД, и все остальные PageSpace, в которых живут данные GTT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:02:27 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrэто не мешает остальным коннектам ее читать в этот момент, в отличие отhvladТаблоидНу так мы всё равно её лочим, только в режиме protected read.Ты разницу между shared и exclusive понимаешь ? А то, что кроме тебя, эту страницу могут хотеть прочитать ещё 100500 коннектов - тоже понимаешь ?я всё это понимаю. Поэтому про exclusive и не говорил ни разу. Наоборот, заменить её хотел на PW :-) А спрашивал про protected write , которая запрещает другим писать, но НЕ запрещает читать. hvladУ тебя всегда и везде доступ только по ПК ? Вот откуда эта категоричность ?Нет, конечно. Но причём тут вид доступа ? ЗЫ. Табличка в Книге про совместимость блокировок - пущай тут тоже будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:15:48 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидспрашивал про protected write , которая запрещает другим писать, но НЕ запрещает читать будет читаться несогласованная чухня. Единственное теоретически возможное исключение - страница генераторов, о чем DS уже стонет который год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:22:22 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоидспрашивал про protected write, которая запрещает другим писать, но НЕ запрещает читать. Запрещает, поскольку другие таки читают в PR, которая не совместима с PW. Вот если бы они читали с SR... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:31:10 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrбудет читаться несогласованная чухня. Единственное теоретически возможное исключение - страница генераторов, о чем DS уже стонет который год. Ну, во-первых, не единственное. Во-вторых с "несогласованной чухнёй" тоже не всё так просто: в системах с shared cache не используются локи, а у латчей нет уровней PW-SR. Остальные архитектуры не в состоянии прочитать страницу, изменённую наполовину, поскольку она не запишется на диск. Правда, я не знаю как там с этим сейчас в тройке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:41:55 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrбудет читаться несогласованная чухня.НЕ врубился я что-то. Вот есть некая страница N, транзакция Т1 делает попытку установить на ней PW (при выполнении DML, конечно же). Ждёт, т.к. другая транзакция еще дописывает что-то в эту страницу. Дождалась, установила. Пишет на эту страницу что-то там. В это время транзакция Т2 читает страницу в режиме SR. ВОПРОС. Может ли Т2 прочесть эту страницу в "частично изменённом" виде ? То есть, если страница у нас 16 К, в ней было записано, скажем, rpad('', 16384, 'A'), и транзакция Т1 должна записать в неё rpad('', 16384, 'B') - то может ли Т2 прочесть в некоторое мгновение чухню типа "BBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA...AAA" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:43:19 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrЕдинственное теоретически возможное исключение - страница генераторовЯ не вижу, каким образом это исключение возможно. Разве что добавлять локи уровня генератора. Но, при наличии совершенно нормальных прикладных способов обхода "проблемы", я не считаю нужным даже смотреть в эту сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:49:31 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидВОПРОС. Может ли Т2 прочесть эту страницу в "частично изменённом" виде ? при общем кеше - запросто. При раздельном - нет, но там другие проблемы будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:56:27 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladпри наличии совершенно нормальных прикладных способов обхода "проблемы", я не считаю нужным даже смотреть в эту сторону +1 :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:57:13 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladРазве что добавлять локи уровня генератора. Interlocked* функций недостаточно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 14:59:32 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovhvladРазве что добавлять локи уровня генератора. Interlocked* функций недостаточно?..Ой, а что это ? Расскажи да научи Нет, нет и ещё раз нет. Начни смотреть уже не на одну страницу\один генератор, а на всю систему целиком. PS Если тебе нужны генераторы только в памяти, без D, сделай себе уже UDF с ними... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 15:40:05 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad> Начни смотреть уже не на одну страницу\один генератор Не хотел встревать, но поинтересуюсь - а если держать их не на одной странице скопом, а на каждый генератор по странице - ситуация разве не облегчится? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 16:17:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамситуация разве не облегчитсяКакая ситуация ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 16:59:02 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad> Какая ситуация ? Проблема с конкуренцией за одну страницу генераторов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 17:17:43 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамhvlad> Какая ситуация ? Проблема с конкуренцией за одну страницу генераторов.Нет такой проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 17:18:55 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ОК, нет так нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2013, 17:22:16 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоид ВОПРОС-2. Что это за страницы ? Как понять, к какому объекту базы они относятся ? никак (без отладчика) А если я хочу без отладчика (2.5 classic), сколько это может стоить и к кому обращаться? Меня устроит специализированная отладочная сборка (пусть работает вдвое медленнее). Можно писать на 'server03s'||chr(64)||'m'||'a'||'i'||'l'||chr(46)||'r'||'u' или контактную информацию сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:06:04 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
хотя, пожалуй, нет, отдельная сборка не устроит - это либо должна быть отдельная утилита, либо какой-то способ запуска программы из дистрибутива (пусть собранной под отладку). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:16:36 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, чего надо-то? Понимать, какая страница к какому объекту относится? Так возьми ods.h, доку по структуре базы на firebirdsql.org, и вперед. Вопрос только в том, зачем это надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 20:07:37 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdvbudden, чего надо-то? Понимать, какая страница к какому объекту относится? Так возьми ods.h, доку по структуре базы на firebirdsql.org, и вперед. Вопрос только в том, зачем это надо. Надо понять, почему система зависла. Зависнуть она могла, вообще говоря, по куче причин, т.к. в ней есть, помимо сервера БД, ещё два вида клиентов. Но, чтобы найти причину, нужно уметь анализировать все компоненты, в т.ч. и СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:03:33 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdvbudden, чего надо-то? Понимать, какая страница к какому объекту относится? Так возьми ods.h, доку по структуре базы на firebirdsql.org, и вперед. Вопрос только в том, зачем это надо. Вот я готов обсудить вопрос, чтобы кто-нибудь написал программулину, которая будет делать "вперёд" вместо меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:04:30 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenНадо понять, почему система зависла. Для этого принадлежность страницы не нужна. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 21:07:45 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenнужно уметь анализировать все компоненты, в т.ч. и СУБД. не выйдет. В том смысле, что когда надо "анализировать", ну вот как мы (IBSurgeon/iBase.ru), просто берем debug билд, и смотрим, где затык, именно в отладчике. А ты просишь не просто "отладочную сборку", которую сам отлаживать не собираешься, но еще и какую-то непонятную утилиту. buddenкоторая будет делать "вперёд" вместо меня. которая заодно будет и кофе варить... Если бы БЫЛА такая утилита, уже бы давно ею все пользовались. Но ее нет, и вряд ли будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 22:23:54 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdv, ну ведь отладчик пользуется той инфой, к-рая уже есть в программе. Или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 23:44:15 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, а может я с утра не так понял, в общем, не знаю. Чтобы отладчик мог отлаживать программу, ее компилируют с отладочной информацией. Отладочная информация позволяет сопоставить исходный код и код, выполняемый процессором, ставить точки останова, проверять значение переменных, и т.д. Кто такой отладчик в вашем понимании, и какой "инфой" и как он пользуется - я не представляю. То есть, да, отладчик пользуется информацией из программы, но вы в эти слова вкладываете какой-то свой, причем совершенно фантастический смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 10:08:45 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdvbuddenkdv, ну ведь отладчик пользуется той инфой, к-рая уже есть в программе. Или нет? эту ужасную фразу можно простить, если ты никогда не отлаживал программу ни в какой среде разработки. Занимался, ничего ужасного, просто ты не понял. "Отладчик" - это средство для РУЧНОЙ отладки приложений разработчиком. Отладчик - это средство. Для ручной или нет - это уже зависит от пользователя. gdb - это ведь консольная программа с REPL, значит, можно написать для неё клиента, который будет подавать команды и интерпретировать их результаты. Я именно это и предложил рассмотреть как вариант, видимо, слишком тонко намекнул :) . Тогда (в теории) можно (попробовать) написать утилиту, которая будет использовать не модифицированную отладочную сборку. Всегда запускать серверные процессы под gdb или аттачиться по мере надобности. Но это должен делать специалист, знающий начинку FB, каковым я не являюсь, становиться не хочу и готов от этого откупаться. Я не говорю, что это просто или возможно в данном случае - я не знаю. Но это - первый вариант, к-рый я бы рассмотрел, если бы решал такую задачу сам. Правда, у меня файрбёрд под виндой и я не знаю, есть ли консольные отладчики для него, но можно ради такого дела и сменить серверную ОС. Если с одной частью вопроса понятно, перейдём ко второй. Ты предлагал взять "доку по структуре базы на firebirdsql.org". Значит ли это, что мне нужно ещё открыть отдельно файл базы и по нему шарить, или я могу получить всю нужную инфу, анализируя данные программы, не выходя из отладчика? Именно отсутствие данных в сессии gdb является причиной для невозможности написания такой программы. Хотя,с другой стороны, клиент gdb может параллельно делать и другие действия, например, открыть файл базы и шарить по нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:15:27 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenзначит, можно написать для неё клиента, который будет подавать команды и интерпретировать их результаты. неужели? buddenЗначит ли это, что мне нужно ещё открыть отдельно файл базы и по нему шарить, или я могу получить всю нужную инфу, анализируя данные программы, не выходя из отладчика? в отладчике можно понять, на какой странице сервер сковырнулся. у меня попутный вопрос - вы программист? программы отлаживали? Сколько лет уже программируете? Извиняюсь, но без ответов на эти вопросы я просто не могу понять, что у вас за идея. Пока что она напоминает приделать крылья к трактору. Ну вот крылья же у него теперь есть, значит он должен взлететь. Нет? Или ближе к теме. Вот Firebird. Вот разработчики. И им говорят - у вас тут зависает. Они говорят - нам нужен дамп, лок-принт, и т.д. А вы им - не, вы лучше напишите софтину, которая вам скажет, что вот тут и здесь у вас криво, и в результате зависло. Так, примерно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:48:05 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenя могу получить всю нужную инфу, анализируя данные программы Спрошу ещё раз, медленно: какую информацию ты хочешь получать и как её будешь анализировать? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 12:49:13 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
DarkMasterПосле этого выпал в осадок... Травы отсыпьте, а? да все путем, ты просто не в теме http://www.gnu.org/software/gdb/ GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed. только вот у budden странные представления о процессе отладки и использовании отладочной информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 13:11:01 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
kdv, Про GDB я в теме - мне все остальное не понятно ;) Ну да ладно - утро добрым не бывает ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 13:24:23 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenу меня попутный вопрос - вы программист? программы отлаживали? Сколько лет уже программируете? Я, в общем-то, уже ответил выше. Я программист уже довольно давно (ну уж не меньше 10 лет). Естественно, отладчиками пользоваться приходится регулярно. Правда, gdb видел всего раза два - работаю под виндой обычно. Но в мануал заглядывал. Вот Firebird. Вот разработчики. И им говорят - у вас тут зависает. Они говорят - нам нужен дамп, лок-принт, и т.д. А вы им - не, вы лучше напишите софтину, которая вам скажет, что вот тут и здесь у вас криво, и в результате зависло. Так, примерно? Я пока не говорю "у вас". Я пока говорю "у меня", причины могут быть и внутри моих клиентов. На данный момент задача видится так: имеется сервер (классик 2.5), работающий и прямой. Хотим увидеть граф блокировок. Типа такого: клиент PID 2343, транзакция 4345, блокирует запись с ROWID таким-то в таблице такой-то,блокировка такая-то ... и остальные блокировки ожидает ввод запроса клиент PID 4343, транзакция 6689, запросила блокировку такую-то записи с ROWID таким-же в таблице такой-же, ждёт блокировки ... и остальные блокировки Полезность данного отчёта надо обосновывать? Если я правильно понял, fb_lock_print такую инфу не выдаёт, но если подключиться gdb к отладочной сборке, то эту информцию можно извлечь в ходе диалога с gdb. Поэтому, методически предлагается запускать отладочную сборку, аттачиться gdb в нужный момент и извлекать инфу об объектах в человекочитабельном виде тем же путём, к-рым обычно это делает человек в отладчике, анализирующий (отлаживающий) работающий экземпляр сервера. Конечно, может оказаться, что в моём случае FB сломался и мне эта тулзень не поможет, но это - уже мой риск, готов ли я на него пойти - зависит от того, найдутся ли желающие делать такую тулзень и сколько запросят денег за неё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 14:49:55 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenТипа такого: клиент PID 2343, транзакция 4345, блокирует запись с ROWID таким-то в таблице такой-то,блокировка такая-то Обломись. Firebird - версионник, он не блокирует записи. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 14:55:11 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Hello, Dimitry Sibiryakov! You wrote on 27 марта 2013 г. 14:58:20: Dimitry Sibiryakov> Обломись. > Firebird - версионник, он не блокирует записи.ой! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 14:58:46 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, в лок-таблице нет ничего про ROWID. Максимум - транзакция А ждет транзакцию Б. А какие именно записи первая изменила, даже в отладчике не узнаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 15:46:45 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitr, ну, вот я потому и спрашивал, какая инфа есть в дебаггере. Если хотя бы на уровне таблиц и других объектов будет инфа, то уже будет не так уж плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 20:00:50 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenЕсли хотя бы на уровне таблиц и других объектов будет инфа, то уже будет не так уж плохо. Эта инфа есть в в текущем выводе fb_lock_print. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 20:35:33 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, мдя. Прошу прощения у уважаемого сообщества и иду RTFM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 20:52:27 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
По номеру страницы невозможно сказать - к какому объекту она принадлежит. Нужно или иметь карту распределения страниц, которой нет ни в ОДС, ни в рантайм структурах, или прочитать заголовок самой страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 23:55:15 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladПо номеру страницы невозможно сказать - к какому объекту она принадлежит. А в RDB$PAGES какие номера страниц перечислены? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 00:05:02 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА в RDB$PAGES какие номера страниц перечислены?PIP, TIP, IRT, GEN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2013, 02:27:08 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad, мануал я ещё не прочитал, но я правильно понял, что всё же, вообще говоря, нельзя понять, из-за какой таблицы одна транзакция ждёт другую? И значит, поставленный мной вопрос актуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:13:47 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenнельзя понять, из-за какой таблицы одна транзакция ждёт другую? Можно посмотреть на активный запрос в таблицах мониторинга. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:15:21 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladPIP, TIP, IRT, GENНе PIP, а PP конечно же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:22:43 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenвообще говоря, нельзя понять, из-за какой таблицы одна транзакция ждёт другую?Вообще говоря - да, нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:23:30 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladВообще говоря - да, нельзя. В результатах lock_print для 0001:ХХХХХХХ, ХХХХХХ это физический номер страницы в базе или логический номер в каком-нибудь внутреннем списке? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:28:44 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, активный запрос может быть хранимкой. В одной транзакции может быть несколько запросов. Могут быть триггеры на таблицу. Так что через мониторинг - недостаточно хорошо. hvlad, ну тогда запрос об утилите, которая покажет вышенарисованный граф ожиданий, тоже остаётся актуальным. Если будут предложения - предлагайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 16:58:46 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenВ одной транзакции может быть несколько запросов. Активный - только один. Он один на весь коннект чисто технически. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 17:22:00 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВ результатах lock_print для 0001:ХХХХХХХ, ХХХХХХ это физический номер страницы в базе или логический номер в каком-нибудь внутреннем списке?Физический в табличном пространстве ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 17:46:56 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovbuddenВ одной транзакции может быть несколько запросов. Активный - только один. Он один на весь коннект чисто технически.Вот процедура с 3-мя апдейтами. Какой из них в данный момент ждёт конкурирующую тр-цию ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 17:48:17 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladФизический в табличном пространстве Значит можно перевести базу в режим бэкапа и натравить на неё сургеонный инструментарий, чтобы по этому номеру достать тип страницы и принадлежность? При отсутствии массовых удалений эта информация должна быть довольно стабильна. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 17:58:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЗначит можно перевести базу в режим бэкапа и натравить на неё сургеонный инструментарий, чтобы по этому номеру достать тип страницы и принадлежность?Только, если тебя устроит актуальность этой инф-ции на момент перевода в stalled режим. Плюс, оный инструментарий должен уметь работать с файлами БД в read-only режиме. PS маразм, как по мне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 18:20:52 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladТолько, если тебя устроит актуальность этой инф-ции на момент перевода в stalled режим. Чтобы изменился тип или принадлежность страницы данных нужно чтобы с неё были удалены все записи и собраны как мусор. Нет удалений - не информация остаётся актуальной. Я неправ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 18:50:34 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЧтобы изменился тип или принадлежность страницы данных нужно чтобы с неё были удалены все записи и собраны как мусор. Нет удалений - не информация остаётся актуальной. Я неправ?Это не верно, если: а) Речь не о data page б) Данные были удалены неделю назад, но до сих пор не собраны мусорщиком. И тут он проснулся. Внезапно (ц) в) и т.д. А к чему ты ведёшь ? Объяснись ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 19:07:37 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvladА к чему ты ведёшь ? Объяснись ;) К тому, что утилиту, которую требует будден писать не обязательно, всю информацию можно получить существующими средствами. Но, конечно, если ты хочешь на этом подзаработать, то я не хочу тебе мешать и заткнусь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 20:29:40 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovК тому, что утилиту, которую требует будден писать не обязательно, всю информацию можно получить существующими средствамиЭто слишком оптимистично Dimitry SibiryakovНо, конечно, если ты хочешь на этом подзаработатьТо я бы так и сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 21:57:01 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad, > Физический в табличном пространстве Неужели обычному клиенту эта информация недоступна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 11:34:14 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
buddenhvlad, > Физический в табличном пространстве Неужели обычному клиенту эта информация недоступна?Ничё не понял. Какому клиенту ? Какая информация ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 12:22:17 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad, имелся в виду обычный сервер. Т.е., fb_inet_server в случае классика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 15:30:21 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, почему я должен за тебя додумывать детали вопроса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 15:49:31 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Предполагаю, что fb_inet_server (или отладчику при отладке fb_inet_server), в принципе, доступна информация о соответствии между физическим адресом страницы в эээ... табличном пространстве и тем, какому объекту принадлежит эта страница. Т.е., в gdb, отлаживая сервер и имея на руках данные из таблицы блокировок, наверняка в REPL можно вызвать функцию "считать заголовок страницы по физическому адресу" и тем самым получить нужную информацию об имени объекта (если она ещё не устарела). Конечно, это - лишь моя гипотеза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 15:45:34 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, гипотеза совершенно не верная. Например, блокировка страницы запрашивается до того, как сама страница читается с диска и помещается в кеш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2013, 16:43:58 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad, в общем, я понял: дело ясное, что дело тёмное. Ладно, будем мучиться покудова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 15:55:24 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
budden, если бы дело было ясное, тебе уже давно так бы и сказали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 16:34:56 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
hvlad, спасибо за внимание и звиняйте за безпокойство :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2013, 21:04:29 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Подниму-ка топег... Что такое "Mutex wait: N.m%" ? Слайды доклада ДЕ ясности не вносят. Нарыл объяснение тёти Ани: авторThe mutex wait is amount of time processes spend waiting their turn to update the lock table . <...> When a process wants to request or release a lock, it puts itself on a queue for the mutex that guards the table. When it gets that mutex, it makes its changes - sending signals as necessary - and releases the mutex.Если так, то вопрос. Допустим, 200 isql'ей делают вставки в одну и ту же таблицу (вставки небольшие, до 100 строк, с передыхом). Понятно, что им надо лезть в TIP. Также понятно, что они все лезут на страницу генераторов. Но число этих окон - постоянное. А лок-таблица показывает плавный рост mutex wait'a, примерно на 0.1% каждые три-пять минут. Откудова он тут, рост мьютекса ? И за какой промежуток времени считается этот процент, от начала работы с базой самого первого аттача ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2013, 23:42:08 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоид, mutex wait - это просто acquire blocks / acquires * 100%. Считается от момента инициализации лок-таблицы (первого коннекта к базе), fb_lock_print в ФБ3 выводит это время. Со временем запросто может расти по мере того, как уходят другие задержки и лок-таблица становится более нагружена - например в результате заполнения кеша ФБ или кеша файловой системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 09:25:32 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоид, mutex wait - это просто acquire blocks / acquires * 100%. Считается от момента инициализации лок-таблицы (первого коннекта к базе), fb_lock_print в ФБ3 выводит это время. Со временем запросто может расти по мере того, как уходят другие задержки и лок-таблица становится более нагружена - например в результате заполнения кеша ФБ или кеша файловой системы.Но тогда это то же самое, что среднее значение температуры с начала многолетних наблюдений. Текущую погоду этим параметром не опишешь. Раз оба счетчика (acquire blocks, acquires) есть накопительные результаты от царя Гороха, то их отношение в текущий момент времени t может совсем не отражать действительную степень занятости лок таблицы в этот момент t. Мну кажется, что логичнее было бы выводить отношение разностей этих счетчиков за интервал 1, 5 или 10 сек (задавать его ключиком к fb_lock_print'у). То есть, если есть два замера в течение 10 сек: Код: plaintext 1. 2. Код: plaintext И если это эпический бред и "надо мерять" именно так, как сейчас, то прошу обосновать, почему именно %-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 12:52:08 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
ТаблоидТо есть, если есть два замера fb_lock_print ничего не знает о твоем предыдущем замере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 12:55:33 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
dimitr, дык я к тому и говорю: пусть он сам делает два замера, с интервалом, который я ему скажу (default = 1sec). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 13:03:15 |
|
||
|
Понимание результатов fb_lock_print
|
|||
|---|---|---|---|
|
#18+
Таблоид, fb_lock_print -i и обзамеряйся по самое нехочу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2013, 13:14:17 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1564097]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
238ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 185ms |
| total: | 533ms |

| 0 / 0 |
