powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Не используется абстрактный план (2)
13 сообщений из 13, страница 1 из 1
Не используется абстрактный план (2)
    #39495801
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позанимаюсь "воскрешением" тем.
ASE 15.7
Есть запрос с темповой таблицей. Есть план привязанный и раскиданный и в in и в out.
И есть выполнение запроса без этого плана...

Вопрос - что я делаю не так :) Что-то надо еще серверу магическое сказать, чтоб он начал план пользовать самостоятельно?
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39495804
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню - план валидный, запрос тоже.
Пробовал полностью скопировать запрос из sysqueryplans etс.

Сервер в упор не видит привязанный план
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39495935
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда план читается и в нём ошибка (например, синтаксиса), он не будет применяться, и ASE не будет выдавать никакую ошибку, диагностику в лог и т.п.

Синтаксис абстрактных планов достаточно сложен, не очень интуитивен, (там грубо говоря LISP), поэтому в нём легко сделать ошибку и не заметить -- средств для поддержки разработки планов тоже нет.

Наверное, единственный вариант добиться применения абстрактного плана -- сдампить полный абстрактный план работающего запроса, положить его в IN, и добиться, чтобы он использовался (в show query plan будет какая-то строчка об этом, если я правильно помню). Затем уже, постоянно проверяя, что план всё ещё используется, последовательно модифицировать план в нужном направлении, сначала сделать план частичным, потом добиться уже нужной логики исполнения запроса.
Для максимального приближения к желаемому плану можно сначала добавить в запрос хинты по максимуму, а затем взять максимально близкий к желаемому абстрактный план и выкинуть хинты из запроса.
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39495938
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83Дополню - план валидный, запрос тоже.
Пробовал полностью скопировать запрос из sysqueryplans etс.
Сервер в упор не видит привязанный план

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

Если бы ты прислал запрос и план (если они не очень большой), может мы могли бы что-то подсказать.
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496006
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

так план предварительно успешно проверен с выполнением этого же запроса.

Т.е. что было сделано:
1. Select ....... plan "{plantext}" - отрабатывает успешно и как надо с применением плана
2. create plan с этим же запросом и планом один в один.
3. Копирование из аут в ин.
4. И результата ноль...
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496011
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас попробую "это" вытащить в удобоваримом виде
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496045
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так все происходит


Код: plsql
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.
------------------------------------------------------------------------------------------
---create table structure and indexes
Create table #TempTable (FK int)
Create table MainTable (Id int, MainKey int, Column2 varchar(100))
Create table SomeAdditionalTable (MainKey int, AdditionalKey int, Column1 int)
go
Create index MainTable_I12 on MainTable(Column2) 
Create index SomeAdditionalTable_Id1 on SomeAdditionalTable (MainKey, AdditionalKey) 
---create table structure and indexes
------------------------------------------------------------------------------------------
go
------------------------------------------------------------------------------------------
---dump plan to sdout and copy it to stdin
set plan dump on 
go
select 
  t.Id, f.Column1, t.MainKey 
from #TempTable s 
  join MainTable t on t.Id = s.FK 
  join SomeAdditionalTable f on f.MainKey = t.MainKey and f.AdditionalKey = 0 
where f.Column1 <> 0 and t.Column2 <> 'SomeTextValue'
plan "( nl_join ( sort ( nl_join ( t_scan ( table ( s #TempTable ) ) ) ( i_scan MainTable_I12 ( table ( t MainTable ) ) ) ) ) ( sort ( i_scan SomeAdditionalTable_Id1 ( table ( f SomeAdditionalTable ) ) ) ) ) ( prop ( table ( s #TempTable ) ) ( parallel 1 ) ( prefetch 2 ) ( lru ) ) ( prop ( table ( t MainTable ) ) ( parallel 1 ) ( prefetch 16 ) ( lru ) ) ( prop ( table ( f SomeAdditionalTable ) ) ( parallel 1 ) ( prefetch 16 ) ( lru ) )"
go
set plan dump off
go
sp_copy_all_qplans ap_stdout, ap_stdin
---dump plan to sdout and copy it to stdin
------------------------------------------------------------------------------------------
go
set showplan on
go
------------------------------------------------------------------------------------------
---try to get the same select with same plan - HER TAM
select 
  t.Id, f.Column1, t.MainKey 
from #TempTable s 
  join MainTable t on t.Id = s.FK 
  join SomeAdditionalTable f on f.MainKey = t.MainKey and f.AdditionalKey = 0 
where f.Column1 <> 0 and t.Column2 <> 'SomeTextValue'
---try to get the same select with same plan - HER TAM
------------------------------------------------------------------------------------------
go


...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496049
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83, пробовал создавать план без дампа напрямую через Create Plan - те же яйца вид сбоку
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496217
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496260
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ

set plan load
что ли не делал ?
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39496882
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, хуже.

На нужную сессию вбросить параметр не мог.
Нужен был конфиг сервера, а его динамическое изменение (не пойму пока как), но забанили ДБА.
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39500160
Бумбараш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абстрактный план можно вписать в запрос в конце. Для этого вроде никаких настроек не надо.

Ну это так, на всякий случай.
...
Рейтинг: 0 / 0
Не используется абстрактный план (2)
    #39500189
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бумбараш,
это да, можно. Если есть возможность оперативно "влезть" в исходный код и задеплоить его на проде.
Но с прикруткой планов на уровне сервера - все-таки интереснее оказалось :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Не используется абстрактный план (2)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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