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

Откуда: Москва
Сообщений: 47001
ART-CODE
Возможно, COLUMNS_UPDATED есть
То же самое.
Смысл имеет лишь сравнение соответствующих записей deleted и inserted.
Если записей более одной, то это возможно только при наличии полей,
однозначно связывающих deleted и inserted и неизменившихся в результате данного UPDATE.
21 окт 14, 15:01    [16737263]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
АцкийСкотона,

триггер такой:
create trigger tr1t on temp.cust for update
as
select getutcdate() dd,* into #inserted from inserted 


Таблица:
int no 4
varchar no 200
int no 4
int no 4
varchar no 80
varchar no 80
varchar no 12
varchar no 12
varchar no 250
varchar no 60
varchar no 60
varchar no 60
varchar no 50
varchar no 15
date no 3
varchar no 120
date no 3
varchar no 120
varchar no 20
varchar no 20
varchar no 60
varchar no 60
varchar no 60
varchar no 15
varchar no 120
smallint no 2
tinyint no 1


подозреваю, что производительности Вашей tempdb маловато для таких операций.
21 окт 14, 15:10    [16737375]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
SomewhereSomehow, На сервере ничего не происходит. По крайней мере в момент моей активности.

Смотрел посредством скрипта.

SELECT
s.login_name, r.status, d.name as DB_Name, /*o.schema_id*/sch.name, o.name AS ObjName,
substring(qt.text,(r.statement_start_offset/2) +1,
(CASE WHEN r.statement_end_offset = -1 THEN len(CONVERT(nvarchar(MAX), qt.text)) * 2 ELSE r.statement_end_offset END -r.statement_start_offset)/2)
AS stmt_executing,
r.session_id, r.blocking_session_id, r.wait_type, r.wait_time, r.wait_resource, r.row_count,
r.reads AS P_reads, r.logical_reads as L_Reads, r.writes, r.total_elapsed_time, r.estimated_completion_time, r.percent_complete
-- MISC
, d.database_id
FROM sys.dm_exec_requests r
INNER JOIN sys.dm_exec_sessions s
ON r.session_id = s.session_id
INNER JOIN sys.databases d
on r.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS qt
LEFT JOIN sys.objects o
ON /*d.database_id = o.
AND*/ qt.objectid = o.object_id
INNER JOIN sys.schemas sch
ON o.schema_id = sch.schema_id

WHERE r.session_id <> @@SPID
AND ISNULL(r.wait_type, '') <> 'TRACEWRITE'
ORDER BY
d.name ASC, s.session_id ASC, r.wait_resource DESC


Я не знаю как у вас отрабатывает быстрее. А сколько конкретно первый и второй стейтмент по времени идут?
21 окт 14, 15:19    [16737480]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
Владислав Колосов,
Ну у меня полей поболее. Сколько ваш запрос занимает? Сделайте еще селект инто с физической таблицки на которой триггре висит. У вас есть такая же разительная разница как у меня?
Кста, основныей файлы БД и темпдб на одном диске?
21 окт 14, 15:25    [16737533]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
АцкийСкотона, у нас хранилище, а не диск. Добавил вставку - еще 1-2 секунды прибавилось.
21 окт 14, 15:47    [16737741]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
Владислав Колосов
АцкийСкотона, у нас хранилище, а не диск. Добавил вставку - еще 1-2 секунды прибавилось.


а можете во так у себя попробовать?
select getutcdate()
select * into #inserted from inserted
select getutcdate()
select * into #inserted2 from temp.cust
select getutcdate()

Какие результаты в секундах у первого и второго?
21 окт 14, 15:54    [16737800]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
АцкийСкотона,

Быстрее только в первый раз, в дальнейшем ситуация как у вас не воспроизвелась. У вас же, как я понял, ситуация воспроизводится стабильно. Ок, вы не видите активности на сервере, но посмотрите при помощи расширенного события, чего ждет запрос?
Планы что-нибудь показывают? Например, при сканировании обычной таблицы параллельный скан , при сканировании inserted нет.
Картинка с другого сайта.
Но у меня такая разница как у вас не воспроизводится, впрочем я ничего не знаю ни о ваших данных, ни об условиях, ни о способе измерения. Как я уже говорил, либо репро, либо какая-то конкретика, чего так долго ждет запрос. А то получается, что у вас медленно, воспроизвести в простом случае это нельзя, а больше никаких данных вы не даете. Гадать можно долго, хотя, может рано или поздно кто-то угадает, но я это делать не берусь.
21 окт 14, 15:58    [16737828]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
АцкийСкотона
Владислав Колосов
АцкийСкотона, у нас хранилище, а не диск. Добавил вставку - еще 1-2 секунды прибавилось.


а можете во так у себя попробовать?
select getutcdate()
select * into #inserted from inserted
select getutcdate()
select * into #inserted2 from temp.cust
select getutcdate()

Какие результаты в секундах у первого и второго?


Просто во временную таблицу - секунда, из inserted - около 5 секунд.
21 окт 14, 16:04    [16737898]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
SomewhereSomehow, Ну у меня такие же планы ка у вас. Один в один наверно даже по цифрам. Тоже вся стоимость в скане инсертеда. А какие мне вам данные еще дать? Сами данные не могу, пардон, они закрытые. :)
Могу структуру таблички дать завтра. Щас сваливаю. Резину менять надо. Страшно а то по снегу на грязевой катать. :D
21 окт 14, 16:04    [16737899]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
Владислав Колосов, а сколько строк в таблице? И какова примерная плотность заполнения полей?
21 окт 14, 16:05    [16737915]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
АцкийСкотона, в триггере 98% времени выполнения занимает вставку во временную таблицу, 2% скан inserted.
Тем не менее, вставка в триггере выполняется намного медленнее.
21 окт 14, 16:12    [16737985]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
АцкийСкотона
А какие мне вам данные еще дать?


Репро, т.е. такой скрипт, запустив который у участников форума воспроизвелось бы описываемое поведение. Да, это муторно, нужно делать скрипты тестовых таблиц, заполнять их какими-то псевдо данными и т.д., но это лучший способ получить предметный ответ. Если репро не получается сделать, то хотя бы ожидания (в третий раз по-моему повторяю) при выполнении вашего запроса на вашем сервере.
21 окт 14, 16:12    [16737989]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
500000 строк, я же писал. Размер - 77 мб.
21 окт 14, 16:13    [16738001]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
Владислав Колосов
АцкийСкотона, в триггере 98% времени выполнения занимает вставку во временную таблицу, 2% скан inserted.
Тем не менее, вставка в триггере выполняется намного медленнее.

А ничего не путаете? У меня и у SomewhereSomehow 98% именно скан инсерта, а не вставка во временную таблицу. Вот попробуйте просто селект 1 из инсертеда сделать. Ради интереса.
21 окт 14, 16:52    [16738441]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
Владислав Колосов
500000 строк, я же писал. Размер - 77 мб.

У меня триста тыщ 308 метров весят. Судя по плану. План свой показать для обоих запросов можете, если не затруднит?
21 окт 14, 16:54    [16738474]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
SomewhereSomehow
АцкийСкотона
А какие мне вам данные еще дать?


Репро, т.е. такой скрипт, запустив который у участников форума воспроизвелось бы описываемое поведение. Да, это муторно, нужно делать скрипты тестовых таблиц, заполнять их какими-то псевдо данными и т.д., но это лучший способ получить предметный ответ. Если репро не получается сделать, то хотя бы ожидания (в третий раз по-моему повторяю) при выполнении вашего запроса на вашем сервере.

Проблематично мне такой скрипт написать.
А насчёт ожиданий, так я же писал. Там промелькивает цхпакет , асинхрон Ио, но они не висят при запросе. Просто может совпало так. Я их не каждый раз вижу. Завтра хочу посмотреть план реалтайм прямо, который в момент выполнения юзать.
Может что-то в настройках инстанса? Есть идеи?
21 окт 14, 17:02    [16738574]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31445
АцкийСкотона
Может что-то в настройках инстанса? Есть идеи?
Тут обсуждение превратилось в какое то препирательство по общесиквельной тематике.

Привнесите конкретику.
Выложите результат трейса (с заходом внутрь), в виде файла трейса, для вариантов с
SELECT "ПОЛЕ" INTO #T_INSERTED FROM INSERTED
и
SELECT "ПОЛЕ" INTO #T_INSERTED FROM "Таблица_на_которой_стоит_триггер"

Можно даже это сделать в одном триггере, поменяв, естественно, имя временной таблицы для второго инсёрта.

А то у вас из фактов - какие то тексты сообщений со статистикой (естественно, без названий стейтментов), по которым вы делаете какие то предположения. Реально же вы не знаете, что у вас там "тормозит".
21 окт 14, 17:47    [16739010]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
АцкийСкотона
А насчёт ожиданий, так я же писал. Там промелькивает цхпакет , асинхрон Ио, но они не висят при запросе. Просто может совпало так. Я их не каждый раз вижу.


16737238:
SomewhereSomehow
Попробуйте собрать ожидания при помощи события sqlos.wait_info
21 окт 14, 18:25    [16739168]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
Параллелизм при одновременной вставке во временную таблицу. Похоже, типа.

Вообще какой-то странный лог для операции массового апдейта.

Кстати, херачьте тогда уж в табличную переменную, чо. По крайней мере, она после роллбэка сохранится
21 окт 14, 23:32    [16740463]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
SIMPLicity_
Параллелизм при одновременной вставке во временную таблицу. Похоже, типа.

Вообще какой-то странный лог для операции массового апдейта.

Кстати, херачьте тогда уж в табличную переменную, чо. По крайней мере, она после роллбэка сохранится

Тему прочитайте. Прежде чем выводы делать. Я неоднократно говорил что именно тормозит. Не вставка отнюдь.
22 окт 14, 08:37    [16741066]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
alexeyvg, Какой вам еще трейс надо? В каком виде? Общепринятый стандарт форума есть? Если есть прошу указать.
22 окт 14, 08:59    [16741122]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31445
АцкийСкотона
alexeyvg, Какой вам еще трейс надо? В каком виде? Общепринятый стандарт форума есть? Если есть прошу указать.
В профайлере нажимаете кнопочку Save, трейс сохраняется. Сохранённый файл прикладываете к посту в форуме.

При иследовании проблем производительности всегда используют профайлер, по крайней мере, если речь не об отладке одиночного запроса (да и в этом случае непонятно, зачем от него отказываться).

Для вашей задачи выберите следующие настройки профайлера, обратите внимание на набор Events и установите SPID из того окошка, откуда запускаете обновление таблицы:

К сообщению приложен файл. Размер - 111Kb
22 окт 14, 09:12    [16741151]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
АцкийСкотона
SIMPLicity_
Параллелизм при одновременной вставке во временную таблицу. Похоже, типа.

Вообще какой-то странный лог для операции массового апдейта.

Кстати, херачьте тогда уж в табличную переменную, чо. По крайней мере, она после роллбэка сохранится

Тему прочитайте. Прежде чем выводы делать. Я неоднократно говорил что именно тормозит. Не вставка отнюдь.

Прошу прощения, есличо. Ориентировался исключительно на ТЕМУ. Топег дальше второй страницы не читал,- он там, похоже (как тут принято), сваливается в говно. Про "тормоза" - просто поделился опытом: было нечто похожее,- переписал - заработало шустро.

Удачи, типа!
22 окт 14, 10:43    [16741636]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
SIMPLicity_, Если бы прочитали "дальше второй страницы", то увидели бы что тормозит не вставка во временную таблицу, а сам выбор из инсертеда.
Удачи Вам в дальнейшем с таким "подходом" к вопросам!

alexeyvg, Я для этих целей, дэбага, конечно несколько другие методы использую. Но понимаю что вам надо некоторые данные с трейса. Сейчас раскидаю таски и сделаю вам трейс в запрошенном виде. Ориентировочно- после обеда.
22 окт 14, 11:33    [16741960]     Ответить | Цитировать Сообщить модератору
 Re: Долгая выборка из INSERTED\DELETED во временную таблицу  [new]
АцкийСкотона
Member

Откуда: Чебоксары
Сообщений: 56
alexeyvg, Вот трейс. Но ничего полезного для решения проблемы там нет.

К сообщению приложен файл (trace_20141022_1338.rar - 10Kb) cкачать
22 окт 14, 13:41    [16742938]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить