Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Indexed view for system object error. Как обойти? / 13 сообщений из 13, страница 1 из 1
28.06.2019, 20:10
    #39831799
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Добрый вечер.

Подскажите, как обойти проблему
авторCannot schema bind view 'dbo.XXX' because it references system object 'sys.columns'.

Задача:

SQL 2016 SP1

Есть стороннее приложение (axapta).
Выдает примерно 10 тысяч запросов вида :
(запрашивает перечень полей полнотекстового индекса для заданной таблички)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
exec sp_cursoropen @p1 output,

N'select name, change_tracking_state_desc 
from sys.columns AS Cols 
inner join sys.fulltext_index_columns AS FTSCols 
inner join sys.fulltext_indexes as FTS 
on FTSCols.object_id = FTS.object_id 
on Cols.object_id = FTSCols.object_id 
where Cols.column_id = FTSCols.column_id and Cols.object_id = object_id(''MYTABLE_X0001'')'

,@p3 output,@p4 output,@p5 output



каждый запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
select name, change_tracking_state_desc 
from sys.columns AS Cols 
inner join sys.fulltext_index_columns AS FTSCols 
inner join sys.fulltext_indexes as FTS 
on FTSCols.object_id = FTS.object_id 
on Cols.object_id = FTSCols.object_id 
where Cols.column_id = FTSCols.column_id and Cols.object_id = object_id('MYTABLE_X0001')


длится порядка 60-80 миллисекунд.

Т.е. в сумме все дает больше 10 минут.
Нужно в 10-100 сократить время.

При этом, если убрать фильтр по табличке
Код: sql
1.
Cols.object_id = object_id(''MYTABLE_X0001'')



то выборка вернет всего навсего 25 строк !!!
Т.е. полнотекстовые индексы почти не используются. Обидно тратить 10 минут на постоянную выборку из 25 записей :(

Как быть ?
Я пытался создать индексированную вьюху по инструкции
http://www.sqlservertutorial.net/sql-server-views/sql-server-indexed-view/

тогда в ней будет порядка 25 записей и по-любому запрос к ней должен работать быстрее чем 50 миллисекунд.
Тогда можно сильно сократить время ожидания.

Но получил ошибку вынесенную в заголовок.

Как еще можно решить описанную проблему ?

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

Может можно скорректировать план исполнения запроса чтобы он работал быстрее ?

План смотрел - сплошные Nested loop и Clustered index seek.
...
Рейтинг: 0 / 0
28.06.2019, 20:24
    #39831804
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
План запроса приложил

...
Рейтинг: 0 / 0
28.06.2019, 21:06
    #39831813
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Я думаю, вам на форум по Аксапте, чтобы выяснить, как лечить ее закидоны выполнять по 10к запросов.
...
Рейтинг: 0 / 0
29.06.2019, 14:28
    #39831876
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Павел677,

индексированное представление на системный объект не сделаешь.
сделайте пользовательскую таблицу и обновляйте ее время от времени (можно с помощью ddl тригерров),
а обращения вашей программы направьте на таблицу
...
Рейтинг: 0 / 0
01.07.2019, 09:23
    #39832124
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Гавриленко Сергей АлексеевичЯ думаю, вам на форум по Аксапте, чтобы выяснить, как лечить ее закидоны выполнять по 10к запросов.

В Аксапте это зашито в Exe-нике.
Поэтому ищу обходные пути, как в самом SQL ускорить запрос.
Как вариант (и как посоветовали) заполнять свою табличку нужными записями и патчить exe-ник перенаправляя его на свою табличку, но это совсем тонкая хирургия - не хотелось бы так.
...
Рейтинг: 0 / 0
01.07.2019, 09:25
    #39832125
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
felix_ffПавел677,
...
а обращения вашей программы направьте на таблицу

Спасибо за отзыв.
Это непросто сделать. Не хочется патчить Exe-ник (штатно мне это недоступно).

Может можно вправить мозг CBO, чтобы он выбрал более быстрый план для запроса по системным вьюхам ?
...
Рейтинг: 0 / 0
01.07.2019, 10:17
    #39832142
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Павел677Может можно вправить мозг CBO, чтобы он выбрал более быстрый план для запроса по системным вьюхам ?Так план же и так нормальный.
Тут проблема в том, что делается 10 тыщ запросов, а не в том, что план кривой.
Конечно, из индексированной вьюхи запрос делался бы раз в 10 быстрее, это да, но если бы прога просто считала при запуске эти 25 строк в память, было бы намного лучше...
...
Рейтинг: 0 / 0
01.07.2019, 11:39
    #39832186
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Павел677,

лучше не получите по причине использования object_id('MYTABLE_X0001').
...
Рейтинг: 0 / 0
01.07.2019, 14:23
    #39832289
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Владислав КолосовПавел677,

лучше не получите по причине использования object_id('MYTABLE_X0001').ТС хочет получить индекс-сиик из одного индекса, что бывло бы возможно, если бы получилось сделать индексированную вьюху. Но, увы...
...
Рейтинг: 0 / 0
01.07.2019, 15:48
    #39832366
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
alexeyvgТут проблема в том, что делается 10 тыщ запросов, а не в том, что план кривой.
Конечно, из индексированной вьюхи запрос делался бы раз в 10 быстрее, это да, но если бы прога просто считала при запуске эти 25 строк в память, было бы намного лучше...

Со всем согласен, но поменять запрос почти невозможно (править exe-ник стремно, там запрос в нем из кусков собирается. В виде одной строки его в скомпилированном коде нет).
Поэтому я и подумал что может можно как-то еще улучшить план или обмануть сиквел и создать материализованную вьюху. Там если убрать фильтр по табличке, то возвращается всего 25 (!) записей. Т.е. с материализованной вьюхой оно было летало меньше 1 миллисекунды. Ну а если ее совсем никак нельзя сделать, то может выкрутить план чтобы еще быстрее фильтровало. Изврат, но что же делать...
...
Рейтинг: 0 / 0
01.07.2019, 19:30
    #39832466
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Павел677Ну а если ее совсем никак нельзя сделать, то может выкрутить план чтобы еще быстрее фильтровалоНе, план там идеальный.
...
Рейтинг: 0 / 0
01.07.2019, 20:37
    #39832492
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Павел677но поменять запрос почти невозможно (править exe-ник стремно, там запрос в нем из кусков собирается. В виде одной строки его в скомпилированном коде нет).Ну, зависит от того, как он собирается. Хотя конечно это не дело.

Самое правильное - обратиться к разработчикам.
...
Рейтинг: 0 / 0
23.08.2019, 09:45
    #39853107
Павел677
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Indexed view for system object error. Как обойти?
Проблема решается так
https://www.axforum.info/forums/showthread.php?p=418755#post418755

Все же удалось подкрутить оптимизатор, не смотря на литералы в запросе.
Оказывается можно сказать оптимизатору чтобы он работал как-будто там параметры и тогда все быстро. План запроса не перестраивается на каждом вызове и все работает мгновенно.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Indexed view for system object error. Как обойти? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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