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

Откуда:
Сообщений: 7
Добрый день! Проблема заключается в следующем: на сервере (MS SQL 2000) существует таблица на несколько сотен гигабайт причем большая часть данных является "исторической", т.е. обращение к этим данных производиться при построении годовых отчетов или при аудиторских проверках. Операции по данной таблице, даже при наличии подходящих индексов, выполняются длительное время. Есть идея разделить таблицу на две - исторические и оперативные данные. При этом периодически будут выполняться действия по перебросу данных из одной таблицы в другую. В ходе реализации данной идеи возник спор о правильности данных модификаций с точки зрения нормализации и администрирования (прироста производительности данный метод может не дать). Интересует ваше мнение по данной проблеме?
11 окт 11, 11:24    [11418140]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Сделайте в таблице "исторический" кластерный индекс. И не парьте мозг серверу.
11 окт 11, 11:30    [11418192]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
абырвалк
Guest
aleks2
Сделайте в таблице "исторический" кластерный индекс. И не парьте мозг серверу.
Ещё поищите про распределённые представления.
11 окт 11, 13:28    [11419568]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Sokolov Ilja
Member

Откуда:
Сообщений: 7
В настоящее время рассматриваем как альтернативу механизм секционирования, однако из-за применения 2000 MS SQL это может оказаться не так просто.
11 окт 11, 13:35    [11419628]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
абырвалк
Guest
Sokolov Ilja
В настоящее время рассматриваем как альтернативу механизм секционирования, однако из-за применения 2000 MS SQL это может оказаться не так просто.
А какой именно механизм секционирования вы рассматриваете на 2000-м скуле?
11 окт 11, 13:37    [11419647]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
iljy
Member

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

на 2000 доступен только один механизм - секционированные представления. Он достаточно эффективен, но не факт, что реально вам нужен.
11 окт 11, 13:49    [11419728]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Sokolov Ilja
Member

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

на 2000 доступен только один механизм - секционированные представления. Он достаточно эффективен, но не факт, что реально вам нужен.


На самом деле в сторону секционирования начал смотреть только сегодня и полного представления о секционировании на MS SQL 2000 у меня пока нет. Только в общих чертах. В архивах данного ресурса (sql.ru) нашел статью, которую и буду изучать.
11 окт 11, 13:55    [11419769]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Sokolov Ilja
Member

Откуда:
Сообщений: 7
aleks2
Сделайте в таблице "исторический" кластерный индекс. И не парьте мозг серверу.

На таблице настроен кластерный индекс
11 окт 11, 22:53    [11423738]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
В ms sql 2000 есть FILEGROUP, можно им воспользоваться для повышения производительности.
Таблица в базе, наверняка, не одна.
11 окт 11, 23:27    [11423862]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Sokolov Ilja
aleks2
Сделайте в таблице "исторический" кластерный индекс. И не парьте мозг серверу.

На таблице настроен кластерный индекс


Шо вы говорите?!!! Аднако, простая логика говорит обратное: если ваш индекс(ы) не ускоряет запросов => никакое разделение таблицы НЕ УСКОРИТ ЗАПРОСОВ. Ибо секционирование отнюдь не пилюля от всех болезней.

От всех болезней нам полезней... медитация.

ЗЫ. Приведите определение таблицы и индексов и пример типичных запросов, которые вы рассчитываете "ускорить" секционированием.
12 окт 11, 06:33    [11424277]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
iljy
Member

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

секционирование таки ускоряет. И для таблицы из сотен гиг выделение оперативной части данных в отдельную таблицу/секцию может прилично ускорить работу.
12 окт 11, 10:15    [11424686]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
iljy
aleks2,

секционирование таки ускоряет. И для таблицы из сотен гиг выделение оперативной части данных в отдельную таблицу/секцию может прилично ускорить работу.


1. Таки веровать в непорочное зачатие никому не запретишь.
2. А для скептиков следует пояснить: с какого бодуна сие ускорение приключится?
3. Уточним: для SELECT.
12 окт 11, 10:28    [11424770]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
1. Таки веровать в непорочное зачатие никому не запретишь.
2. А для скептиков следует пояснить: с какого бодуна сие ускорение приключится?
3. Уточним: для SELECT.

С того, что в запросе фактически будет участвовать только одна таблиц
Разумеется при соблюдении условий
12 окт 11, 10:40    [11424839]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
iljy
Member

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

у тебя что, кеши сбрасываются периодически?
7833456
12 окт 11, 10:51    [11424913]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Glory
aleks2
1. Таки веровать в непорочное зачатие никому не запретишь.
2. А для скептиков следует пояснить: с какого бодуна сие ускорение приключится?
3. Уточним: для SELECT.

С того, что в запросе фактически будет участвовать только одна таблиц
Разумеется при соблюдении условий


Железобетонный аргумент. Хе-хе.
Тока в случае всего одной таблицы - она тоже одна.

И если вы способны вынести нечто в отдельную таблицу => вы способны правильным кластерным индексом задвинуть "это нечто" в начало вашей большой таблицы.
Если вы работаете только с "этим нечто", то для SELECT неважно каков размер остальной части таблицы
12 окт 11, 11:22    [11425225]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
Железобетонный аргумент. Хе-хе.
Тока в случае всего одной таблицы - она тоже одна.

Только размер разный
И таблицы и индекса
Прочитать 100Гб и 50Гб все таки есть разница
Чтобы вы не говорили
12 окт 11, 11:28    [11425280]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Glory
aleks2
Железобетонный аргумент. Хе-хе.
Тока в случае всего одной таблицы - она тоже одна.

Только размер разный
И таблицы и индекса
Прочитать 100Гб и 50Гб все таки есть разница
Чтобы вы не говорили


А зачем оно будет читать все? Если запросы обращаются только к части?

Вопче, легенда о Partitioned Table, как средстве ускорить SELECT - она даже не Микрософтом придумана.
http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx

Тыкните мне пальцем, хде Микрософт хоть намекает на эту легенду.
12 окт 11, 11:37    [11425356]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
А зачем оно будет читать все? Если запросы обращаются только к части?

Мда. А как можно не читать все из одной таблицы ? Каким то чудесным образом начать с половины ?

aleks2
Тыкните мне пальцем, хде Микрософт хоть намекает на эту легенду.

И насчет дежа-вю iljy уже вам дал ссылку на ваше предыдущее подобное обсуждение

Сообщение было отредактировано: 12 окт 11, 11:39
12 окт 11, 11:39    [11425371]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Glory
aleks2
А зачем оно будет читать все? Если запросы обращаются только к части?

Мда. А как можно не читать все из одной таблицы ? Каким то чудесным образом начать с половины ?

aleks2
Тыкните мне пальцем, хде Микрософт хоть намекает на эту легенду.

И насчет дежа-вю iljy уже вам дал ссылку на ваше предыдущее подобное обсуждение


А какие проблемы начать с середины? ООН отменила произвольный доступ к файлу? Проход по сбалансированному двоичному дереву индекса полной таблицы и разделенной таблицы будет отличаться на чтение 1 (одной) страницы индекса.

Насчет дежа-вю, дык там вроде, я ничо иного не говорил. А миф о Partitioned Table как раз активно пропагандировал упомянутый iljy или это заслатый казачок от Microsoft?
12 окт 11, 11:49    [11425469]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
А какие проблемы начать с середины?

Покажите скрипт, как начать с середины. Раз у вас нет никаких проблем с этим

aleks2
Насчет дежа-вю, дык там вроде, я ничо иного не говорил.

Вы там тоже утверждали, что разделение данных на таблицы ничего не меняет
12 окт 11, 11:51    [11425495]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Glory
aleks2
Насчет дежа-вю, дык там вроде, я ничо иного не говорил.

Вы там тоже утверждали, что разделение данных на таблицы ничего не меняет

Несомненно, я последовательный противник мифа "Partitioned Table ускоряет select.

Glory
aleks2
А какие проблемы начать с середины?

Покажите скрипт, как начать с середины. Раз у вас нет никаких проблем с этим


declare @t table(dt datetime primary key clustered)

select * FROM @t WHERE dt between (select min(dt)+max(dt)-1 FROM @t) AND (select min(dt)+max(dt)+1 FROM @t)
12 окт 11, 12:01    [11425601]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Слегка поспешил

select * FROM @t WHERE dt between (select (min(dt)+max(dt))/2-1 FROM @t) AND (select (min(dt)+max(dt))/2+1 FROM @t)
12 окт 11, 12:04    [11425621]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
Несомненно, я последовательный противник мифа "Partitioned Table ускоряет select.

Это видно. Только вот ничем не опровергаете миф, кроме своих слов

declare @t table(dt datetime primary key clustered)
select * FROM @t WHERE dt between (select min(dt)+max(dt)-1 FROM @t) AND (select min(dt)+max(dt)+1 FROM @t)
И где я увижу, что с диска была прочитана ровно половина индекса/таблицы ?
12 окт 11, 12:04    [11425625]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
aleks2
Guest
Glory
aleks2
Несомненно, я последовательный противник мифа "Partitioned Table ускоряет select.

Это видно. Только вот ничем не опровергаете миф, кроме своих слов

declare @t table(dt datetime primary key clustered)
select * FROM @t WHERE dt between (select min(dt)+max(dt)-1 FROM @t) AND (select min(dt)+max(dt)+1 FROM @t)
И где я увижу, что с диска была прочитана ровно половина индекса/таблицы ?


1. Я вам привел ссылочку на текст Microsoft про Partitioned Table. Удосужтесь его почитать и вы не обнаружите там НИКАКИХ намеков на ускорение SELECT для Partitioned Table. Вполне достаточный аргумент. Ибо сложно себе представить, что маркетологи Microsoft не указали бы на столь важное достижение многократно. А они только про manageability и flexibility талдычут.

2. В приведенном запросе будет прочитано гораздо меньше половины страниц.
12 окт 11, 12:24    [11425783]     Ответить | Цитировать Сообщить модератору
 Re: Увеличение производительности SQL Server путем переноса данных из одной таблицы в другую.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
1. Я вам привел ссылочку на текст Microsoft про Partitioned Table. Удосужтесь его почитать и вы не обнаружите там НИКАКИХ намеков н

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

aleks2
2. В приведенном запросе будет прочитано гораздо меньше половины страниц.

А Cluster index scan, который я вижу в плане, тоже знает, что ему нужно "прочитать гораздо меньше половины страниц" ?
А это -
Table '#04DA9AE4'. Scan count 2, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0 ?
12 окт 11, 12:29    [11425808]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить