Не вижу новых пользователей

Запросы, планы, оптимизация запросов, ...

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

Ответить
SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Не вижу новых пользователей

Сообщение SunDevil » 25 мар 2010, 06:39

FB 2.1.3
Делаю запрос к mon$attachments для получения списка пользователей. После этого к базе подключаются или отключаются другие пользователи, но повторный запрос к mon$attachments дает тот же результат. И результат обновляется только после рестарта транзакции.
Очень похоже на то что не верно выставлен уровень изоляции транзакции, но у читающей транзакции стоит уровень read_commited.
Причем в InterBase 7.5 этот прием проходит без проблем и новые подключения видны сразу без рестарта транзакции
В чем может быть дело?
Спасибо

SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Re: Не вижу новых пользователей

Сообщение SunDevil » 25 мар 2010, 07:27

Я сам нашел ответ в релиз ноутс:
In other words, the monitoring tables always behave like a snapshot table stability (“consistency”) transaction,
even if the host transaction has been started with a lower isolation level.
To refresh the snapshot, the current transaction should be finished and the monitoring tables should be queried
in a new transaction context.

Как я понял запрос к таблице mon$attachments всегда стартует с уровнем "snapshot table stability".
А в чём смысл такого подхода?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Не вижу новых пользователей

Сообщение kdv » 25 мар 2010, 09:59

Как я понял запрос к таблице mon$attachments всегда стартует с уровнем "snapshot table stability".
А в чём смысл такого подхода?
http://www.ibase.ru/webinar.html
скачай самый свежий, послушай и посмотри часть Еманова, про мониторинг. Все станет понятно.

SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Re: Не вижу новых пользователей

Сообщение SunDevil » 25 мар 2010, 10:08

скачай самый свежий, послушай и посмотри часть Еманова, про мониторинг. Все станет понятно.
Вчера ещё скачал, но неуспел посмотреть...
Сейчас пойду
Спасибо

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не вижу новых пользователей

Сообщение hvlad » 25 мар 2010, 12:01

SunDevil писал(а):Причем в InterBase 7.5 этот прием проходит без проблем и новые подключения видны сразу без рестарта транзакции
Неужели ?

SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Re: Не вижу новых пользователей

Сообщение SunDevil » 25 мар 2010, 12:43

Неужели ?
Вот те крест...
Только что перепроверил

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не вижу новых пользователей

Сообщение hvlad » 25 мар 2010, 14:29

Перепроверяй, ибо
9-2 Operations Guide писал(а):Refreshing the temporary tables

To refresh the rows in the temporary tables, commit your transaction and perform
the SELECT from the temporary tables again.

SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Re: Не вижу новых пользователей

Сообщение SunDevil » 25 мар 2010, 15:06

To refresh the rows in the temporary tables, commit your transaction and perform
the SELECT from the temporary tables again.
ты не поверишь но на IB7.5 я вижу новые подключения без рестарта транзакции :)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не вижу новых пользователей

Сообщение hvlad » 25 мар 2010, 16:03

SunDevil писал(а):ты не поверишь но на IB7.5 я вижу новые подключения без рестарта транзакции :)
Так я и не верю.
commit retain у тебя нету ? Чем смотришь ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Не вижу новых пользователей

Сообщение kdv » 25 мар 2010, 23:07

ты не поверишь но на IB7.5 я вижу новые подключения без рестарта транзакции
художественный свист, по причине смотрения "не оттуда". в InterBase таблицы tmp$ не меняют своего содержимого пока не сделан commit retaining или транзакция не стартована по новой.
Проверяется легко - делаем проект на Дельфи, где есть IBQuery с

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

select * from tmp$attachments
по кнопке пишем
IBQuery1.Close;
IBQuery1.Open;
Запускаем приложение из дельфей. Смотрим - 3 коннекта (1 коннект - сборщик мусора, 1 коннект из дельфей, 1 коннект из приложения).
Запускаем IBExpert - тот же запрос в SQL Editor - 4 коннекта. В приложении жмем кнопку - 3 коннекта.
Запускаем еще IBExpert - 5 коннектов. В приложении жмем кнопку - 3 коннекта.
НО! Если в первом IBExpert мы повторим запрос (в SQL Editor), то увидим 5 коннектов.

Правда, тут, спасибо Владу, в IB обнаружена бага в отношении tmp$. Если стартануть в одном коннекте более двух транзакций, и в одной смотреть tmp$, а другим делать commit/start, то в той исходной транзакции можно увидеть изменения в tmp$. Если же в коннекте стартовать только одну транзакцию, то в tmp$ изменения видны не будут.
А поскольку IBE при выполнении запроса через SQL Editor стартует помимо этого штук 5 транзакций, то получается, в IB они "сбивают" содержимое tmp$ в исходной транзакции, даже если она не рестартует или не завершается по commit_retaining. Такие дела.

p.s. проверил и в IB 2009 - таже бага присутствует. Она (со слов Влада) относится к поведению global temporary tables on delete commit, т.к. tmp$ - это те же gtt (как и в ФБ, но в ФБ этого бага нет, в FB таблицы mon$ сделаны не по подобию gtt).

SunDevil
Сообщения: 34
Зарегистрирован: 05 дек 2008, 22:22

Re: Не вижу новых пользователей

Сообщение SunDevil » 26 мар 2010, 07:10

Всё - вопрос закрыт. Сделал всё тоже самое только на фибах (там более явное управление транзакциями). Был не прав. Всем спасибо

Ответить