WedX - журнал о программировании и компьютерных науках

Вставка во временную таблицу занимает много времени

У меня есть следующий запрос:

if object_id('tempdb..#tAJ88') is not null
drop table #tAJ88



create table #tAJ88 (
       conv_raw_AJ88_ECO_key             int,
       case_id                                         numeric(14,0),
       account_key                              int,
       account_period_key                int,
       aj_number                                varchar(25),
       county_code                              varchar(25)
)




insert into #tAJ88(conv_raw_AJ88_ECO_key,account_key,account_period_key,aj_number,county_code)
select ac.conv_raw_AJ88_ECO_key,a.account_key, ap.account_period_key, ac.aj_number, ac.county_code
from [Conv].[dbo].[conv_raw_AJ88_ECO] ac
inner join [IT].[dbo].[entity_identifier] ei on ei.identifier_value = ac.account_number
                                                                                                       and ei.identifier_type_key = @MITS
inner join [IT].[dbo].[account_x_entity_id] axe on axe.entity_identifier_key = ei.entity_identifier_key
inner join [IT].[dbo].[account] a on a.account_key = axe.account_key
                                                                                         and a.account_type_key = (select account_type_key from [IT].[dbo].[r_account_type] where code = ac.tax_type)
inner join [IT].[dbo].[account_period] ap on ap.account_key = a.account_key 
                                                                                                            and cnsd.NEXT_STEP_NAME not in ('A','B')
where  (convert(datetime, substring(ac.periods,4,4) + '-' + substring(ac.periods,1,2) + '-01' ) >= ap.period_begin_dt and convert(datetime, substring(ac.periods,4,4) + '-' + substring(ac.periods,1,2) + '-01' ) <= ap.period_end_dt)
and len(rtrim(substring(ac.periods,4,4))) = 4 

Запрос вставляет данные из оператора select. Сам оператор select выполняется всего за 1 секунду, и в операторе select появляется только 1500 записей. Однако, когда я пытаюсь вставить во временную таблицу, мне требуется более 10 минут. Я никогда не видел эту проблему раньше. Является ли это технической проблемой, когда у нас недостаточно места на диске, или это связано с индексацией, которая не должна иметь значения.

10.08.2017

  • Может ли быть так, что запрос возвращает более 1500 результатов, но при его выполнении sql-клиентом добавляется ограничение? 10.08.2017
  • Посмотрите на планы выполнения запросов для двух запросов. Один для выбора сам по себе. А тот, что для вставки... выбери. 10.08.2017
  • Несколько недель назад Кендра Литтл из sqlworkbooks.com провела веб-трансляцию, посвященную проблеме в MSSQL, когда обновления временных таблиц, созданных в той же области в хранимой процедуре, приводят к доступу ввода-вывода к диску для каждой вставленной строки. Вы не сказали конкретно, но если вы запускаете это как хранимую процедуру, она описала исправление, в котором можно обернуть вставку в команду sp_executesql, чтобы изменить ее область действия и избежать этой огромной проблемы с замедлением. 10.08.2017
  • @RobertSievers звучит интересно. Есть ссылка? 11.08.2017
  • Что касается этого вопроса, я поддерживаю запрос о планах выполнения. 11.08.2017
  • @MartinSmith Это было достаточно недавно, и она еще не разместила это на сайте. 11.08.2017

Ответы:


1

Возможно ли, что у вас возникли разногласия в tempdb? Вы можете прочитать об этом здесь от Пола Рэндала: https://www.sqlskills.com/blogs/paul/the-accidental-dba-day-27-of-30-troubleshooting-tempdb-contention/

Вы пытались сделать эту вставку, но вместо этого создали настоящую таблицу и выполнили вставку? Это дало бы вам ключ к разгадке, была ли это tempdb или нет.

11.08.2017
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]