powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
22 сообщений из 22, страница 1 из 1
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186038
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Был у меня запрос:

SELECT A."USER_ID", A."FIO", A."NAME_TERR", A."TTYPE", A."TOWN",
A."SHORTNAME", A."STREET", A."STYPE", A."HOUSE", A."CORPUS", A."FLAT"
FROM
"KAMV" A WHERE ( ISCORP = 'N' AND IN09 = 'Y' AND USER_ID IN (SELECT USER_ID
FROM T_USERS U WHERE U.ISCORP = 'N' AND U.HOUSE_ID IN (SELECT H.HOUSE_ID
FROM V_HOUSES H WHERE H.STREET_ID LIKE '42%' AND H.STREET LIKE 'ХИМИКОВ%'
AND H.TOWN LIKE '%' AND H.HOUSE = '15') UNION SELECT USER_ID FROM
T_SERVICES S WHERE S.HOUSE_ID IN (SELECT H.HOUSE_ID FROM V_HOUSES H WHERE
H.STREET_ID LIKE '42%' AND H.STREET LIKE 'ХИМИКОВ%' AND H.TOWN LIKE '%' AND
H.HOUSE = '15')) AND FLAT = '164' ) ORDER BY A."FIO", A."USER_ID"


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 6 0.09 0.09 0 0 0 0
Execute 6 0.00 0.00 0 0 0 0
Fetch 6 0.05 0.06 0 9378 0 6
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 18 0.14 0.15 0 9378 0 6

Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 43

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT ORDER BY
1 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
282 VIEW VW_NSO_1
282 SORT UNIQUE
562 UNION-ALL
280 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
6 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
108 INDEX RANGE SCAN (object id 40942)
6 TABLE ACCESS BY INDEX ROWID O_HOUSES
6 AND-EQUAL
33 INDEX RANGE SCAN (object id 31098)
29 INDEX RANGE SCAN (object id 31099)
2 INDEX UNIQUE SCAN (object id 34845)
2 TABLE ACCESS BY INDEX ROWID T_TOWN
2 INDEX UNIQUE SCAN (object id 35019)
2 INDEX UNIQUE SCAN (object id 35021)
280 TABLE ACCESS BY INDEX ROWID T_USERS
284 INDEX RANGE SCAN (object id 35044)
282 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
6 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
108 INDEX RANGE SCAN (object id 40942)
6 TABLE ACCESS BY INDEX ROWID O_HOUSES
6 AND-EQUAL
33 INDEX RANGE SCAN (object id 31098)
29 INDEX RANGE SCAN (object id 31099)
2 INDEX UNIQUE SCAN (object id 34845)
2 TABLE ACCESS BY INDEX ROWID T_TOWN
2 INDEX UNIQUE SCAN (object id 35019)
2 INDEX UNIQUE SCAN (object id 35021)
282 TABLE ACCESS BY INDEX ROWID T_SERVICES
283 INDEX RANGE SCAN (object id 34775)
282 TABLE ACCESS BY INDEX ROWID T_USERS
562 INDEX UNIQUE SCAN (object id 35051)
2 TABLE ACCESS BY INDEX ROWID O_HOUSES
2 INDEX UNIQUE SCAN (object id 31103)
2 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
2 INDEX UNIQUE SCAN (object id 34843)
2 TABLE ACCESS BY INDEX ROWID T_STREET_TYPE
2 INDEX UNIQUE SCAN (object id 34845)
2 TABLE ACCESS BY INDEX ROWID T_TOWN
2 INDEX UNIQUE SCAN (object id 35019)
2 TABLE ACCESS BY INDEX ROWID T_TOWN_TYPE
2 INDEX UNIQUE SCAN (object id 35021)
2 TABLE ACCESS BY INDEX ROWID T_TERRITORY_CONSTITUTE
2 INDEX UNIQUE SCAN (object id 34956)
1 TABLE ACCESS BY INDEX ROWID T_TERRITORY_TYPE
2 INDEX UNIQUE SCAN (object id 34958)


а я его переписал с использованием связанных переменных:

SELECT USER_ID
FROM
"KAMV" A WHERE (ISCORP = 'N' AND IN09 = 'Y' AND USER_ID IN (SELECT
USER_ID FROM T_USERS U WHERE U.ISCORP = 'N' AND U.HOUSE_ID IN (SELECT
H.HOUSE_ID FROM V_HOUSES H WHERE H.STREET_ID LIKE '42%' AND H.STREET
LIKE :b1 AND H.TOWN LIKE :b2 AND H.HOUSE = :b3 ) UNION SELECT USER_ID
FROM T_SERVICES S WHERE S.HOUSE_ID IN (SELECT H.HOUSE_ID FROM V_HOUSES H
WHERE H.STREET_ID LIKE '42%' AND H.STREET LIKE :b1 AND H.TOWN LIKE
:b2 AND H.HOUSE = :b3 )) AND FLAT = :b7 ) ORDER BY A."FIO",A."USER_ID"


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 6 0.00 0.00 0 0 0 0
Execute 12 0.05 0.05 0 0 0 0
Fetch 6 1.39 1.37 2 22812 216 6
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 24 1.44 1.42 2 22812 216 6

Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 43 (recursive depth: 1)

Rows Row Source Operation
------- ---------------------------------------------------
1 SORT ORDER BY
1 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
282 VIEW VW_NSO_1
282 SORT UNIQUE
562 UNION-ALL
280 NESTED LOOPS
281 HASH JOIN
280 NESTED LOOPS
281 HASH JOIN
2772 HASH JOIN
268 TABLE ACCESS FULL O_HOUSES
144033 TABLE ACCESS FULL T_USERS
5 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
108 INDEX RANGE SCAN (object id 40942)
280 INDEX UNIQUE SCAN (object id 34845)
33081 TABLE ACCESS FULL T_TOWN
280 INDEX UNIQUE SCAN (object id 35021)
282 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 NESTED LOOPS
2 HASH JOIN
268 TABLE ACCESS FULL O_HOUSES
5 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
108 INDEX RANGE SCAN (object id 40942)
2 INDEX UNIQUE SCAN (object id 34845)
2 TABLE ACCESS BY INDEX ROWID T_TOWN
2 INDEX UNIQUE SCAN (object id 35019)
2 INDEX UNIQUE SCAN (object id 35021)
282 TABLE ACCESS BY INDEX ROWID T_SERVICES
283 INDEX RANGE SCAN (object id 34775)
282 TABLE ACCESS BY INDEX ROWID T_USERS
562 INDEX UNIQUE SCAN (object id 35051)
2 TABLE ACCESS BY INDEX ROWID O_HOUSES
2 INDEX UNIQUE SCAN (object id 31103)
2 TABLE ACCESS BY INDEX ROWID T_STREETS_REF
2 INDEX UNIQUE SCAN (object id 34843)
2 INDEX UNIQUE SCAN (object id 34845)
2 TABLE ACCESS BY INDEX ROWID T_TOWN
2 INDEX UNIQUE SCAN (object id 35019)
2 INDEX UNIQUE SCAN (object id 35021)
2 TABLE ACCESS BY INDEX ROWID T_TERRITORY_CONSTITUTE
2 INDEX UNIQUE SCAN (object id 34956)
1 INDEX UNIQUE SCAN (object id 34958)

и получил полное сканирование некоторых таблиц, вместо использования индекса и соответсвенно снижение скорости на порядок. Похоже оптимизатор не может оценить избирательность запроса по индексу по этим таблицам и принимает решение на full scan table.

Возникает извечный вопрос, что делать ???

Причем kamv & v_houses - это view-ы.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186055
mutate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а таблицы как давно анализированы? если нет, попробуй после анализа с хинтом FIRST_ROWS
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186059
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дык анализ здесь причем, ведь сказано - без связанных переменных все работает быстро и значит статистика актуальна. Да и перестраивал я ее.
Вот если в некторых моментах like поменять на = сразу индекс цепляется, а сие означает, что избирательность запроса повысилась и оптимизатор принял решение использовать индекс?????

Вот непонятно, Кайт пишет, что использовать связанные переменные обязательно. И приводит примеры. Я проверил - все правильно. НО !!!
У него в примерах запросы простые. А в документации по Оракл написано - использование связанных переменых может помешать оптимизатору использовать индекс, из-за невозможности оценить избирательность, что у меня и происходит. Вывод !!???? Используй связанные переменные - улучшишь масштабируемость, но снизишь скорость выполнения. Кайт этот вопрос обходит стороной, и это неспроста, хотя говорит о связанных переменных много, это у него конек, похоже.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186081
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы ВНИМАТЕЛЬНО читали Кайта, он пишет, что ИНГДА связанные переменные это плохо, именно потому, что оптимизатор не может применить статистику, которую он применяет в случае литералов.

Если подумать, план запроса определяется при разборе (до подстановки переменных). Значит должен быть оптимальным при всех значениях подставляемых переменных, значит гистограммы применять нельзя.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186089
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про план построения:
а как вы хотите чтобы он со связанной переменной при условии like использовал индекс??? он этого не может, откуда он знает что у вас в переменной значение 'a%', а не '%a%'

уже давно говорилось что bind переменных надо делать для OLTP систем,
а для DSS его делать совершенно не обязательно!

как вариант попробуйте указать ему хит --+ index (имя_таблицы имя_индекса)
к тому же попробуйте выкинуть хинт first_row, он все равно не работает у вас там order by, и для того чтобы выдать вам 1-ю строчку ему надо все равно в памяти все данные получить и отсортировать
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186091
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 DAV2
Есно, а вы что хотели? oracle - это СУБД а не гадалка :-)
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186097
mutate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во, раз статистика актуальна, то анализ как раз нужен.. проблема в том, что оптимизатор не знает что в bind переменной, но видит like и допускает возможность в переменной наличие лидирующего символа "%", чего не случается при прямом подставлении значений.. вывод такой - плохо использовать like в этом случае для bind переменных.. попробуй типа
...
WHERE (H.STREET_ID >= :b1 and H.STREET_ID <:b1) AND (H.STREET >= :b2 and H.STREET <:b2)
.....
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186103
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для систем OLTP связанные переменные желательно использовать. Что это значит? То, что имеется много DML и простые запросы. Для нерегламентированных (напр, редко встречаемых или очень специфических с критическими требованиями по скорости) использование связанных переменных противопоказано.

Не надо уподобляться религиозным фанатикам.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186164
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменные связывания и совместное использование курсоров: новые тенденции в СУБД Oracle9i .

Особые ситуации

Использование переменных связывания в операторах SQL либо непосредственно запрограммированных в приложении, либо косвенно с помощью установки значения параметра cursor_sharing , в общем, позволяет повысить производительность. Однако есть случаи, когда их использование либо не оказывает никакого реального влияния на производительность, либо вы подвергаетесь реальному риску снижения ее.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186186
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 denis Popov:: Very well!
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186196
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага вот пошел конкретный треп,

Вот цитата из Кайта: ... чем больше сеансов разбирает запросы, тем больше приходится ждать освобождения защелок в библиотечном кэше, и работа системы постепенно останавливается ...

Во, это не я написал, да я читаю оччень внимательно, и прочитал, что применение связанных переменных может ухудшить ситуацию, но этому вопросу уделено две строки (буквально !!!), а вот преимуществам использования св. переменных - несколько страниц в 2-х (!!!) главах.

У меня сорок пользователей за сутки выдают 20 000 в среднем запросов, и, по Кайту, если я не буду использовать св. переменные (а я их пока не использую), то моя система тихо умрет из-за блокирования разделяемого пула. А если я их использую (это уже я), то система тихо умрет из-за многочисленных full table scan ?????, а операторы - от ожидания ответов.

Где же золотая середина, и почему Кайт о ней ничего не пишет, у него однозначно - используйте и все !!!
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186203
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dav

а вы не пробовали писать запросы так, чтобы full table scan не было???

например, полазить по хелпу и посмотреть что такое context катридж
или вместо like использовать символы > < и т п
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186209
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to DAV2:

Я могу обьяснить почему он так говорит. Его утверждение - зто исходная точка от которой нужно отталкиваться. А дальше всё зависит от уровня на котором ты находишься. Все ораклисты проходят через несколько трансформаций своего мировосприятия или точнее ораклевосприятия.

Если ты только начал работать с Oracle - ты должен об этом знать и придёрживаться этого правила и всех которые декларируются Oracle.

Когда ты уже приобрёл опыт , ты уже понимаешь когда это нужно, когда нет.
Ты применяешь избирательно, со смыслом.

Последняя стадия, это самая высшая, на этой стадии ораклист отрицает все основые постулаты. Ему говорят: индексы помогают в запросах, ог говорит: да вы рехнулись ребята - это миф. Ему говорят - использование связанных переменных - это хорошо. Он отвечает: ну что-вы упали - с дуба, это миф.


Есть еще одна редкая категория, это подобные Тому Кайту - он не просто ораклист, он учитель. Поэтому он излагает с последней стадии, но как мудрый учитель для тех кто на первой стадии.

Поэтому, диалог о пользе имеет смысл между ораклистами одного уровня.
Осталось только определиться на каком ты уровне.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186219
Alex586
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно треп пошел, потому что обсуждается проблема на очень абстрактном уровне

1) не использовать пременные
2) использовать переменные

Не только важно, использовать ли, но и как использовать. Том Кайт ясно пишет что не следует их использовать в запросах, если отсутсвие информации о распределени данных приведет к значительной потрере производительности. При разработке нужно тестировать запрос в различных вариантах.

получил полное сканирование некоторых таблиц, вместо использования индекса и соответсвенно снижение скорости на порядок

на это тебе дали ясный ответ

во, раз статистика актуальна, то анализ как раз нужен.. проблема в том, что оптимизатор не знает что в bind переменной, но видит like и допускает возможность в переменной наличие лидирующего символа "%", чего не случается при прямом подставлении значений.. вывод такой - плохо использовать like в этом случае для bind переменных..

Использование bind переменных экономит время разбора операторов а не творит чудеса при их выполнении.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186237
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну по твоей классификации только начинаю работать с Оракл, но зерна от плевел уже отличаю. И вовсе не собираюсь верить всему, что говорят. Потому в форум полез. И все, что написали, верно, со всем согласен.

Но !!! Категорически же утверждает - работать не будет, на протяжении всей книги. Или он пытается воспитать из нас закаленных профи, как в последнем варианте, типа я говорю, а вы не верьте.

Прямо антисистема какя-то по Гумилеву.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186291
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, он имел в виду, что если вы решите увеличить пул, а такое поползновение бывает довольно часто, то система может встать из-за возрастания накладных расходов на поддержание пула.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186434
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Интересна частота использования данного запроса.
2) Помещаются ли в кэш результаты фулл скана таблиц или происходит их перечитывание с диска

Собственно после этого уже можно думать от чего "помрет" система :))
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186586
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 DAV2
А что подзапрос, если его отдельно запустить скажем из sqlplus с переменными привязки тоже full scan делает?
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186641
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote]
У меня сорок пользователей за сутки выдают 20 000 в среднем запросов
[/quote]

Это -- не OLTP система. Это показатели средненькие такие для DSS.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32186974
DAV2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, а по сути то это все-таки OLTP, с некоторыми элементами (АРМами) DSS.

Да, прочитал я статью, которую указал (спасибо ему) Denis Popov про изменения в Oracle 9i.

Там как раз перед первым выполнением значения переменных подставляются и на основе этих значений строится план выполнения, который затем используется для любых значений связанных переменных.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32187872
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и хочется ответить: "всю статистику и сложные запросы -- на исторический сервер".

В твоём же случае "доктор, вы определитесь -- или туда, или обратно". То есть, что тебе выгоднее: проиграть немного на разборе и замусоренном shared pool, либо же проиграть неизвестно сколько на I/O из-за специфики запроса.
...
Рейтинг: 0 / 0
СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
    #32188013
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, все таки использовать bind и закрепить план не пробовал?
Но это лиш частный случай ...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / СВЯЗАННЫЕ ПЕРЕМЕННЫЕ УМЕНЬШАЮТ СКОРОСТЬ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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