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

Откуда:
Сообщений: 129
Народ, всем привет!

Кто в теме подскажите плиз

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

1. грузить в отдельную табличку и далее union all с основной - так дольше выполняются запросы
2. если догружать, то сначал очень долго идет delete потом insert (полсе чего желатаельно еще и индексы обновить)

Таблиц много обновлнние регулярное, зпаисей примерно 1 млрд и обновляемых 100 млн

Индексы как правило по двум полям (кластерный и не кластерный) - стоит ли объединять в один состовной?

Есть ли тут какие-то еще решения позволяющие рационализировать процесс?

Заранее спасибо!
2 сен 17, 14:06    [20766725]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
Вы определитесь, что нужно - загружать или обновлять.
Dmitry.Dennisov
полсе чего желатаельно еще и индексы обновить

Это еще для чего?
Dmitry.Dennisov
Индексы как правило по двум полям (кластерный и не кластерный) - стоит ли объединять в один состовной?
Наверное стоит для начала почитать что такое индексы и как они работают.
2 сен 17, 14:30    [20766783]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33700
Блог
многопоточно загружать в отдельную таблицу, пустую и без индексов,
потом делать там нужные индексы и переключать таблицу как секцию в основную
2 сен 17, 14:34    [20766797]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

Откуда:
Сообщений: 129
Критик
многопоточно загружать в отдельную таблицу, пустую и без индексов,
потом делать там нужные индексы и переключать таблицу как секцию в основную


- про секционирование слышал, но ни разу не пробовал, там говорят быстрее и delet-ы делаются
А это получится на уровне скрипта сделать - так чтобы процесс автоматизирован был?
Кстати, про сеции - там не получится так, что по времени одно и тоже будет,
там вроде как планировщик же настраивается, которые данные в секции организует?
2 сен 17, 14:55    [20766848]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

Откуда:
Сообщений: 129
invm
Вы определитесь, что нужно - загружать или обновлять.
Dmitry.Dennisov
полсе чего желатаельно еще и индексы обновить

Это еще для чего?
Dmitry.Dennisov
Индексы как правило по двум полям (кластерный и не кластерный) - стоит ли объединять в один состовной?
Наверное стоит для начала почитать что такое индексы и как они работают.


"Наверное стоит для начала почитать что такое индексы и как они работают"
- тут опыт нужен, теоретических познаний маловато, тут вопрос выбора - либо select работать быстрее будет либо insert с
delete-ом)) Интересно в чью пользу проектируют индексы на больших таблицах


"
Dmitry.Dennisov
полсе чего желатаельно еще и индексы обновить
- Это еще для чего?" - вот вот см выше
штука в том, что когда табличку постояннео обновляешь не удаляя полностью начинает ухадшаться фрагментация индекса
поэтому его приходится пеерстраивать (не знаю только насколько это правило работает на SSD дисках)
2 сен 17, 15:01    [20766861]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
Dmitry.Dennisov
Интересно в чью пользу проектируют индексы на больших таблицах
Индексы всегда проектируют для ускорения чтения. При update и delete тоже есть чтение.
Dmitry.Dennisov
штука в том, что когда табличку постояннео обновляешь не удаляя полностью начинает ухадшаться фрагментация индекса
поэтому его приходится пеерстраивать
Т.е. из-за фрагметации индексов производительность падает настолько, что вы готовы каждый раз перестраивать индексы на миллиардных таблицах?

Путь вам уже подсказали - секционирование, если оно применимо в вашем случае. Плюс не нужно будет ничего перестраивать.
С планировщиком секционирование не связано никак.
2 сен 17, 15:11    [20766875]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
К примеру, у нас есть два процесса - один пишет в таблицу малыми порциями, но постоянно и второй пишет редко, но большими порциями. Каким требованиям должен отвечать столбец секционирования в этом случае, чтобы второй процесс не заставлял ожидать первый?
2 сен 17, 16:40    [20766944]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

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

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

Кстати на счет "При update и delete тоже есть чтение.", это то да, но при этом порлучается что надо смотреть не одну таблицу
(если несколько индексов) и проводить сортировку массиво и когда 1млрд записей происходит это не быстро
2 сен 17, 16:48    [20766955]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
Dmitry.Dennisov,

Для секционирования Вам потребуется минимум две секции изначально - для загруженных и для новых данных.
Новые данные грузите в чистую таблицу той же структуры и с тем же набором индексов, затем выполняете переключение секции. Переключение происходит очень быстро. Главное - правильно выбрать столбец секционирования. Таблицу изначально придется полностью переписать в новую, секционированную.
2 сен 17, 16:56    [20766963]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
PS переписать не потребуется, если ВСЕ старые данные определить как одну секцию. В этом случае можно просто переключить секции.
2 сен 17, 16:57    [20766967]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

Откуда:
Сообщений: 129
Владислав Колосов
К примеру, у нас есть два процесса - один пишет в таблицу малыми порциями, но постоянно и второй пишет редко, но большими порциями. Каким требованиям должен отвечать столбец секционирования в этом случае, чтобы второй процесс не заставлял ожидать первый?
- Владислав, мне сложно сказать ...секционированием ни разу не занимался )
2 сен 17, 17:03    [20766973]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

Откуда:
Сообщений: 129
Владислав Колосов
Dmitry.Dennisov,

Для секционирования Вам потребуется минимум две секции изначально - для загруженных и для новых данных.
Новые данные грузите в чистую таблицу той же структуры и с тем же набором индексов, затем выполняете переключение секции. Переключение происходит очень быстро. Главное - правильно выбрать столбец секционирования. Таблицу изначально придется полностью переписать в новую, секционированную.



На текущий момент у меня и есть две таблици она большая постоянная а другую обновляю truncate и insert потом union из двух таблиц....
"затем выполняете переключение секции" - это можно несложно скриптом сделать полсе заливки таблицы?
2 сен 17, 17:08    [20766978]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
Dmitry.Dennisov
Кстати на счет "При update и delete тоже есть чтение.", это то да, но при этом порлучается что надо смотреть не одну таблицу
(если несколько индексов) и проводить сортировку массиво и когда 1млрд записей происходит это не быстро
У вас весьма странное понимание работы индексов. Почитайте теорию.
2 сен 17, 17:15    [20766988]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
Dmitry.Dennisov
Владислав Колосов
К примеру, у нас есть два процесса - один пишет в таблицу малыми порциями, но постоянно и второй пишет редко, но большими порциями. Каким требованиям должен отвечать столбец секционирования в этом случае, чтобы второй процесс не заставлял ожидать первый?
- Владислав, мне сложно сказать ...секционированием ни разу не занимался )


Э-э, я этот вопрос задал сообществу :-) Потому у меня похожая проблема, но есть отличия - первый процесс.
2 сен 17, 17:50    [20767025]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Mr. X
Guest
Владислав Колосов,

В вашем случае можно посмотреть в сторону того, что бы процессы в один и тот же момент времени писали в разные секции.
3 сен 17, 01:13    [20767645]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
iii2
Member

Откуда:
Сообщений: 202
Секционирование - это только энтерпрайз.
У вас энтерпрайз редакция?

Ну, или нужно извращаться с "псевдосекционированием".
Т.е. наплодить кучу таблиц размером с секцию, и объединять их в с помощью union all, в стиле 2000го.

Таблицу целиком, как недавно выяснилось, тоже можно переключать с помощью switch.
3 сен 17, 07:05    [20767747]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
iii2
Member

Откуда:
Сообщений: 202
Кстати, можно завести в таблице отдельное поле 'удалено', по умолчанию =0, и вместо удаления проставлять там 1.
Общаться с этой таблицей через view, в котором отфильтрованы "удаленные" записи.
Можно даже триггер INSTEAD OF DELETE на этом представлении определить, чтобы не переписывать код.
А удалять записи - когда нибудь потом. В моменты простоя системы. Малыми порциями.
3 сен 17, 07:17    [20767751]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Mr. X
В вашем случае можно посмотреть в сторону того, что бы процессы в один и тот же момент времени писали в разные секции.
слияние непустых секций не всегда безпроблемно
iii2
Кстати, можно завести в таблице отдельное поле 'удалено', по умолчанию =0, и вместо удаления проставлять там 1.
апдейты на миллиардных таблицах (даже если делать частями) то ещё удовольствие
3 сен 17, 12:20    [20767964]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Mr. X
Guest
Дедушка,

Мой пост адресован Владислав Колосов, который про слияние секций ни одной буквы не написал. Тч смысл вашего комментария мне не понятен.

iii2,
"Секционирование - это только энтерпрайз." - начиная с 2016sp1 не только энтерпрайз.
3 сен 17, 13:13    [20768011]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
iii2
Member

Откуда:
Сообщений: 202
Mr. X
iii2,
"Секционирование - это только энтерпрайз." - начиная с 2016sp1 не только энтерпрайз.

Спасибо, лучшая новость на сегодня!
:-)
4 сен 17, 09:32    [20768920]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
iii2
Спасибо, лучшая новость на сегодня!
вы почитайте сначала про это (там есть ограничения)
4 сен 17, 12:01    [20769335]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Если уже быть точным, то бесконечное секционирование это только Интерпрайз, в стандарте есть возможность создать 3 секции.
4 сен 17, 15:11    [20770072]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
WarAnt
Если уже быть точным, то бесконечное секционирование это только Интерпрайз, в стандарте есть возможность создать 3 секции.
Это в каком таком энтерпрайзе "бесконечное" секционирование?

Про три секции -- выглядит чушью, можно ссылку?
4 сен 17, 15:36    [20770164]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Гавриленко Сергей Алексеевич
WarAnt
Если уже быть точным, то бесконечное секционирование это только Интерпрайз, в стандарте есть возможность создать 3 секции.
Это в каком таком энтерпрайзе "бесконечное" секционирование?

Про три секции -- выглядит чушью, можно ссылку?


да согласен глупость написал, спутал с SASS это там 3 секции.
4 сен 17, 17:09    [20770473]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка больших объемов данных  [new]
Dmitry.Dennisov
Member

Откуда:
Сообщений: 129
iii2
Секционирование - это только энтерпрайз.
У вас энтерпрайз редакция?

Ну, или нужно извращаться с "псевдосекционированием".
Т.е. наплодить кучу таблиц размером с секцию, и объединять их в с помощью union all, в стиле 2000го.

Таблицу целиком, как недавно выяснилось, тоже можно переключать с помощью switch.


Да я пока так и сделал, до секционирования так и не добрался...) у меня ETL процесс
Кстати, а при секционирование select быстрее отрабытывает, чем индекс к примеру по дате?
5 сен 17, 23:10    [20774129]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить