Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
Здравствуйте.
У меня почти теоретический вопрос, как реализовать следующее:
Предположим у нас есть некая таблица с достаточно большим количеством данных. Одно из полей - дата создания записи.
Большая часть пользователей работает с данными за последний месяц. Для ускорения работы можно сделать две таблицы, одна будет содержать данные за месяц, другая остальные данные (или даже просто все)
Затем при обработке запроса, если он содержит дату(ы), определять к какой таблице необходимо обратится и выполнять запрос.
К сожалению, мои познания в sql весьма незначительны, и потому хотелось бы получить оценку, реально ли вообще нечто подобное, а также услышать любые намеки в каком направлении копать.
Спасибо.
23 окт 09, 12:56    [7829199]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage,

триггеры на select в скуле отсутствуют. А копать - в сторону секционирования таблиц.
23 окт 09, 12:58    [7829218]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Влом регистрироваться
Guest
Grage,

trigger on select в MSSQL нету. Пользуйтесь секционированием.
23 окт 09, 12:59    [7829232]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage,

а, еще одно забыл - можно на основе двух тублиц создать view как их объединение через union all. Но секционирование лучше.
23 окт 09, 12:59    [7829233]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Grage,

секционирование таблицы
23 окт 09, 12:59    [7829235]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
Спасибо за быстрые и четкие ответы.
Возник такой акой еще вопрос: секционирование по датам можно настроить в MS SQL 2000?
23 окт 09, 13:24    [7829460]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage,

в 2000 нет секционирования. Используйте view.
23 окт 09, 13:28    [7829488]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
aleks2
Guest
Grage
Спасибо за быстрые и четкие ответы.
Возник такой акой еще вопрос: секционирование по датам можно настроить в MS SQL 2000?


Не парься. Кластерный индекс по дате - и все.
Секционирование - полная фигня в данном контексте.
23 окт 09, 13:29    [7829494]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
iljy,

Я правильно понимаю, что в случае использования view забросы будут выполнены в обоих базах в любом случае? Даст ли такой подход увеличение производительности?
23 окт 09, 13:35    [7829529]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
aleks2
Guest
Grage
iljy,

Я правильно понимаю, что в случае использования view забросы будут выполнены в обоих базах в любом случае? Даст ли такой подход увеличение производительности?


Такой подход даст увеличение геморроя.

Секционирование и Partitioned View - это когда количество записей в таблицах зашкаливает за десятки миллионов и идет активное пополнение данных внутри разделов.

Во всех прочих случаях - токмо геморрой.
23 окт 09, 13:42    [7829578]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Grage
iljy,

Я правильно понимаю, что в случае использования view забросы будут выполнены в обоих базах в любом случае? Даст ли такой подход увеличение производительности?
Бывают ещё секционированные представления.
https://www.sql.ru/articles/mssql/2005/073102PartitionedTablesAndIndexes.shtml
В общем, я бы не стал говорить про секционирование "полная фигня".
Хотя про кластерный индекс aleks2 правильно сказал.
23 окт 09, 13:46    [7829599]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
aleks2
Guest
iap
В общем, я бы не стал говорить про секционирование "полная фигня".


Оно полное фигня в ДАННОМ контексте.
23 окт 09, 13:48    [7829615]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage
iljy,

Я правильно понимаю, что в случае использования view забросы будут выполнены в обоих базах в любом случае? Даст ли такой подход увеличение производительности?


эээ.. про 2 базы вы ничего не говорили, речь шла о таблицах. В принципе на основе статистики оптимизатор скорее всего примет решение об использовании одной таблицы, если данных в друго не предвидется. А вообще - сначала правда подумайте: надо ли вам это. Если записей не очень много - хороший индекс даст вам все необходимое. Но в конце концов простой эксперимент ответит на все ваши вопросы.
23 окт 09, 13:59    [7829708]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
Тут вспомнился неприятный пунктик насчет того что дата хранится как строка.
Так что при любой попытке реализации назревает геморрой.

Правда есть шанс секционировать таблицу по полю которое принимает значения "true" и "false" (тоже строки, не boolean =( )

aleks2 , не могли бы Вы пояснить почему в данном случае не рационально использовать секционирование и секционирование представление? Это касается именно того что разбивка должна была быть по датам или есть какие-то другие причины?
23 окт 09, 14:03    [7829752]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
iljy
эээ.. про 2 базы вы ничего не говорили, речь шла о таблицах..


Ну я так просто понял что секционирование можно настроить и на две базы. То есть как бы база оперативная и база архивная.
23 окт 09, 14:07    [7829769]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage
iljy
эээ.. про 2 базы вы ничего не говорили, речь шла о таблицах..


Ну я так просто понял что секционирование можно настроить и на две базы. То есть как бы база оперативная и база архивная.


секционирование - нельзя, view - можно. Но вы так и не ответили - сколько у вас записей в таблице?
23 окт 09, 14:37    [7830035]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
В среднем по 2к записей каждый день добавляется. Уже примерно около года.
23 окт 09, 15:43    [7830684]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
Grage
В среднем по 2к записей каждый день добавляется. Уже примерно около года.


а сколько предельно планируете хранить? пока необходимости в танцах с бубном нет, а в перспективе - переходите на 2005 или 2008 и делайте секционирование.
23 окт 09, 15:53    [7830767]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
aleks2
Guest
Grage
В среднем по 2к записей каждый день добавляется. Уже примерно около года.

Если добавление идет в хвост или гриву кластерного индекса - от секционирования, один хрен, пользы не будет.

Надож слегка головой то думать: какая разница читать из первой таблицы или из второй? Ну а какие еще выгоды вы намереваетесь поиметь? Только не умозрительные, а с минимальным описанием за счет чего эта выгода будет достигнута.
23 окт 09, 16:04    [7830846]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
Данные актуальны примерно 3 месяца. Более старые тянутся только для всяких сложных отчетов.

В общем - да, видимо придется менять версию сервера.
Вообще я программист поэтому и охарактеризовал вопрос как чисто теоретический=)
Спасибо за советы, узнал много нового
23 окт 09, 16:05    [7830850]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
aleks2
Guest
iljy
Grage
В среднем по 2к записей каждый день добавляется. Уже примерно около года.


а сколько предельно планируете хранить? пока необходимости в танцах с бубном нет, а в перспективе - переходите на 2005 или 2008 и делайте секционирование.

Да хучь за мильен лет пусть хранят.
Ты объясни, убогому, в чем они поимеют выгоду от секционирования?
23 окт 09, 16:07    [7830874]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
iljy
Member

Откуда:
Сообщений: 8711
aleks2
iljy
Grage
В среднем по 2к записей каждый день добавляется. Уже примерно около года.


а сколько предельно планируете хранить? пока необходимости в танцах с бубном нет, а в перспективе - переходите на 2005 или 2008 и делайте секционирование.

Да хучь за мильен лет пусть хранят.
Ты объясни, убогому, в чем они поимеют выгоду от секционирования?

Да хучь в удалении окончательно ненужных данных. Отщипнул секцию в отдельную таблицу и дропнул, без шуму, без пыли. Ну и работа с одной секцией в 1 месяц может быть побыстрее, чем работа со всей таблицей за мильен лет, хотя бы за счет уменьшения уровней индекса. И кластеный или нет - значения не имеет. Ну а уж простор для оптимизации с выносом старых секций на более емкие, но медленные хранилища открывается аграмадный.
23 окт 09, 16:14    [7830932]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
Вопрос о секционировании ребром не встал=) Я к этому прицепился лишь по тому что мне показалась что это именно то что надо.
А надо вот что: ускорить выполнение запроса.
Данных много но в активном обращении нуждается некая часть которую можно выделить по определенному критерию (при этом если данные отработаны они более меняться не будут). Логично было бы выделить не меняющиеся данные как архивную таблицу/базу и иметь таблицу/базу актуальных объектов с которыми еще производится работа, и так как она будет сильно меньше полной. Соответственно многочисленные запросы к такой таблице/базе буду выполнятся существенно быстрее, что позволило бы несколько разгрузить сервер.
23 окт 09, 16:16    [7830954]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Grage
Member

Откуда:
Сообщений: 15
iljy
окончательно ненужных данных.


Я наверное забыл упомянуть, что ненужных данных нет. Некоторые пользователи могут строить отчеты по всем данным.
23 окт 09, 16:18    [7830980]     Ответить | Цитировать Сообщить модератору
 Re: Использование триггеров для обработки входящих запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
Grage
Логично было бы выделить не меняющиеся данные как архивную таблицу/базу и иметь таблицу/базу актуальных объектов с которыми еще производится работа, и так как она будет сильно меньше полной. Соответственно многочисленные запросы к такой таблице/базе буду выполнятся существенно быстрее, что позволило бы несколько разгрузить сервер.

Это надо понимать, что вы провели анализ узкого места запроса(ов) и установили, что это от количества записей в таблице ?
Или просто перебираете варианты ?
23 окт 09, 16:18    [7830981]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить