powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / deadlock при свипе
25 сообщений из 79, страница 3 из 4
deadlock при свипе
    #39749537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenЯ готов согласиться даже на то, что наше ПО - трижды говно, лишь бы выяснить в чём
проблема и справить ситуацию )

Ну так начни уже с
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1306610&msg=21766644
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749556
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Начну конечно. Но всё зависит от настроения сисадмина. Так что это точно будет не сегодня (
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749559
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenНо всё зависит от настроения сисадмина.

У тебя что, нет удалённого доступа к серверу по SSH?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749561
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для чего делать sweep при отсутствии разницы между OIT и NEXT? Может сперва анализировать вывод gstat и при наличии разницы более 20000 запускать sweep?
Сборка мусора итак должна выполняться, безо всякого sweep (используется же SuperServer)...
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749573
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Доступа нет и не будет. Что-либо делать с сервером можно только при личном контакте с сисадмином. Логи смотрю сбоку на экране )))) Не по телефону, ни по почте он не реагирует. Вот такая жопа.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749577
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenВот такая жопа.

Это единственный пользователь твоей программы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749600
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, просто для остальных пользователей все ошибка одинаковы: "Красный крест и что-то написано"
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749678
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenЧто-либо делать с сервером можно только при личном контакте с сисадмином. Логи смотрю сбоку на экране ))))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
fbsvcmgr хост/порт:service_mgr info_server_version info_capabilities -z
Firebird Services Manager version WI-V3.0.4.33054 Firebird 3.0
Server version: WI-V2.5.8.27089 Firebird 2.5
Server capabilities:
  REMOTE_HOP_SUPPORT
  NO_SERVER_SHUTDOWN_SUPPORT

fbsvcmgr хост/порт:service_mgr action_get_fb_log -z
Firebird Services Manager version WI-V3.0.4.33054 Firebird 3.0
### Manualy added into firebird.log ###

P.S.
"NO_SERVER_SHUTDOWN_SUPPORT" - классик или суперклассик.
"MULTI_CLIENT_SUPPORT" - суперсервер.

Из ограничений:
На FB1.5 сервисные запросы (кроме информационных) работают только в режиме SuperServer.
Classic запускает реальные приложения (gbak/gfix/итд).
Приложения "отправить firebird.log" - не существует.

На FB2.1 и FB2.5 сервисные запросы (кроме информационных) могут давать ошибку, если используется "чужая" версия fbsvcmgr.
Функционал "родных" fbsvcmgr на этих версиях ограничен.

"gbak -se" и "fbsvcmgr action_backup/_restore" отличаются "на опции перенаправлений": gbak передаёт имя файла протокола и с ним работает сервер, fbsvcmgr читает вывод, который ему отправляет сервер.
В результате, fbsvcmgr не позволяет включать протоколирование, когда используются stdin/stdout для файла бэкапа.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749709
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

делается достаточно просто. на их системе замеряете время выполнения какого-нибудь запроса, идеально в монопольном режиме.
И замеряете такой же запрос у себя на десктопе. После чего вывод на лист А4, печать и подпись. Если админ не реагирует, то тогда их начальству. С админом, конечно, отношения будут испорчены, но в данном случае, видимо, всё равно, испорчены они или нет.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749782
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для трейса такой конфиг сойдёт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
enabled                true 
print_plan             true 
print_perf             true 
print_blr              true 
log_connections        true 
log_transactions       true 
log_sweep              true 
log_errors             true 
log_statement_prepare  true 
log_statement_free     true 
log_statement_start    true 
log_statement_finish   true 
log_blr_requests       true 
max_sql_length         65535 
?
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749783
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Если бы была возможность как-то повлиять на сисадмина, мы бы уже повлияли ))
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749801
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenЕсли бы была возможность как-то повлиять на сисадмина, мы бы уже повлияли ))

Если это не твой единственный пользователь, то трассировку и прочие диагностические
операции ты можешь начать делать уже сейчас с тем, у кого админ сговорчивее. Чисто чтобы
понять "а нельзя ли и в самом деле твоё приложение улучшить".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749804
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запуск трассировки и получение результата не требует доступа на консоль сервера.
Эту и многие другие задачи можно выполнять никак не беспокоя админа.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749825
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

это лишнее
ArtDen
Код: plaintext
1.
2.
3.
4.
print_plan             true 
print_blr              true 
log_statement_free     true 
log_statement_start    true
log_blr_requests       true 

Ещё можно подумать про time_threshold и print_perf
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749833
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, Basil A. Sidorov,

В других организациях трассировка периодически запускается в случае, если есть претензии на некоторое подтормаживание. И она реально помогает (мы или перестраиваем запросы или химичим с индексами).

PS: прямого доступа к базе у пользователя нету. Это трёхзвенка. К базе можно подключится только локально. Но надо подумать, что возможно дадут доступ к порту 3050 для некоторых пользователей снаружи, чтобы мы поменьше нагружали админа.

PPS: причина тормозов вроде понятна - глюки в виртуализации, которые приводят к очень сильно просадке скорости дисков. Меня интересует deadlock, которым заканчивается выполнение некоторых запросов.

hvlad,
какой поставить time_threshold ?
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749838
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenпрямого доступа к базе у пользователя нету. Это трёхзвенкаНо разрабатываете её вы?
Запросите доступ к серверу приложения - в какой-то мере это ваша епархия.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749844
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenВ других организациях трассировка периодически запускается в случае, если есть претензии
на некоторое подтормаживание. И она реально помогает (мы или перестраиваем запросы или
химичим с индексами).

Значит у тебя должны быть достаточно много достаточно свежих трасс в которых ты можешь
точно посмотреть параметры стартующих транзакций, в особенности тех, в которых стартуют
запросы, обламывающиеся (у других) с дедлоком.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749855
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Я тут приводил пример запроса, который заканчивается дэдлоком:

Код: sql
1.
select s.name, s.svalue from serv_settings s



serv_settings - это таблица с двумя колонками, которая содержит 3 или 4 записи в виде key->value (name - это key, svalue - это типа value). Она была заполнена один раз при установке ПО. И она никогда не меняется.
При подключении клиента к нашему серваку, этот запрос выполняется первым. В других организациях этот запрос выполняется так быстро, что не попадает в лог трейса, т.к. у нас стоит time_threshold 1000 (запросы, которые длятся более секунды считаются тормозящими). Так что мне нечего тебе показать ))

В общем-то дэдлок у меня вообще не вяжется с select-ом.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749871
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenТак что мне нечего тебе показать ))

А я и не говорил "мне показать". Я сказал "тебе посмотреть". И ещё сказал, что самое время
выбрать пользователя с админом посговорчивее и снять-таки полную трассу твоего приложения
чтобы было в чём покопаться на досуге.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749881
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

deadlock при таком запросе, если serv_settings это просто таблица, а не процедура которая что-то там вставляет или модифицирует, может быть только если уровень изолированности read_committed no_rec_version. Так что надо трейс смотреть.
Вы же его сами можете посмотреть у себя, не обязательно у клиента.
Или у вас клиенты сами ставят древние ODBC-драйвера, у которых no_rec_version?
deadlock, который пишется в firebird.log - это другое. Это скорее всего что-то в памяти локов поломалось.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749904
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Это я успел посмотреть ещё на работе. Вот:
Код: 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.
Statement 331266:
-------------------------------------------------------------------------------
select s.name, s.svalue from serv_settings s 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (S NATURAL)

2018-12-18T21:09:40.3100 (680:00000000011CBDD8) START_TRANSACTION
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_73, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756
		(TRA_11360, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)

2018-12-18T21:09:40.3450 (680:00000000011CBDD8) PREPARE_STATEMENT
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_73, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756
		(TRA_11360, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)

Statement 331290:
-------------------------------------------------------------------------------
select s.name, s.svalue from serv_settings s 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (S NATURAL)
      0 ms

2018-12-18T21:09:40.3460 (680:00000000011CBDD8) EXECUTE_STATEMENT_START
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_73, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756
		(TRA_11360, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)

Statement 331290:
-------------------------------------------------------------------------------
select s.name, s.svalue from serv_settings s 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (S NATURAL)

2018-12-18T21:09:40.3490 (680:00000000011CBDD8) CLOSE_CURSOR
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_73, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756

Statement 331290:
-------------------------------------------------------------------------------
select s.name, s.svalue from serv_settings s 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (S NATURAL)

2018-12-18T21:09:40.3490 (680:00000000011CBDD8) COMMIT_TRANSACTION
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_73, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756
		(TRA_11360, READ_COMMITTED | REC_VERSION | WAIT | READ_WRITE)
      0 ms, 1 write(s), 1 fetch(es), 1 mark(s)

2018-12-18T21:09:47.6080 (680:00000000011CD870) TRACE_INIT
	SESSION_4 PrimeDbTrace
	

2018-12-18T21:09:47.6080 (680:00000000011CD870) FREE_STATEMENT
	D:\PRIMEDB32\DB\PRIME.FBDB (ATT_75, SYSDBA:NONE, UTF8, TCPv4:127.0.0.1)
	D:\PrimeDB32\PrimeDB.exe:8756

Там куча отладочной выдачи, т.к. там лишние флаги для трейсов указаны.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749905
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это выдача трейса с моего компа при тестировании скрипта, запускающего трейс для сисадмина )
...
Рейтинг: 0 / 0
deadlock при свипе
    #39749922
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerА для чего делать sweep при отсутствии разницы между OIT и NEXT? Может сперва анализировать вывод gstat и при наличии разницы более 20000 запускать sweep?


А зачем сакральная привязка к значению 20000?
То что это значение по дефолту не означает что в этом велкий смысл.
Опять, таки, это значение по дефолту для автозапуска свипа, т.е. если цифра больше этой установки - то он и сам запустится.

Более интересный вопрос - если там разрыв транзакций более 20000 - может быть как раз запускать свип и не нужно, ибо толка может и не быть, а вред в виде тормозов - может быть. В моем случае, для борьбы с большими разрывами (бывало по 200-300 тысяч) помогало найти коннект из которого запущена та самая старая транзакция и закрыть его. Разрыв тут же значительно уменьшался.
А после того как в приложении переделал работу с транзакциями - обычный разрыв находится в диапазоне до нескольких сотен. Не более.

Автосвип у меня отключен, запускается по ночам принудительно.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39750028
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

всё неправильно.
- "разрывы" бывают разные. Самый больной разрыв для "неуборки мусора" - Next - OAT, т.е. наличие длинной АКТИВНОЙ транзакции. Никакой свип тут не действует, и не будет, нельзя убрать версии, которые не стали мусором.

- авто-sweep по умолчанию 20000. Это разница между OIT и OST. Застревание OIT является индикатором того, что эта транзакция является самой старой, завершившейся по Rollback. То есть, ни в каких коннектах она фигурировать не может, она уже завершилась, и принудительное завершение коннекта никак не даст возможности серверу подвину OIT.

- застревание OIT НЕ означает, что в базе есть мусор. Я постоянно талдычу, что миллион транзакций может ничего не обновлять (не генерировать версии), а одна транзакция может создать миллион версий. sweep этого не знает, и всё равно будет сканировать всю БД.

- застревание OIT влияет не только на срабатывание авто-свипа (если он не 0), но и на объем памяти, который аллокируют транзакции snapshot. Такие транзакции копируют в свою локальную память все состояния транзакций от OIT до Next. Но, 1 миллион транзакций в TIP от OIT до Next займет 250 килобайт (четверть от количества транзакций).

И, наконец, значение автосвипа в 20000 было установлено по умолчанию как минимум лет 20-25 назад. С тех пор количество транзакций в сутки существенно увеличилось. Но это не значит, что поэтому авто-свип можно увеличить в 10-100 раз. Объемы баз данных с тех пор существенно увеличились, поэтому запуск авто-свипа в произвольный момент сейчас фактически недопустим, если вы не хотите, чтобы сервер ВДРУГ посередине рабочего дня начал сканировать всю базу в 200 гиг на предмет уборки мусора.
Поэтому свип надо настраивать по расписанию.

Тем не менее, в ФБ 3 у страниц данных есть флаг swept, то есть, свип теперь проскакивает быстрее, что ручной, что авто.
А в ФБ 4 меняется сборка мусора, позволяющая "выкусывать" мусор из цепочек версий, чего раньше не делалось.
...
Рейтинг: 0 / 0
deadlock при свипе
    #39750030
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

есть вопросы:
- если это не ODBC, тогда почему чтение этих данных идет в read write, а не в read only?
- если это таблица, которую долбят сотни коннектов, то надо проверять fb_lock_print, нет-ли там
повышенного mutex wait.
оптимизировать в этом запросе нечего, увы.
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 3 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / deadlock при свипе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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