Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 percent_complete без percent_complete  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Господа,
есть такой запрос. SQL 2014 Внимание вопрос! Как оценить прогресс его его выполнения, если percent_complete показывает 0 (sys.dm_exec_requests). reads/writes тикают (увеличиваются). RECOVERY MODEL SIMPLE, кстати говоря, может помочь. В таблице 190 лямов строк и колонок около 30.

	UPDATE o 
		SET o.[rv] = 0
	FROM TTT o WITH (TABLOCKX)


Вообще какие есть способы оценить время выполнения. Лог помониторить, reads/writes посчитать или ещё что?
21 сен 16, 17:13    [19693281]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
msLex
Member

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

если [rv] встречается только в одном индексе
select count(*) from ttt o with(nolock) where o.[rv] = 0

если в нескольких, то для каждого из индексов
select count(*) from ttt o with(nolock, index(...)) where o.[rv] = 0
21 сен 16, 17:55    [19693484]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
a_voronin
Вообще какие есть способы оценить время выполнения. Лог помониторить, reads/writes посчитать или ещё что?


эээ как бы для этого и придумали в частности планы, туда не пробовали посмотреть?
21 сен 16, 17:57    [19693500]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
WarAnt,

и что же будет в плане? итоговое количество чтений ???
21 сен 16, 17:59    [19693506]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
msLex,
Аналогичный запрос я запускал, но там уже много где 0 и изменений не видно
21 сен 16, 18:11    [19693550]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Отсюда можно какие-то выводу сделать ?

+
-- This query returns log file space used by all running transactions.
select
    SessionTrans.session_id as [SPID],
    enlist_count as [Active Requests],
    ActiveTrans.transaction_id as [ID],
    ActiveTrans.name as [Name],
    ActiveTrans.transaction_begin_time as [Start Time],
    case transaction_type
        when 1 then 'Read/Write'
        when 2 then 'Read-Only'
        when 3 then 'System'
        when 4 then 'Distributed'
        else 'Unknown - ' + convert(varchar(20), transaction_type)
    end as [Transaction Type],
    case transaction_state
        when 0 then 'Uninitialized'
        when 1 then 'Not Yet Started'
        when 2 then 'Active'
        when 3 then 'Ended (Read-Only)'
        when 4 then 'Committing'
        when 5 then 'Prepared'
        when 6 then 'Committed'
        when 7 then 'Rolling Back'
        when 8 then 'Rolled Back'
        else 'Unknown - ' + convert(varchar(20), transaction_state)
    end as 'State',
    case dtc_state
        when 0 then NULL
        when 1 then 'Active'
        when 2 then 'Prepared'
        when 3 then 'Committed'
        when 4 then 'Aborted'
        when 5 then 'Recovered'
        else 'Unknown - ' + convert(varchar(20), dtc_state)
    end as 'Distributed State',
    DB.Name as 'Database',
    database_transaction_begin_time as [DB Begin Time],
    case database_transaction_type
        when 1 then 'Read/Write'
        when 2 then 'Read-Only'
        when 3 then 'System'
        else 'Unknown - ' + convert(varchar(20), database_transaction_type)
    end as 'DB Type',
    case database_transaction_state
        when 1 then 'Uninitialized'
        when 3 then 'No Log Records'
        when 4 then 'Log Records'
        when 5 then 'Prepared'
        when 10 then 'Committed'
        when 11 then 'Rolled Back'
        when 12 then 'Committing'
        else 'Unknown - ' + convert(varchar(20), database_transaction_state)
    end as 'DB State',
    database_transaction_log_record_count as [Log Records],
    database_transaction_log_bytes_used / 1024 as [Log KB Used],
    database_transaction_log_bytes_reserved / 1024 as [Log KB Reserved],
    database_transaction_log_bytes_used_system / 1024 as [Log KB Used (System)],
    database_transaction_log_bytes_reserved_system / 1024 as [Log KB Reserved (System)],
    database_transaction_replicate_record_count as [Replication Records],
    command as [Command Type],
    total_elapsed_time as [Elapsed Time],
    cpu_time as [CPU Time],
    wait_type as [Wait Type],
    wait_time as [Wait Time],
    wait_resource as [Wait Resource],
    reads as [Reads],
    logical_reads as [Logical Reads],
    writes as [Writes],
    --open_transaction_count as [Open Transactions],
    open_resultset_count as [Open Result Sets],
    row_count as [Rows Returned],
    nest_level as [Nest Level],
    granted_query_memory as [Query Memory],
    SUBSTRING(SQLText.text,ExecReqs.statement_start_offset/2,(CASE WHEN ExecReqs.statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), SQLText.text)) * 2 ELSE ExecReqs.statement_end_offset end - ExecReqs.statement_start_offset)/2) AS query_text
from
    sys.dm_tran_active_transactions ActiveTrans (nolock)
    inner join sys.dm_tran_database_transactions DBTrans (nolock)
        on DBTrans.transaction_id = ActiveTrans.transaction_id
    inner join sys.databases DB (nolock)
        on DB.database_id = DBTrans.database_id
    left join sys.dm_tran_session_transactions SessionTrans (nolock)
        on SessionTrans.transaction_id = ActiveTrans.transaction_id
    left join sys.dm_exec_requests ExecReqs (nolock)
        on ExecReqs.session_id = SessionTrans.session_id
        and ExecReqs.transaction_id = SessionTrans.transaction_id
    outer apply sys.dm_exec_sql_text(ExecReqs.sql_handle) AS SQLText
where SessionTrans.session_id is not null -- comment this out to see SQL Server internal processes
21 сен 16, 18:12    [19693553]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
a_voronin
Вообще какие есть способы оценить время выполнения
Очень грубо можно - взять для данной транзакции за определенный промежуток времени два значения database_transaction_log_record_count из sys.dm_tran_database_transactions для этой БД. По разнице между ними можно прикинуть количество строк обработанное за этот промежуток.
Если на таблице есть индексы и план узкий, то полученное значение нужно поделить на количество затрагиваемых индексов.
Если на таблице есть триггеры и т.п., или, например, в плане есть какие-либо блокирующие итераторы - способ не сработает.
21 сен 16, 18:44    [19693681]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
invm
a_voronin
Вообще какие есть способы оценить время выполнения
Очень грубо можно - взять для данной транзакции за определенный промежуток времени два значения database_transaction_log_record_count из sys.dm_tran_database_transactions для этой БД. По разнице между ними можно прикинуть количество строк обработанное за этот промежуток.
Если на таблице есть индексы и план узкий, то полученное значение нужно поделить на количество затрагиваемых индексов.
Если на таблице есть триггеры и т.п., или, например, в плане есть какие-либо блокирующие итераторы - способ не сработает.


Идея хорошая -- но вопрос -- делить на количество индексов, в которые входит обновляемое поле, или делить на количество всех индексов? А время можно взять общее время выполнения.
21 сен 16, 18:54    [19693715]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Наш ДБА выдвинул идею, что надо делить на кол-во индексов, куда входит обновляемое поле плюс кластерные индекс, если он есть.
21 сен 16, 18:59    [19693732]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
a_voronin
но вопрос -- делить на количество индексов, в которые входит обновляемое поле, или делить на количество всех индексов?
Само-собой, на количество индексов, которые обновляются.

Повторюсь - этот способ имеет смысл, если план выполнения "узкий" (построчный). У вас же обновляется таблица полностью, так что план, скорее всего, будет "широкий" (поиндексный).
21 сен 16, 20:39    [19693924]     Ответить | Цитировать Сообщить модератору
 Re: percent_complete без percent_complete  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35376
Блог
я бы смотрел с хинтом index=0
21 сен 16, 22:01    [19694151]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить