|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Привет. Есть VIEW, которая возвращает общее количество записей около 6 млн. Если выполнить запрос Код: plsql 1. 2. 3.
, то значение count(*) около 380 тыс записей, время выполнения запроса около 4 сек Код: plsql 1. 2. 3.
SOME_TABLE - global temporary table on commit preserve rows , содержащая одну запись ID = 12 Запрос выполняется за то же самое время, что и предыдущий. Далее создаем контекстную переменную: Код: plsql 1. 2.
Код: plsql 1. 2. 3.
Такой запрос выполняется почти в 1.5 раза дольше, чем предыдущие. В чем причина увеличения времени выполнения запроса? Многократный вызов RDB$GET_CONTEXT() , тогда как подзапрос ( select min( ID ) from SOME_TABLE ) выполняется один раз? С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 16:15 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Polesovтогда как подзапрос ( select min( ID ) from SOME_TABLE ) выполняется один раз? в данном случае действительно один. Некорректированный подзапрос считается инвариантом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 16:24 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Симонов ДенисНекорректированный подзапрос считается инвариантом. Могли бы и RDB$GET_CONTEXT инвариантом считать... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 16:53 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Симонов Денис, * Некоррелированный ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 16:57 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
а на какой версии был поставлен эксперимент? В 2.х контекстные переменные довольно неэффективно вычисляются, в 3-ке заметно лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 18:25 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
dimitr, 2.5.6.27020 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2016, 19:46 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovМогли бы и RDB$GET_CONTEXT инвариантом считать... это КМК то же самое, чтобы считать инвариантом генераторы в рамках запроса он не меняется, но 1) если запрос вызывает какую-нибудь SP, она может изменить переменную 2) если есть параллельные подключения из других потоков - они могут изменить переменную ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 12:27 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Polesovdimitr, 2.5.6.27020 select * from mon$CONTEXT_VARIABLES ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 12:30 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Arioch, ты не прав. Инвариантом можно считать детерминированные функции при неизменных входных параметрах. Получение следующего значения генератора (или GUID) никак не детерминированная функция. Arioch1) если запрос вызывает какую-нибудь SP, она может изменить переменную считать любые контекстные переменные инвариантом наверное не стоит, за исключением не изменяемых из пространства SYSTEM. Arioch2) если есть параллельные подключения из других потоков - они могут изменить переменную не могут параллельные подключения менять контекстные переменные. Ты для начала подумай какие контексты существуют у контекстных переменных ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 12:35 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Симонов Денисты не прав "доказательство от противного" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 13:02 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Симонов Денисне могут параллельные подключения менять Сейчас, видимо, да но если потом сделают редактирование mon$CONTEXT_VARIABLES ... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 13:27 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Arioch, не сделают. 1. MON$ не для редактирования. 2. Изменение чужих контекстных переменных уровня коннекта или транзакции это нарушение security Теоретически могли бы ввести новое пространство имён контекстов, которое шарится между коннектами, но я таких планов не слышал. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 13:44 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Симонов ДенисТеоретически могли бы ввести новое пространство имён контекстов, которое шарится между коннектами ...но таки где его хранить чисто технически? хотя мог бы в принципе быть контекст "все коннекты=сессии одного и того же USERNAME", исчезающий в момент отрыва последней сессии конкретного пользователя > MON$ не для редактирования. delete from mon$attachments where mon$conneciton_id = ..... > это нарушение security ....если только не делается администратором БД ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 13:52 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
Arioch, ты не сравнивай отключение коннекта или отмену статмента юзера с возможностью влезть посередине его работы и что-то там ему подменить (это даже админу нельзя давать) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 13:55 |
|
Вопрос по RDB$GET_CONTEXT
|
|||
---|---|---|---|
#18+
PolesovМногократный вызов RDB$GET_CONTEXT() , тогда как подзапрос ( select min( ID ) from SOME_TABLE ) выполняется один раз?Что, собственно, мешает сделать? Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 15:55 |
|
|
start [/forum/topic.php?fid=40&msg=39344815&tid=1561852]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 237ms |
0 / 0 |