Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рукодельное кеширование  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Есть задачка разогнать табличную функцию, закешировав результат, который зависит от параметра.

Когда я решал подобную задачу на Oracle, то у меня были глобальные переменные в пакете, в которых я хранил массивы результатов.

Какой подход правильно использовать в MS SQL ?
1 окт 14, 12:11    [16643453]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
Glory
Member

Откуда:
Сообщений: 104751
essbase.ru
Какой подход правильно использовать в MS SQL ?

Точно также - путем помещения результата функции в табличную переменную.
1 окт 14, 12:16    [16643506]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8819
Если количество наборов данных конечно, то можно создать таблицу с прекалькулированными результатами выполнения функции.
1 окт 14, 12:19    [16643542]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
Точно также - путем помещения результата функции в табличную переменную.

в Т-SQL есть способ сделать ее глобальной ?
1 окт 14, 12:54    [16643850]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Владислав Колосов
то можно создать таблицу с прекалькулированными результатами выполнения функции.


из табличных функций разрешен Insert ?
1 окт 14, 12:55    [16643855]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
Glory
Member

Откуда:
Сообщений: 104751
essbase.ru
из табличных функций разрешен Insert ?

Достаточно если из табличных функци разрешен select
1 окт 14, 12:57    [16643863]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
essbase.ru
из табличных функций разрешен Insert ?

в другую таблицу ? Да ,а вообще хелп по продукту читать пора начинать
1 окт 14, 12:57    [16643865]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
essbase.ru
Есть задачка разогнать табличную функцию, закешировав результат, который зависит от параметра.

Когда я решал подобную задачу на Oracle, то у меня были глобальные переменные в пакете, в которых я хранил массивы результатов.

Какой подход правильно использовать в MS SQL ?
Прозрачное кеширование внутри функции в MSSQL сделать нельзя, если только функция не CLR.

Нужно переделать место её вызова, организовав кеширование там.
1 окт 14, 15:20    [16644947]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
yar2292
Guest
essbase.ru,

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

решение, по большому счету, только одно - CLR

Далее - вам на выбор
а) вставлять в глобальную таблицу - возможно, но очень некрасивая и ресурсоёмкая вставка, требующая создания нового подключения к базе
б) кэшировать своими средствами в памяти - начиная от банально static Hashtable, что практически официально не документировано ну и заканчивая велосипедами на выбор автора.
9 окт 14, 01:39    [16679645]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
essbase.ru
Есть задачка разогнать табличную функцию, закешировав результат, который зависит от параметра.

Когда я решал подобную задачу на Oracle, то у меня были глобальные переменные в пакете, в которых я хранил массивы результатов.

Какой подход правильно использовать в MS SQL ?


Правильно не кешировать результат работы функции, а переписать её в inline и пусть движок разбирается. Добавить индексы по вкусу.
9 окт 14, 02:36    [16679686]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
yar229
Guest
gandjustas,

в большинстве кейсов да
но если там реально тяжелое вычисление? или, скажем, обращение, к очень далекому/медленному Linked Server?

Не, как бы понятно, что если изменить подход к решению задачи, все это можно реализовать стандартными средствами.
Но если оставаться в озвученном автором контексте - то CLR
9 окт 14, 03:29    [16679700]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35386
Блог
Попробовать In-memory таблицу?
9 окт 14, 06:47    [16679757]     Ответить | Цитировать Сообщить модератору
 Re: Рукодельное кеширование  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
yar229,

Посмотри план при обращении к такому серверу. Увидишь там eager spool - это то самое кеширование.
10 окт 14, 02:31    [16684841]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить