powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Using Oracle Stored Procedures in DataWindows
36 сообщений из 36, показаны все 2 страниц
Using Oracle Stored Procedures in DataWindows
    #34496373
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно хотел спросить. Случайно прочитал статью Using Oracle Stored Procedures in Your DataWindows .
Мне все не дает покоя вот, что. Автор перечисляет преимущества использования
Stored Procedures в DataWindows по сравнению с SQL statements :
Bruce ArmstrongFirst, stored procedures in the database are precompiled, which means they'll
significantly outperform uncompiled SQL statements. In addition, stored procedures provide for
data-hiding, i.e., the end user doesn't need to know or have the ability to access the underlying tables
in order to retrieve the data.

Далее идет фраза о том, что это все не применимо к Oracle :

Bruce ArmstrongNote that neither of these advantages are significant when using an Oracle
database. Provided the application is being run with binding enabled, the database is storing the bound
and compiled statements in its SHARED_SQL area, which means that SQL SELECT statements will
achieve similar performance as stored procedures. Further, Oracle's role-based security model can and
should be used to restrict the user's ability to access data only in the context of the application
session. That is, the role they need to access the data can be enabled only for the application session,
and only for the duration of the application session (nondefault roles expire when the session ends).

Вот и хотелось бы узнать. Правда ли это? Не ужели Stored Procedures и
SQL statements в DataWindows дают одинаковый перформенс? У меня, как
у человека раньше активно работающего с MS SQL Server 2000 , это просто в голове
не укладывается...
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34496469
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Black SavageВот и хотелось бы узнать. Правда ли это? Не ужели Stored Procedures и
SQL statements в DataWindows дают одинаковый перформенс? У меня, как
у человека раньше активно работающего с MS SQL Server 2000 , это просто в голове
не укладывается...Там описано два способа. Про какой из них вопрос?
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497438
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg1Там описано два способа. Про какой из них вопрос?
Я не понял вопроса. Цитата, которую я привел выше, является общим утверждением,
которое было выдвинуто автором в начале статьи, без относительно методов и способов.

Bruce Armstrong - человек вполне известный и уважаемый, я его
мнение не оспариваю. Просто хочу понять, ПОЧЕМУ это так. Объясните,
плиз, если конечно не лень, ботать по клаве пальцАми...
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497600
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Black SavageНе ужели Stored Procedures и
SQL statements в DataWindows дают одинаковый перформенс? У меня, как
у человека раньше активно работающего с MS SQL Server 2000 , это просто в голове
не укладывается...
А почему они должны давать разную скорость?
Разница между ними только в том что в ХП запрос уже скомпилирован.
Но эта разница нивелируется из-за кеширования скомпилированных запросов в Оракле.
О чем и было сказано.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497644
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я веснаРазница между ними только в том что в ХП запрос уже скомпилирован.
Но эта разница нивелируется из-за кеширования скомпилированных запросов в Оракле.
О чем и было сказано.
Ну.... если бы все было так просто. В запросе же есть параметры. Как и в хранимой процедуре. Хранимая процедура скомпилирована для "средних" параметров - некой эвристики на которую ориентируется оптимизатор запросов.
В случае же запроса, в общем случае, каждый раз план исполнения строится заново. Да, есть кэш запросов, но он сработает если параметры будут такие же - план запроса все равно будет тот же. Конечно есть автоматическая параметризация запросов, но она применяется только к достаточно простым запросам (так по крайней мере в MS SQL).
Так что наличие наперед скомпилированного плана исполнения может давать как прирост (экономия на времени компиляции запроса), так и деградацию производительности ("средняя температура по больнице", с которой скомпилирован запрос никак не вяжется с конкретными значениями параметров запроса).
По-моему это справедливо для любой современной РСУБД, так что что-то в сомнениях Black Savage есть.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497662
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркВ случае же запроса, в общем случае, каждый раз план исполнения строится заново. Да, есть кэш запросов, но он сработает если параметры будут такие же - план запроса все равно будет тот же.

Для Оракла, если взять один и тот же текст запроса и поместить его в ХП и выполнить ее (с передачей результата клиенту), либо просто выполнить запрос, то на одних и тех же данных план будет одинаковый. И производительность будет одинаковая, за исключением того, что запрос в ХП компилируется только один раз, а самостоятельный запрос компилируется каждый раз при выполнении. При кешировании и эта разница устраняется.

Так что мнение, что должна быть какая-то разница в скорости ХП и SQL мне лично непонятно.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497675
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна И производительность будет одинаковая, за исключением того, что запрос в ХП компилируется только один раз, а самостоятельный запрос компилируется каждый раз при выполнении. При кешировании и эта разница устраняется.
Такого быть не может . Потому, что даже для запроса
Код: plaintext
select * from table where id =  1 
если id=1 в таблице встречается 2 раза и строк в таблице 10000 и есть индекс на id лучше делать index seek, то для
Код: plaintext
select * from table where id =  2 
которых в таблице 1000 лучше делать table scan.
Поэтому наперед скомпилированный запрос для "усредненных" параметров не может содержать оптимальный план исполнения для любых параметров. Вот в чем проблема.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34497783
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк 18-я весна И производительность будет одинаковая, за исключением того, что запрос в ХП компилируется только один раз, а самостоятельный запрос компилируется каждый раз при выполнении. При кешировании и эта разница устраняется.
Такого быть не может . Потому, что даже для запроса
Код: plaintext
select * from table where id =  1 
если id=1 в таблице встречается 2 раза и строк в таблице 10000 и есть индекс на id лучше делать index seek, то для
Код: plaintext
select * from table where id =  2 
которых в таблице 1000 лучше делать table scan.
Поэтому наперед скомпилированный запрос для "усредненных" параметров не может содержать оптимальный план исполнения для любых параметров. Вот в чем проблема.
Не понимаю с чем Вы спорите.
Про оптимальность речь вообще не шла.

Речь идет про различия между запросом в ХП и просто запросом.
В Оракле их нет.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498127
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я веснаНе понимаю с чем Вы спорите.
Про оптимальность речь вообще не шла.
Прочитайте самое первое сообщение еще раз
Black SavageНе ужели Stored Procedures и
SQL statements в DataWindows дают одинаковый перформенс?
18-я веснаРечь идет про различия между запросом в ХП и просто запросом.
В Оракле их нет.
Этого не может быть, потому что в общем случае в ХП есть аргументы а в запросе нет, поэтому различия должны быть. Речь здесь как раз и идет про производительность.
А может быть Black Savage вообще что-то другое имел ввиду...
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498523
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марка в запросе нетЭто еще почему? Если ораклоиды выяснят что вы пользуетесь запросами без bind-variables то скажут что писал идиот, и в какой-то мере будут правы.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498528
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркПоэтому наперед скомпилированный запрос для "усредненных" параметров не может содержать оптимальный план исполнения для любых параметров. Вот в чем проблема.
Итак для Оракла как мы выяснили и в случае SP и в случае запроса мы имеем СКОМПИЛИРОВАННЫЙ запрос. который МОЖЕТ быть неоптимальным ( с этим никто не спорит ). НО какое отношение неоптимальность запроса имеет к РАЗНИЦЕ между запросом и SP?
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498576
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите чайнка в Оракле, но вы случаем не путаете компиляцию запроса и построение плана запроса? Или в Оракле это одно общее действие? Не верится что-то...

С точки зрения абстрактной БД и ХП и отдельный запрос должны быть скомпилированы перед запуском и здесь у ХП действительно есть мизерное преимущество - на нее sql парсер запускается всего один раз а на отдельные запросы каждый раз.
А вот решение какой индекс надо использовать, какую таблицу брать из кеша а какую подчитать с диска это все должно решаться каждый раз заново и тут ХП с отдельным запросом равны. Если вычесть время компиляции (читай вычесть время на работу sql парсера) то скорость у них должна быть одинаковой.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498605
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк 18-я веснаНе понимаю с чем Вы спорите.
Про оптимальность речь вообще не шла.
Прочитайте самое первое сообщение еще раз

Я как раз на него и ссылался :)
автор
Black SavageНе ужели Stored Procedures и
SQL statements в DataWindows дают одинаковый перформенс?
18-я веснаРечь идет про различия между запросом в ХП и просто запросом.
В Оракле их нет.
Этого не может быть, потому что в общем случае в ХП есть аргументы а в запросе нет, поэтому различия должны быть. Речь здесь как раз и идет про производительность.
А может быть Black Savage вообще что-то другое имел ввиду...
Еще раз хочу обратить Ваше внимание, что речь идет про сравнение производительности ОДНОГО И ТОГО ЖЕ запроса в ХП и в самостоятельном операторе.
Если запросы разные, то я вообще не рискнул бы предсказать, какой из них будет быстрее, не видя их тексты :)
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498614
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПростите чайнка в Оракле, но вы случаем не путаете компиляцию запроса и построение плана запроса? Или в Оракле это одно общее действие? Не верится что-то...

Под компиляцией (в контексте этого топика) я понимаю все вышеперечисленные действия вместе взятые, поскольку внутреннее содержание этой операции для обсуждения не важно.

С точки зрения абстрактной БД и ХП и отдельный запрос должны быть скомпилированы перед запуском и здесь у ХП действительно есть мизерное преимущество - на нее sql парсер запускается всего один раз а на отдельные запросы каждый раз.
А вот решение какой индекс надо использовать, какую таблицу брать из кеша а какую подчитать с диска это все должно решаться каждый раз заново и тут ХП с отдельным запросом равны. Если вычесть время компиляции (читай вычесть время на работу sql парсера) то скорость у них должна быть одинаковой.
Оракл кеширует в том числе и планы. Просто если план становится неактуальным он удаляется из кеша.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498919
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПростите чайнка в Оракле, но вы случаем не путаете компиляцию запроса и построение плана запроса? Или в Оракле это одно общее действие? Не верится что-то...
Да это в общем-то везде как одно действие. В MS SQL, например, чтобы план исполнения ХП каждый раз строился заново ее нужно создать с опцией
Код: plaintext
with recompile
ЗоринАндрейЭто еще почему? Если ораклоиды выяснят что вы пользуетесь запросами без bind-variables то скажут что писал идиот, и в какой-то мере будут правы.
Да, про binding enabled там написано :)
ЗоринАндрейНО какое отношение неоптимальность запроса имеет к РАЗНИЦЕ между запросом и SP?
Ну, как я понимаю, имеется ввиду разница в производительности. Если пользоваться bind-variables, то я тогда тоже не очень понимаю в чем разница. Но кэшировать планы и запросы с параметрами выполнять, кстати, не только Oracle может.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34498947
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Вы еще подеритесь тут - горячие финские парни..."
(с) не мой.

Ладно, так и порешили:
Bruce ArmstrongSQL SELECT statements will achieve similar performance as stored procedures

В моем недавнем отчете я, собственно, так и написал, просто хотелось еще раз все проверить
и услышать мнение коллег...
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34499039
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы, робяты тут и наговорили...


Хранимая процедура скомпилирована для "средних" параметров - некой эвристики на которую ориентируется оптимизатор запросов

И производительность будет одинаковая, за исключением того, что запрос в ХП компилируется только один раз, а самостоятельный запрос компилируется каждый раз при выполнении

Поэтому наперед скомпилированный запрос для "усредненных" параметров не может содержать оптимальный план исполнения для любых параметров

Если ораклоиды выяснят что вы пользуетесь запросами без bind-variables то скажут что писал идиот, и в какой-то мере будут правы.


Внесу ка я свои две копейки...

1. в Oracle обычно говорят не про компиляцию запроса, а про разбор (parsing)
2. когда на сервер передается очередной запрос (впервые), Oracle производит его разбор, построение плана выполнения, связывание переменных (binding) и выполнение. В процессе разбора производится определение существования объектов (таблиц и т.д.), что в случае ХП происходит на этапе ее компиляции (здесь есть определенная экономия времени со стороны ХП, но небольшая).
3. разобранный запрос остается в кэше, поэтому если выдается точно такой же запрос, то повторно происходит только т.н. мягкий разбор (soft parsing), при котором, например, проверяются привилегии текущего пользователя на упомянутые в запросе объекты. Все остальное, в том числе и план выполнения, используются повторно. Здесь преимущество ХП м.б. только в том случае, если в приложении в нескольких местах используется одинаковый запрос, но написанный по разному (лишний пробел, регистр символов и т.д.). В этом случае повторного использования не будет, поскольку Oracle посчитает эти запросы разными и для каждого будет выполнен hard parse.
4. По поводу использования bind var тоже вопрос не однозначный. С одной стороны, их использование сокращает кол. hard parse, с другой, иногда наличие константы вместо bind var позволяет построить более оптимальный план выполнения (не зря в Oracle 9 введено т.н. "подсматривание значений" - bind peeking). Поэтому, в общем случае, для OLTP - систем, где запросы относительно короткоиграющие, рекомендуется использовать bind var, а для DSS - систем, где время выполнения значительно превышает время разбора и важен оптимальный план, рекомендуется использовать константы вместо bind var
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34499071
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To tru55
Публикуя свой вопрос, я признаться, как раз и рассчитывал получить такой вот
грамотный ответ. СПАСИБО
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34500433
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я веснаОракл кеширует в том числе и планы. Просто если план становится неактуальным он удаляется из кеша.А по каким критериям Оракл решает что план стал неактуален?
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34500787
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl 18-я веснаОракл кеширует в том числе и планы. Просто если план становится неактуальным он удаляется из кеша.А по каким критериям Оракл решает что план стал неактуален?
Ну например, если на некоторые объекты из запроса забираются права, то запрос сразу удаляется из кеша.
По другим критериям надо смотреть в доках.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34501140
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я веснаесли на некоторые объекты из запроса забираются права, то запрос сразу удаляется из кеша
А это точно так? По-моему выглядит несколько нелогично. Что из того, что у кого-то отобрали права на часть объектов запроса? Я понимаю, если изменилась схема данных, удалили индекс, но права?
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34501300
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк 18-я веснаесли на некоторые объекты из запроса забираются права, то запрос сразу удаляется из кеша
А это точно так? По-моему выглядит несколько нелогично. Что из того, что у кого-то отобрали права на часть объектов запроса? Я понимаю, если изменилась схема данных, удалили индекс, но права?

Это точно НЕ так.
В кэше есть специальные защелки, которые отслеживают зависимости объектов. Если какой-то объект меняется (например, добавляется колонка в таблицу), то все зависимые объекты помечаются как инвалидные. Если в SQL (или PL/SQL), находящемся в кэше, есть обращение к подобным объектам, то он тоже помечается как инвалидный и при следующей выдаче такого SQL будет повторно разобран (hard parse).
По поводу прав ситуация другая, поскольку неизвестно, какой пользователь выдаст очередной такой SQL. Права проверяются на этапе soft parse, о чем я уже написал.
Другое дело, что размеры кэша ограничены и если для очередного запроса не хватит места, то из кэша будет стерт наиболее давно не использовавшийся запрос (алгоритм LRU)
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34501652
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Black Savage Oleg1Там описано два способа. Про какой из них вопрос?
Я не понял вопроса. Цитата, которую я привел выше, является общим утверждением,
которое было выдвинуто автором в начале статьи, без относительно методов и способов.Зря. Там описан как старый способ, являющийся обходным решением, использование которого не дает никаких премуществ в скорости, и при этом добавляет накладные расходы. Для нового способа все утверждения по работе хранимых верны.
Про компиляцию уже выше разъяснили.
На практике скорость выполнения запроса напрямую или из хранимой в Оракле практически не отличается. А вот в MS как раз наоборот. Уж не знаю, что там навернули в этом сервере, но у него более-менее сложные запросы вызывают заметные затруднения и в хранимой могут выполняться раза в 2 быстрее, чем напрямую. Что IMHO ненормально.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34514268
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55 Локшин Марк 18-я веснаесли на некоторые объекты из запроса забираются права, то запрос сразу удаляется из кеша
А это точно так? По-моему выглядит несколько нелогично. Что из того, что у кого-то отобрали права на часть объектов запроса? Я понимаю, если изменилась схема данных, удалили индекс, но права?

Это точно НЕ так.


А Вы докажите.
Вот мое доказательство:

Код: 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.
-- Release 10.2.0.1.0 (XE)
-- имеем 3 сеанса:SQL1, SQL2, SQL3

SQL1> connect p1/qq@xe
Connected.
SQL1> grant select on t1 to p2;

Grant succeeded.

SQL2> connect p2/qq@xe
Connected.
-- прогоняем один запрос 2 раза, в кеше должна получится одна запись
SQL2> select  1  from p1.t1;

          1 
----------
          1 

SQL2> select  1  from p1.t1;

          1 
----------
          1 


SQL3> select sql_text from v$sql where sql_text like '%from p1.t1%';

SQL_TEXT
-----------------------------------------------------------------------

select sql_text from v$sql where sql_text like '%from p1.t1%'
select  1  from p1.t1

-- видим что запрос появился в кеше в одном экземпляре


SQL1> revoke select on t1 from p2;

Revoke succeeded.


SQL3> select sql_text from v$sql where sql_text like '%from p1.t1%';

SQL_TEXT
-----------------------------------------------------------------------

select sql_text from v$sql where sql_text like '%from p1.t1%'


-- видим что запрос исчез из кеша в момент изъятия прав

...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34514269
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк 18-я веснаесли на некоторые объекты из запроса забираются права, то запрос сразу удаляется из кеша
А это точно так? По-моему выглядит несколько нелогично. Что из того, что у кого-то отобрали права на часть объектов запроса? Я понимаю, если изменилась схема данных, удалили индекс, но права?
А по-моему логично: нет никакой разницы у вас нет прав на таблицу или таблица не существует - доступ к ней одинаково невозможен.
В Оракле даже ошибка будет и там и там одна и та же : Table or view does not exist.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34515315
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна по-моему логично: нет никакой разницы у вас нет прав на таблицу или таблица не существует - доступ к ней одинаково невозможен.
Права - они относятся к пользователю, а таблица - к схеме данных. Схема данных - она общая, а права индивидуальны для каждого пользователя. Изменение схемы данных редкое событие в рабочей базе, а вот добавление/изменение прав пользователя - может быть весьма часто. Что с того, что у кого-то нет прав на этот запрос. Может он его и никогда исполнять не будет? Может у него и прав на этот запрос вообще никогда не было. Согласно этой логике его вообще в кэш помещать нельзя. Кэш - он же общий.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34515840
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк 18-я весна по-моему логично: нет никакой разницы у вас нет прав на таблицу или таблица не существует - доступ к ней одинаково невозможен.
Права - они относятся к пользователю, а таблица - к схеме данных. Схема данных - она общая, а права индивидуальны для каждого пользователя. Изменение схемы данных редкое событие в рабочей базе, а вот добавление/изменение прав пользователя - может быть весьма часто. Что с того, что у кого-то нет прав на этот запрос. Может он его и никогда исполнять не будет? Может у него и прав на этот запрос вообще никогда не было. Согласно этой логике его вообще в кэш помещать нельзя. Кэш - он же общий.
И такое видение имеет право на существование.
Только не надо забывать что кеширование - это оптимизация использования ресурсов.
Тогда если у юзера забирают права, значит он скорее всего этот запрос никогда уже не выполнит, поэтому лучше освободить кеш для других запросов.

А касательно частоты изменения прав, я не могу согласиться. На мой взгляд в достаточно большом приложении структура схемы изменяется не менее часто чем права. Ну или по крайней мере так же редко :)
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34516162
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 18-весна

Проверил приведенный запрос на 10.2.0.1 Enterprise Edition. Действительно, запрос исчезает. Более того, он исчезает даже при выполнении команды GRANT на этот объект (что из приведенной логики уж никак следовать не должно). Кроме того, если пользователю 1 и 2 выдать права на этот объект, выполнить запрос по пользователем 1, а отнять права у пользователя 2 - тоже исчезает. Поскольку в Oracle 9.2.0.8 это не так, т.е. там этот запрос остается, то у меня такое впечатление, что это баг (хотя прямых доказательств пока не нашел)


2 Anatoly Moskovsky

1. Тогда если у юзера забирают права, значит он скорее всего этот запрос никогда уже не выполнит, поэтому лучше освободить кеш для других запросов
Да, но этот запрос вполне может выполнить другой пользователь (особенно, если этот запрос выдается из общего приложения). Если бы кэширование осуществлялось "по-пользовательно", то запросы бы располагались в PGA (памяти процесса), а не в SGA, которая доступна ВСЕМ процессам

2. А касательно частоты изменения прав, я не могу согласиться. На мой взгляд в достаточно большом приложении структура схемы изменяется не менее часто чем права.
Это если база девелоперская. На продакшн базе структура, как правило, достаточно статична, чего нельзя сказать о составе пользователей
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34516285
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru552 18-весна

Проверил приведенный запрос на 10.2.0.1 Enterprise Edition. Действительно, запрос исчезает. Более того, он исчезает даже при выполнении команды GRANT на этот объект (что из приведенной логики уж никак следовать не должно). Кроме того, если пользователю 1 и 2 выдать права на этот объект, выполнить запрос по пользователем 1, а отнять права у пользователя 2 - тоже исчезает. Поскольку в Oracle 9.2.0.8 это не так, т.е. там этот запрос остается, то у меня такое впечатление, что это баг (хотя прямых доказательств пока не нашел)


Скорее всего при повторном назначении права происходит неявный отбор предыдущего назначенного этого же права. Тогда все сходится.


1. Тогда если у юзера забирают права, значит он скорее всего этот запрос никогда уже не выполнит, поэтому лучше освободить кеш для других запросов
Да, но этот запрос вполне может выполнить другой пользователь (особенно, если этот запрос выдается из общего приложения). Если бы кэширование осуществлялось "по-пользовательно", то запросы бы располагались в PGA (памяти процесса), а не в SGA, которая доступна ВСЕМ процессам

Возможно те кто делал эту зависимость в Оракле посчитали (как и я считаю), что операция revoke настолько редка, что можно пренебречь очисткой кеша.


2. А касательно частоты изменения прав, я не могу согласиться. На мой взгляд в достаточно большом приложении структура схемы изменяется не менее часто чем права.
Это если база девелоперская. На продакшн базе структура, как правило, достаточно статична, чего нельзя сказать о составе пользователей
Я имел в виду, что большое приложение часто патчится, в т.ч. и структура БД.

PS.
Anatoly Moskovsky==18-весна
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34516339
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВозможно те кто делал эту зависимость в Оракле посчитали (как и я считаю), что операция revoke настолько редка, что можно пренебречь очисткой кеша.
Отчистку кэша делать просто глупо, т.к. план исполнения запроса не должен иметь связи с правами на объекты запроса, т.к. иначе он должен быть применим только к конкретному пользователю.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34516521
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Anatoly Moskovsky==18-весна

Сенкс, буду иметь ввиду

А по сути вопроса - сейчас провел следующий эксперимент - выдал гранты не явно, а через роль. В этом случае при REVOKE запрос остается в v$sql, только помечается колонка INVALIDATIONS (как было и в предыдущих версиях). Так что, судя по всему, все таки бага 10.2.0.1 (все таки первая версия второго релиза :) )
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34517832
18-я весна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55В этом случае при REVOKE запрос остается в v$sql, только помечается колонка INVALIDATIONS (как было и в предыдущих версиях).
А разве это по сути не эквивалентно удалению из кеша (ведь этот запрос уже не будет использован)?
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34518542
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18-я весна tru55В этом случае при REVOKE запрос остается в v$sql, только помечается колонка INVALIDATIONS (как было и в предыдущих версиях).
А разве это по сути не эквивалентно удалению из кеша (ведь этот запрос уже не будет использован)?

Сорри, еще раз проделал эксперимент - при REVOKE роли запрос виден в v$sql, при этом в колонке INVALIDATIONS - 0
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34518582
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55Сорри, еще раз проделал эксперимент - при REVOKE роли запрос виден в v$sql, при этом в колонке INVALIDATIONS - 0

Я тут подумал, что если рассматривать поведение при revoke с точки зрения оптимизации, то может быть и правильно, что прямой revoke приводит к очистке из кеша, а через роль не приводит.
Ведь если используется роль, то вероятность, что объект будет использован многими пользователями намного больше, чем при прямом назначении права.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34518782
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВедь если используется роль, то вероятность, что объект будет использован многими пользователями намного больше, чем при прямом назначении права.
Извините, но это какой-то бред, на уровне "операция сложения менее вероятна операции вычитания". Кэш он на то и кэш. Неиспользуемые объекты из него вытесняются по мере заполнения. И почему если одному пользователю дали права, то второму также дать не могут - совершенно не логично.
...
Рейтинг: 0 / 0
Using Oracle Stored Procedures in DataWindows
    #34519855
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly MoskovskyВедь если используется роль, то вероятность, что объект будет использован многими пользователями намного больше, чем при прямом назначении права.
(1)Извините, но это какой-то бред, на уровне "операция сложения менее вероятна операции вычитания". Кэш он на то и кэш. Неиспользуемые объекты из него вытесняются по мере заполнения. (2)И почему если одному пользователю дали права, то второму также дать не могут - совершенно не логично.
1. Не извиняем :)
"вытесняются по мере заполнения" это всего лишь один из способов использования кеша.
Есть как минимум еще два подхода - фоновая очистка кеша от редкоиспользуемых объектов и немедленная (по некому событию) очистка кеша от таких объектов.
Это может иметь смысл когда вероятность сценария "объект есть в кеше но невалиден -> удаление объекта из кеша" больше чем вероятность "объект есть в кеше и валиден" и при этом операция проверки валидности занимает ощутимое время (а с проверкой прав так оно и есть). Поэтому такую операцию лучше перенести на некритичные по времени события (например на отбор прав)
2.
Нелогично потому, что Вы рассматриваете систему в которой всего два пользователя.
А обсуждаемые эффекты сказываются на системах с большим кол-вом пользователей.
А там никто не назначает права напрямую, а только через роли. Или по крайней мере, IMHO, так считают разработчики Оракла :)
Таким образом использование ролей косвенно свидетельствует о масштабах БД и поэтому там используются другие подходы по управлению кешем.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Using Oracle Stored Procedures in DataWindows
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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