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

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

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

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

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

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

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

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

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


Код: 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
27.07.2017, 14:46
    #39496049
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется абстрактный план (2)
Mikle83, пробовал создавать план без дампа напрямую через Create Plan - те же яйца вид сбоку
...
Рейтинг: 0 / 0
27.07.2017, 17:02
    #39496217
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется абстрактный план (2)
Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ
...
Рейтинг: 0 / 0
27.07.2017, 17:59
    #39496260
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется абстрактный план (2)
Mikle83Все вопрос закрыт.
abstract plan load - то самое недостающие "звено" (или его аналог на сессию).
Надо как-нить собраться с мыслями и добавить в FAQ

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

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

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


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