Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Sybase ASA, ASE, IQ Новый топик    Ответить
 Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Позанимаюсь "воскрешением" тем.
ASE 15.7
Есть запрос с темповой таблицей. Есть план привязанный и раскиданный и в in и в out.
И есть выполнение запроса без этого плана...

Вопрос - что я делаю не так :) Что-то надо еще серверу магическое сказать, чтоб он начал план пользовать самостоятельно?
27 июл 17, 10:44    [20678881]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Дополню - план валидный, запрос тоже.
Пробовал полностью скопировать запрос из sysqueryplans etс.

Сервер в упор не видит привязанный план
27 июл 17, 10:45    [20678886]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
Когда план читается и в нём ошибка (например, синтаксиса), он не будет применяться, и ASE не будет выдавать никакую ошибку, диагностику в лог и т.п.

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

Наверное, единственный вариант добиться применения абстрактного плана -- сдампить полный абстрактный план работающего запроса, положить его в IN, и добиться, чтобы он использовался (в show query plan будет какая-то строчка об этом, если я правильно помню). Затем уже, постоянно проверяя, что план всё ещё используется, последовательно модифицировать план в нужном направлении, сначала сделать план частичным, потом добиться уже нужной логики исполнения запроса.
Для максимального приближения к желаемому плану можно сначала добавить в запрос хинты по максимуму, а затем взять максимально близкий к желаемому абстрактный план и выкинуть хинты из запроса.
27 июл 17, 12:48    [20679446]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
Mikle83
Дополню - план валидный, запрос тоже.
Пробовал полностью скопировать запрос из sysqueryplans etс.
Сервер в упор не видит привязанный план


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

Если бы ты прислал запрос и план (если они не очень большой), может мы могли бы что-то подсказать.
27 июл 17, 12:51    [20679459]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
MasterZiv,

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

Т.е. что было сделано:
1. Select ....... plan "{plantext}" - отрабатывает успешно и как надо с применением плана
2. create plan с этим же запросом и планом один в один.
3. Копирование из аут в ин.
4. И результата ноль...
27 июл 17, 13:55    [20679722]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
сейчас попробую "это" вытащить в удобоваримом виде
27 июл 17, 13:59    [20679745]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Как-то так все происходит

+

------------------------------------------------------------------------------------------
---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

27 июл 17, 14:42    [20679895]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Mikle83, пробовал создавать план без дампа напрямую через Create Plan - те же яйца вид сбоку
27 июл 17, 14:46    [20679909]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ
27 июл 17, 17:02    [20680536]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
Mikle83
Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ


set plan load
что ли не делал ?
27 июл 17, 17:59    [20680733]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
MasterZiv, хуже.

На нужную сессию вбросить параметр не мог.
Нужен был конфиг сервера, а его динамическое изменение (не пойму пока как), но забанили ДБА.
28 июл 17, 18:58    [20683805]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Бумбараш
Member

Откуда: никем не победимая, самая любимая
Сообщений: 1820
Абстрактный план можно вписать в запрос в конце. Для этого вроде никаких настроек не надо.

Ну это так, на всякий случай.
4 авг 17, 10:50    [20699930]     Ответить | Цитировать Сообщить модератору
 Re: Не используется абстрактный план (2)  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 609
Бумбараш,
это да, можно. Если есть возможность оперативно "влезть" в исходный код и задеплоить его на проде.
Но с прикруткой планов на уровне сервера - все-таки интереснее оказалось :)
4 авг 17, 11:26    [20700088]     Ответить | Цитировать Сообщить модератору
Все форумы / Sybase ASA, ASE, IQ Ответить