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

Откуда:
Сообщений: 660
Привет
есть довольно слабый сервер с большими базами
базы больше 100 гигов
базы только для чтения
на сервере работает один человек
есть запрос который делает выборку из нескольких баз
запрос выполняется 1-2 минуты
в запросе отдается 2-3 миллиона строк
чаще всего один и тот же запрос используется 5-10 раз в течении дня
вопрос - можно ли как то автоматически записывать результаты выдачи последних 10- 20 запросов и писать их в темп базу
и если запрос приходит повторно то отдавать то что было записано.
памяти на машине 16 гигов всего и видимо запросы не помещаются в памяти
а то ждать каждый раз 1-2 минуты до начала выдачи долго - а на каждый запрос заводить индекс неразумно - базы большие и индексы тоже большие получаются
6 янв 16, 16:08    [18647313]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
Alexander_fx,

эта магия будет работать, только если вы ее сами сделаете.
6 янв 16, 16:33    [18647356]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Alexander_fx,
автор
базы больше 100 гигов

Это маленькие базы.
автор
в запросе отдается 2-3 миллиона строк

И что\кто потом с ними что делает?
автор
чаще всего один и тот же запрос используется 5-10 раз в течении дня

Данные при этом возвращаются те же самые? Точнее, данные в исходных таблицах не меняются между запросами?
автор
вопрос - можно ли как то автоматически записывать результаты выдачи последних 10- 20 запросов и писать их в темп базу
и если запрос приходит повторно то отдавать то что было записано.

10-20 последних относительно чего? Пользователя\времени запуска\запроса?
автор
памяти на машине 16 гигов всего и видимо запросы не помещаются в памяти

Машина - это сервер? Запросы не помещаются в памяти - это такое сообщение об ошибке Вы получаете?

Сообщение было отредактировано: 6 янв 16, 17:11
6 янв 16, 17:09    [18647409]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Alexander_fx
Привет
есть довольно слабый сервер с большими базами
базы больше 100 гигов
базы только для чтения
на сервере работает один человек
есть запрос который делает выборку из нескольких баз
запрос выполняется 1-2 минуты
в запросе отдается 2-3 миллиона строк
чаще всего один и тот же запрос используется 5-10 раз в течении дня
вопрос - можно ли как то автоматически записывать результаты выдачи последних 10- 20 запросов и писать их в темп базу
и если запрос приходит повторно то отдавать то что было записано.
памяти на машине 16 гигов всего и видимо запросы не помещаются в памяти
а то ждать каждый раз 1-2 минуты до начала выдачи долго - а на каждый запрос заводить индекс неразумно - базы большие и индексы тоже большие получаются


Есть такое слово OLAP. Если вы его реализуете, то получите то, что хотите.

В Olap кубах рассчитываются значения и есть механизм кеширования. Есть партиции.
6 янв 16, 17:57    [18647489]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
pkarklin
Alexander_fx,
автор
базы больше 100 гигов

Это маленькие базы.

--- может и так но памяти еще меньше

автор
в запросе отдается 2-3 миллиона строк

И что\кто потом с ними что делает?

--- софт обрабатывает данные по сложному алгоритму - данные в БД это сырой поток биржевой информации

автор
чаще всего один и тот же запрос используется 5-10 раз в течении дня

Данные при этом возвращаются те же самые? Точнее, данные в исходных таблицах не меняются между запросами?
--- да данные в БД статичные - это исторические данные биржевых котировок

автор
вопрос - можно ли как то автоматически записывать результаты выдачи последних 10- 20 запросов и писать их в темп базу
и если запрос приходит повторно то отдавать то что было записано.

10-20 последних относительно чего? Пользователя\времени запуска\запроса?
--- да не принципиально - как вариант времени запроса

автор
памяти на машине 16 гигов всего и видимо запросы не помещаются в памяти

Машина - это сервер? Запросы не помещаются в памяти - это такое сообщение об ошибке Вы получаете?


--- да это выделенный сервер под хранение информации - ошибок нет
6 янв 16, 18:09    [18647529]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
автор
чаще всего один и тот же запрос используется 5-10 раз в течении дня


А зачем делать один и тот же запрос 10 раз, если он одно и тоже возвращает? Сделайте один раз, заполните результатом таблицу-снапшот, а потом уже к ней обращайтесь.
6 янв 16, 18:21    [18647552]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Alexander_fx,

Выгрузка данных в промежуточное хранилище по расписанию.
6 янв 16, 18:25    [18647563]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Alexander_fx
на сервере работает один человек
в запросе отдается 2-3 миллиона строк
чаще всего один и тот же запрос используется 5-10 раз в течении дня
Да у вас там гений какой то сидит, который может в мозгу запроцессить 2-3 миллиона строк. Но вот почему то склерозом страдает, что приходится по 10 раз на дню одно и тоже делать.
6 янв 16, 20:26    [18647777]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
Alexander_fx
Member

Откуда:
Сообщений: 660
3unknown
автор
чаще всего один и тот же запрос используется 5-10 раз в течении дня


А зачем делать один и тот же запрос 10 раз, если он одно и тоже возвращает? Сделайте один раз, заполните результатом таблицу-снапшот, а потом уже к ней обращайтесь.


собственно вопрос в том есть ли готовые решения - как сделать самостоятельно в общих чертах понятно.
Столько раз уже изобретал велосипеды и как правило они хуже готовых решений.
6 янв 16, 22:20    [18648178]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли кешировать результаты выдачи на сервере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
Alexander_fx
собственно вопрос в том есть ли готовые решения - как сделать самостоятельно в общих чертах понятно.
Столько раз уже изобретал велосипеды и как правило они хуже готовых решений.
Это не может быть сделано автоматически, поэтому придётся "изобретать велосипед".

Это вы думаете, что "сервер выполняет 10 запросов в день", а в реальности запросов он выполняет наверняка больше (это легко проверить, запустив трейс с событием "выполнение запроса" в разделе "процедуры").
Задача в общем случае настолько абсурдна, что это в сервере не предусмотрено, в отличие от кеширования данных.

А вот "в частности", для конкретного бизнес-процесса, такое "кеширование результата" очень даже разумно, и широко применяется.
7 янв 16, 02:21    [18648710]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить