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

Откуда: Kiev
Сообщений: 6801
Andy_OLAP
Yasha123
пропущено...

обоснование-то этому на сей раз какое:
"я ратую за все недокументированное"
или же ранее прозвучавшее "в этой жизни надо попробовать все"?

В качестве обоснования сошлюсь на мнение Пола Ренделла. Я ему доверяю больше, чем разработчикам MSSQL сервера.

в качестве обоснования, балабол забыл упомянуть, что не документированые функции MS не обещает поддерживать или же оставлять в каком либо состояниии вне зависимости от версии
27 окт 17, 12:30    [20905928]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
В качестве обоснования сошлюсь на мнение Пола Ренделла. Я ему доверяю больше, чем разработчикам MSSQL сервера.

дарагуля,
разволновался так, что лапки задрожали, или может Randal не тот какой-то?
у всем нам известного 1 "л" в фамилии,
хотя не исключаю, что упомянутый тут Ренделл, не имеющий никакого отношения к MS,
имеет некое отношение к Dell
---
так мнение-то будет озвучено, или как?
27 окт 17, 12:33    [20905954]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
так мнение-то будет озвучено, или как?

Пол уже озвучил. Уже как 3 года назад.
Коллеги, давайте не отвлекаться на оффтоп, "балабол не знает про его 9 лет в разработке SQL сервера" - это неверная информация.
И неправильное использование термина "балабол".
Предлагаю вернуться к проблеме и помочь девушке с ее view.

"Желательно, чтобы я код могла в процедуру вставить, а то таких представлений у меня очень много, и делать на каждый ssis-пакет очень долго" - можно динамическим SQL перебирать нужные view, для них на сервере-источнике запускать bcp с выгрузкой в CSV, далее с использованием xp_cmdshell перебрасывать CSV на сервер-приемник и там динамическим SQL запускать bulk insert.
На мой взгляд - вполне работоспособная схема.
27 окт 17, 12:46    [20906032]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
цитируй давай, чего хотел, у Рэндала много чего написано,
но почему-то мне не встречалось "лепите все флаги подряд,
жизнь коротка, надо все успеть попробовать."
27 окт 17, 12:52    [20906088]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
Коллеги, давайте не отвлекаться на оффтоп

вот если бы еще этот оффтоп вываливал кто другой,
но ведь это наш ЭКСПЕРТ флудит, как не поддержать увлекательную беседу.
27 окт 17, 12:55    [20906115]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
цитируй давай, чего хотел, у Рэндала много чего написано,
но почему-то мне не встречалось "лепите все флаги подряд,
жизнь коротка, надо все успеть попробовать."

Ох, старость не радость - не Ренделл, глаза уже видят плохо, это конечно Пол Уайт, MVP из Новой Зеландии, вечно я их путаю. Ну для меня все MVP на одно лицо.
27 окт 17, 12:57    [20906139]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
не Ренделл, глаза уже видят плохо, это конечно Пол Уайт, MVP из Новой Зеландии, вечно я их путаю. Ну для меня все MVP на одно лицо.

я так понимаю, эксперт вот на эту статью намекает?
Performance Tuning the Whole Query Plan
а чего не процитировал-то, стесняемся облажаться
или с переводом проблемы?
ничего, щас все поправим.
краткий пересказ:
имеем вставку в кластерный, в плане натурально находим сорт.
эксперимента ради Paul White флагом 8795 отменяет сортировку,
получая в результате
Paul White
The Sort operator has gone, but the new query runs for over 50 seconds (compared with 30 seconds before).
There are a couple of reasons for this.
First, we lose any possibility of minimally-logged inserts because these require sorted data (DML Request Sort = true).
Second, a large number of "bad" page splits will occur during the insert.
In case that seems counter-intuitive, remember that although the ROW_NUMBER function numbers rows sequentially,
the effect of the modulo operator is to present a repeating sequence of numbers 1…1000 to the Clustered Index Insert.


самое интересное, что нигде не нахожу призыва к действию:
хотите затормозить вставку в кластерный -- включите 8795.
эксперт, какое у нас там мнение по этому поводу?
27 окт 17, 13:12    [20906255]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
эксперт, какое у нас там мнение по этому поводу?

Я не очень понимаю, почему Вы постоянно обращаетесь ко мне, когда я пытаюсь беседовать с автором темы.
+

Но я человек очень добрый и толерантный - поэтому выскажу для Вас отдельное экспертное мнение.
Продукты Microsoft являются не системой из чистого золота, а обычным ПО, вокруг которого иной раз неплохо попрыгать с бубном и попробовать разные опции. Если поможет - почему нет? Вы же не пишете дипломную работу "как правильно работать с trace flag и создать идеальную БД", а решаете проблемы заказчика за деньги заказчика. Заработало - неплохо, документировано - вообще замечательно. Можно вздохнуть и перейти к решению следующей проблемы заказчика.
А Вы так яростно отстаиваете мнение, что все должно быть как в документации MSSQL написано, что складывается ощущение, что Вы никогда описания к CU и SP для SQL не читали.
27 окт 17, 13:29    [20906353]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
Yasha123
эксперт, какое у нас там мнение по этому поводу?

Я не очень понимаю, почему Вы постоянно обращаетесь ко мне, когда я пытаюсь беседовать с автором темы.

я обращаюсь к тому, кто громогласно несет пургу на этом форуме.
если б вы еще в личном блоге фигню строчил, но нет,
эксперт полез на трибуну.
ну так огребай, что заслужил
27 окт 17, 13:34    [20906378]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
invm
Member

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

Прежде чем следовать советам некоторых советчиков, соберите статистику ожиданий долгоиграющей вставки, воспользовавшись sys.dm_exec_session_wait_stats.
Тогда можно будет хоть что-то обоснованно предполагать.

ЗЫ: Боюсь мой пост утонет в потоке словоизвержения Andy_OLAP...
27 окт 17, 13:37    [20906388]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
выскажу для Вас отдельное экспертное мнение.
Продукты Microsoft являются не системой из чистого золота, а обычным ПО,
вокруг которого иной раз неплохо попрыгать с бубном и попробовать разные опции. Если поможет - почему нет?

ну так и прыгай вокруг своего сервера,
а не заставляй ставить идиотские эксперименты тех, кто нуждается в помощи.
изволишь цитировать -- так приводи уже цитаты,
а не свое искажение написанного.
я ведь не поленюсь и напишу White-y коммент от имени Andy_OLAP
(почему бы не перенять экспертный опыт перевоплощения)
напишу, так в результате нельзя ли вывод озвучить в явном виде?
а то я тут всем советую этот флаг включить, а в меня помидоры кидают
27 окт 17, 13:39    [20906402]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Andy_OLAP
"Желательно, чтобы я код могла в процедуру вставить, а то таких представлений у меня очень много, и делать на каждый ssis-пакет очень долго" - можно динамическим SQL перебирать нужные view, для них на сервере-источнике запускать bcp с выгрузкой в CSV, далее с использованием xp_cmdshell перебрасывать CSV на сервер-приемник и там динамическим SQL запускать bulk insert.
На мой взгляд - вполне работоспособная схема.

Коллеги, а что скажете по поводу перехода с чтения с linked server на схему с CSV и переносом файлов в явном виде? Ведь проблема глубже, чем просто медленная вставка при чтении из одного view.
Одно общими усилиями поможем вытянуть, но ведь таких view у автора темы много, нужно как-то кардинально решать вопрос.
Прошу вас высказывать активнее свои экспертные мнения.
27 окт 17, 13:46    [20906458]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
Коллеги, а что скажете по поводу перехода с чтения с linked server на схему с CSV и переносом файлов в явном виде?

флэшку будем почтой DHL посылать или автостопом оно быстрее получится?
прошу экспертов голосовать
---
я вот вообще считаю, чем больше промежуточных звеньев на пути от одного сервера к другому,
тем оно лучше, причем это очевидно, даже не требуются цитаты Ренделла, чтобы это осознать
27 окт 17, 14:01    [20906562]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
но ведь таких view у автора темы много

я думаю, чем больше флэшек будем посылать, тем меньше будет стоить пересылка одной.
за опт же скидка.
даже экспертом не надо быть, чтобы понять сей очевидный факт.
посему, по данному пункту голосование не требуется
27 окт 17, 14:04    [20906576]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
Andy_OLAP
Коллеги, а что скажете по поводу перехода с чтения с linked server на схему с CSV и переносом файлов в явном виде?

флэшку будем почтой DHL посылать или автостопом оно быстрее получится?

Зачем использовать флешки? Если работает linked server - значит, сетевое соединение между 2 серверами устанавливается. Если не зарезано все файерволлом или файерволл можно настроить - то файлы CSV можно пересылать по FTP и SMB. Используя вызов xp_cmdshell в контексте server1.
27 окт 17, 14:23    [20906684]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Кусочек
Guest
Andy_OLAP
Yasha123
пропущено...

флэшку будем почтой DHL посылать или автостопом оно быстрее получится?

Зачем использовать флешки? Если работает linked server - значит, сетевое соединение между 2 серверами устанавливается. Если не зарезано все файерволлом или файерволл можно настроить - то файлы CSV можно пересылать по FTP и SMB. Используя вызов xp_cmdshell в контексте server1.


Извините, а зачем при живых серверах СУБД данные сначала куда-то в файл записывать, затем отправлять, затем считывать и в конце-концов убирать за собой (еще желательно тогда организовывать обратную связь со статусом успешности, повторы, логи, уведомления)?
27 окт 17, 15:27    [20907041]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Кусочек
Andy_OLAP
пропущено...

Зачем использовать флешки? Если работает linked server - значит, сетевое соединение между 2 серверами устанавливается. Если не зарезано все файерволлом или файерволл можно настроить - то файлы CSV можно пересылать по FTP и SMB. Используя вызов xp_cmdshell в контексте server1.


Извините, а зачем при живых серверах СУБД данные сначала куда-то в файл записывать, затем отправлять, затем считывать и в конце-концов убирать за собой (еще желательно тогда организовывать обратную связь со статусом успешности, повторы, логи, уведомления)?

Хотя бы потому, что оптимальный диапазон чтения с сервера-источника может быть один, а оптимальный диапазон по загрузке в сервер-приемник пересланных данных другой. Плюс к этому из CSV можно организовать отдельное файловое хранилище, содержимое его не хранить внутри БД в сыром виде (исходном), а уже в переработанном и перегружать из готовых CSV заново при необходимости. Кроме того - предположим, нужно заново посмотреть что-то в исходных цифрах - а в базе сервера-источника старые цифры уже стерли за ненадобностью. А тут лежит отдельно CSV, которую можно еще раз прогнать в сервере-приемнике по всем этапам и посмотреть. В общем, плюсов сильно больше, чем минусов.
27 окт 17, 15:37    [20907080]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Кусочек
Guest
Andy_OLAP
Кусочек
пропущено...


Извините, а зачем при живых серверах СУБД данные сначала куда-то в файл записывать, затем отправлять, затем считывать и в конце-концов убирать за собой (еще желательно тогда организовывать обратную связь со статусом успешности, повторы, логи, уведомления)?

Хотя бы потому, что оптимальный диапазон чтения с сервера-источника может быть один, а оптимальный диапазон по загрузке в сервер-приемник пересланных данных другой. Плюс к этому из CSV можно организовать отдельное файловое хранилище, содержимое его не хранить внутри БД в сыром виде (исходном), а уже в переработанном и перегружать из готовых CSV заново при необходимости. Кроме того - предположим, нужно заново посмотреть что-то в исходных цифрах - а в базе сервера-источника старые цифры уже стерли за ненадобностью. А тут лежит отдельно CSV, которую можно еще раз прогнать в сервере-приемнике по всем этапам и посмотреть. В общем, плюсов сильно больше, чем минусов.


Если бы мне поставили Ваш вариант задачи, я бы сделал 2 вспомогательные таблицы - <<сессия>> и <<сырые данные сессии>>. Я бы не переживала, что через три года диск уйдет в последний путь и я потеряю все CSV файлы + если бизнес через 5 лет скажет - Кусочек, три - четыре года назад передавали важные данные о Васе изволь их показать,- легко, фильтр по дате сессий + запрос по Васе.

В Вашем варианте ИМХО данные будут надежно похоронены в куче CSV файлов.

Возможно, я ошибаюсь и вижу минусы там где очевидные плюсы?
27 окт 17, 16:00    [20907193]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Кусочек,

не обращайте внимания на этого балабола.

FK на приёмнике есть?
27 окт 17, 16:02    [20907202]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Кусочек
Извините, а зачем при живых серверах СУБД данные сначала куда-то в файл записывать,
затем отправлять, затем считывать и в конце-концов убирать за собой (еще желательно тогда организовывать обратную связь со статусом успешности, повторы, логи, уведомления)?

элементарно, Ватсон:
Yasha123
чем больше промежуточных звеньев на пути от одного сервера к другому,
тем оно лучше
, причем это очевидно, даже не требуются цитаты Ренделла, чтобы это осознать

перестраивайте уже свои мозги на экспертный лад:
главное -- писать как можно больше ерунды
и непременно ее обосновывать
27 окт 17, 16:12    [20907249]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
потонула здравая мысль в этом сраче.
ее бы размножить в 10 экземлярах,
чтобы хоть один пережил всемирный потоп экспертских мыслей,
но увы, идея со вчерашнего дня не катит.
попробуем просто пожирнее выделить
invm
iii2,

Прежде чем следовать советам некоторых советчиков,
соберите статистику ожиданий долгоиграющей вставки,
воспользовавшись sys.dm_exec_session_wait_stats.

Тогда можно будет хоть что-то обоснованно предполагать.

ЗЫ: Боюсь мой пост утонет в потоке словоизвержения Andy_OLAP...
27 окт 17, 16:17    [20907271]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Кусочек
Andy_OLAP
пропущено...

Хотя бы потому, что оптимальный диапазон чтения с сервера-источника может быть один, а оптимальный диапазон по загрузке в сервер-приемник пересланных данных другой. Плюс к этому из CSV можно организовать отдельное файловое хранилище, содержимое его не хранить внутри БД в сыром виде (исходном), а уже в переработанном и перегружать из готовых CSV заново при необходимости. Кроме того - предположим, нужно заново посмотреть что-то в исходных цифрах - а в базе сервера-источника старые цифры уже стерли за ненадобностью. А тут лежит отдельно CSV, которую можно еще раз прогнать в сервере-приемнике по всем этапам и посмотреть. В общем, плюсов сильно больше, чем минусов.


Если бы мне поставили Ваш вариант задачи, я бы сделал 2 вспомогательные таблицы - <<сессия>> и <<сырые данные сессии>>. Я бы не переживала, что через три года диск уйдет в последний путь и я потеряю все CSV файлы + если бизнес через 5 лет скажет - Кусочек, три - четыре года назад передавали важные данные о Васе изволь их показать,- легко, фильтр по дате сессий + запрос по Васе.

В Вашем варианте ИМХО данные будут надежно похоронены в куче CSV файлов.

Возможно, я ошибаюсь и вижу минусы там где очевидные плюсы?

Да, Вы видите минусы там, где есть плюсы.
Как эксперт в области построения DWH - могу заверить, что ситуация "я потеряю все CSV файлы" равна ситуации "я потеряю БД и ее бэкапы". Это не технический вопрос, это вопрос ответственности.
Строки из view сервера-источника - это сырые данные, это еще не информация, это возможный мусор.
Его не обязательно и даже вредно хранить в БД, раздувая ее.
Если завтра бизнес сообразит, что внутри view содержалась логическая ошибка - CSV можно будет или выкинуть на помойку и сформировать набор новых, или положить рядом новые и их загрузить один за другим, обработать, обогатив недостающей информацией, которая есть только в базе сервера-приемника, и сохранить в нужном виде.
Если же Вы полученные из view строки сложили в таблицы - они будут каждый раз ложиться в полный бэкап БД, БД будет распухать в объеме.
Кроме того, разнос по времени позволяет делать такие выборки и вставки в те моменты, когда БД на разных серверах относительно мало загружены.
"важные данные о Васе изволь их показать,- легко, фильтр по дате сессий + запрос по Васе" - Вася, который в БД сервера-источника, это 3 разных записи по Васе, Вася, который в БД сервера-приемника, это может быть один-единственный Вася.
Зачем искать по строкам, где исходные "Васи", когда можно найти по агрегированным строкам, где правильный "Вася".
Вот поэтому я всецело за то, чтобы переданные данные компоновать в файлы, сжимать в архивы с паролем и складывать в укромное место.
27 окт 17, 17:30    [20907521]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Картинка с другого сайта.
27 окт 17, 17:42    [20907559]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123,

Картинка Вами выложенная понравилась таки мне. Благодарность особую Вам выразить хочу я.
27 окт 17, 17:48    [20907570]     Ответить | Цитировать Сообщить модератору
 Re: Как можно быстро вставить данные из представления на одном сервере в таблицу на другом?  [new]
iii2
Member

Откуда:
Сообщений: 202
Эх, вот я попала!
Сеть, как сказали, админы - не причем. Между серверами 10Гбит оптика.
От имени sa сервер подключен по временной схеме, т.к. админы не смогли настроить правильно, и сказали ждать П.С.
Про статистику ожиданий прочла поздно, поэтому не смогла сделать.
Через импорт-экспорт вставляется быстрее, около 20 минут. Так что, наверное, нужно делать через ssis.
Полдня провела, решая проблемы как создать пакет, как создать пакет с параметрами (вьюха, таблица приемник), как сохранить его на сервере, как запустить его из процедуры на sql, с параметрами, и как залогировать его действия. Пока уверенно делаю только п.1. Перспектива написать больше сорока однотипных пакетов меня пугает.
Так как сейчас есть - работает, но хранилище не успевает собраться за ночь.
В таблице приемнике нет внешних ключей и констрейнтов и индексов.
Точнее, они есть, но они все отключаются перед вставкой. А потом после вставки - включаются и пересчитывается статистика.
Это не самостоятельная таблица, а секция, которая потом делает свитч в хранилище.
И вьюхи сделаны по числу секций, из разных баз, но не только, потому что там еще другие таблицы собираются, не закрытые остатки прошлого дня, например и всякое такое. Но они меня не волнуют, они маленькие, максимум 200000 записей, и делаются 5 минут. Хотя они тоже в несколько раз замедлились.

И еще я надеюсь, что у П.С. проснется совесть в его грёбаном Вьетнаме, потому что наверняка он этот форум читает.
И то, что он там кого то как хотел вертел - не ко мне относится!!!
27 окт 17, 21:11    [20907945]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить