Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
на двух разных пк установлен одинаковый SQL Server 2008R2 Express Edition

один и тот же запрос к абсолютно одинаковым таблицам
(перенесены скриптами с данными, индексы тоже заскриптованы)
на одном выполняется за минуту с копейками,
на втором за 4.
второй комп типа круче, на нем 4гига, на первом 3,
но на нем же и медленнее выполняется.
планы запросов идентичные.
а статистика говорит такое:
1:
SQL Server Execution Times:
CPU time = 72453 ms, elapsed time = 73132 ms.

2:
SQL Server Execution Times:
CPU time = 240085 ms, elapsed time = 241924 ms.

это что, процессор на одном позорнее, чем на другом?
смотрю в БОЛ по SET STATISTICS TIME,
не объясняют, что такое CPU time.
а я вот сомневаюсь, правильно ли понимаю, что дело в процессоре.
от своего компа процессор знаю какой, от второго попрошу сейчас название.
или это не в процессоре дело?
11 июн 13, 16:57    [14421855]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Glory
Member

Откуда:
Сообщений: 104751
CPU time
планы запросов идентичные.

Реальные или предварительные ?
11 июн 13, 16:59    [14421875]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Glory,

Actual Execution Plan
на обоих
11 июн 13, 17:04    [14421903]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Glory
Member

Откуда:
Сообщений: 104751
CPU time
Actual Execution Plan
на обоих

И нет там никакого параллелизма скажем ?
11 июн 13, 17:05    [14421916]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Гость333
Member

Откуда:
Сообщений: 3683
CPU time
SQL Server 2008R2 Express Edition
второй комп типа круче, на нем 4гига, на первом 3

Экспрессу это фиолетово, т.к. в силу ограничений движка он использует не более одного гигабайта ОЗУ.
11 июн 13, 17:07    [14421926]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
да куча в чем может быть дело
возможно сервак какой-нибудь недавно ребутали и скл не успел скушать память
возможно нужно посмотреть говернер
возможно нужно посмотреть ограничение сервера по рэмм
и т.д.
11 июн 13, 17:10    [14421953]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Glory,

именно что нет.
на моем компе сервер считает, что 2 процессора,
а на том как раз видит 4.
у меня тоже было подозрение, что на втором увидал больше процессоров
решил распараллелить и только хуже стало.
не, не параллелит. фул скан и нестед лупс, планы 1 в 1
11 июн 13, 17:11    [14421960]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Гость333
Member

Откуда:
Сообщений: 3683
CPU time,

Посмотрите ещё Statistics IO. Ну и, конечно, модели процессоров огласите.
11 июн 13, 17:14    [14421987]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр52,

мне обидно будет Вас разочаровать,
но интерес у нас чисто академический.
оба компа включены с утреца,
первый -- мой фиксированный говнокомп из офиса,
второй -- личный ноутбук принимающего участие товарища.
на обоих серверах нагрузка 0,
кроме этого экперимента ничего не делается.
эксперимент с другой целью ставился,
а вот оно что вышло...
11 июн 13, 17:15    [14421998]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time
а статистика говорит такое:
1:
SQL Server Execution Times:
CPU time = 72453 ms, elapsed time = 73132 ms.

2:
SQL Server Execution Times:
CPU time = 240085 ms, elapsed time = 241924 ms.


Здесь явно видно, что время выполнения запроса упирается в процессор, а не ОЗУ или IO.

Также видно, что дело не в паралелизме, иначе было бы:

CPU time = 240000 ms, elapsed time = 73132 ms.
CPU time = 240085 ms, elapsed time = 241924 ms.

Если же план 100% идентичен, в чем я сомневаюсь,

то возможны два варианта:
1) Или процессор на первом пк раза в три медленнее
2) Или объем работы (данных) на втором пк в три раза больше

Но куда более вероятно, что актуальные планы имеют различия..
11 июн 13, 17:57    [14422163]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Гость333
CPU time,

Посмотрите ещё Statistics IO. Ну и, конечно, модели процессоров огласите.

1:

(6297 row(s) affected)
Table 'Worktable'. Scan count 1, logical reads 630692, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'tab1'. Scan count 1, logical reads 410, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'tab2'. Scan count 1, logical reads 73, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 73141 ms, elapsed time = 74006 ms.
---------------------------------------------------------------------------
2:
(6297 row(s) affected)

Table 'Worktable'. Scan count 1, logical reads 630692, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'tab1'. Scan count 1, logical reads 410, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'tab2'. Scan count 1, logical reads 73, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

SQL Server Execution Times:
CPU time = 240085 ms, elapsed time = 241924 ms.

-----------------------------------------------------------------------------

Processor1: Intel Pentium G6950
от второго компа жду название процессора.
на третьем Intel i5-2430M

и еще. тот же запросец на 64битном сервере(SQL Server 2008R2 x64, Win 7 x64) вот:
(6297 row(s) affected)
Table 'Worktable'. Scan count 1, logical reads 630692, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'tab1'. Scan count 1, logical reads 410, physical reads 0, read-ahead reads 7, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'tab2'. Scan count 1, logical reads 73, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 254968 ms, elapsed time = 255982 ms.


может, все дело в Винде?
на моем(самый быстрый вариант) Win XP,
на втором компе Win7 Pro x64,
на третьем тоже Win7 Pro x64
11 июн 13, 18:06    [14422186]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр Волок (def1983),

да идентичные планы, и компы бездействующие,
на серверах по единственному пользователю...
на 1-ом только я,
на 2-ом только он,
и 3-ий это мой ноут.
разные процессоры и разрядность ОС и сервера, на последнем ноуте сервер как и ОС х64.
и самое снмешное, чем разрядность всего(ОС + сервер) больше, тем медленнее работает
11 июн 13, 18:11    [14422203]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
если кому интересно, могу скрипт таблиц с данными на rapidshare выложить + запрос.
в архиве он всего 768Кб.
тупой джойн двух таблиц с фулл сканом.
чем "круче" сервер и ОС, тем хуже результат.
оптимизация не интересует,
у меня уже сделано, что выполняется мгновенно.
вот хотелось продемоснтрировать товарищу на спор, о пользе индексов.
говорю, запусти сперва как есть, насладись.
а у него на более крутом компе оно в 4 раза дольше отработало
(оптимизированный вариант везде летает, заинтересовало, откуда 4 минуты вылезли)
11 июн 13, 18:18    [14422224]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time
Александр Волок (def1983),

да идентичные планы, и компы бездействующие,
на серверах по единственному пользователю...
на 1-ом только я,
на 2-ом только он,
и 3-ий это мой ноут.
разные процессоры и разрядность ОС и сервера, на последнем ноуте сервер как и ОС х64.
и самое снмешное, чем разрядность всего(ОС + сервер) больше, тем медленнее работает


процессор процессору рознь, к примеру, образно говоря, ядро на моем современном ноуте (core i5) перемолотит одинаковый набор данных раза в три быстрее нежели ядро ксеона 2008 года выпуска.

Т.е. на одну и ту же задачу cpu И elapsed time будет раза в три меньше..

По поводу разрядности... лейбл "x64" в данном случае говорит, что процессор может адресовать нативно больше ОЗУ нежели x32.
Это плюс, т.к. можно установить 128 ГБ озу и вся область памяти будет доступна любой подсистеме SQL Server (а не только bpool, как было с AWE)

Минус же, что скомпилированный X64 код более требовательный к ресурсам, ибо необходимо работать с 64битными мемори поинтерами... В некоторых случаях повышенная требовательность незаметна..

Поэтому, ожидать, что x64 с 3 ГБ озу будет работать быстрее чем x86 озу смысла нет...
Смысл ожидать есть когда ОЗУ очень много и она необходима всем подсистемам SQL Server...
11 июн 13, 18:21    [14422232]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time
а у него на более крутом компе оно в 4 раза дольше отработало
(оптимизированный вариант везде летает, заинтересовало, откуда 4 минуты вылезли)


как вариант:

можно выполнить на обоих серверах:

DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);
-- затем код


и затем проверить wait stats, чтобы уж точно локализировать в чем загвоздка
11 июн 13, 18:26    [14422249]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр Волок (def1983),

ок, сейчас проделаем.
а проц у него Intel i5-2450M
11 июн 13, 18:28    [14422254]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр Волок (def1983)
Поэтому, ожидать, что x64 с 3 ГБ озу будет работать быстрее чем x86 озу смысла нет...


не, прямо скажем, никто не ожидал, что будет "быстрее".
меня удивляет скорее то, что стало "тормознее", да еще и в 4 раза.

после проделанного у меня на фиксированном и на ноуте ничего не изменилось.
х32 по-прежнему впереди.
чего у товарища -- жду.
11 июн 13, 18:37    [14422292]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time
после проделанного у меня на фиксированном и на ноуте ничего не изменилось.
х32 по-прежнему впереди.
чего у товарища -- жду.


Идея была:
1) сбросить статистику ожиданий с помощью: DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);
2) запустить тот тяжелый запрос
3) выполнить сбор статистики, к примеру:

WITH [Waits] AS
    (SELECT
        [wait_type],
        [wait_time_ms] / 1000.0 AS [WaitS],
        ([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
        [signal_wait_time_ms] / 1000.0 AS [SignalS],
        [waiting_tasks_count] AS [WaitCount],
        100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
        ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
    FROM sys.dm_os_wait_stats
    WHERE [wait_type] NOT IN (
        N'CLR_SEMAPHORE',    N'LAZYWRITER_SLEEP',
        N'RESOURCE_QUEUE',   N'SQLTRACE_BUFFER_FLUSH',
        N'SLEEP_TASK',       N'SLEEP_SYSTEMTASK',
        N'WAITFOR',          N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
        N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
        N'XE_TIMER_EVENT',   N'XE_DISPATCHER_JOIN',
        N'LOGMGR_QUEUE',     N'FT_IFTS_SCHEDULER_IDLE_WAIT',
        N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
        N'CLR_AUTO_EVENT',   N'DISPATCHER_QUEUE_SEMAPHORE',
        N'TRACEWRITE',       N'XE_DISPATCHER_WAIT',
        N'BROKER_TO_FLUSH',  N'BROKER_EVENTHANDLER',
        N'FT_IFTSHC_MUTEX',  N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        N'DIRTY_PAGE_POLL',  N'SP_SERVER_DIAGNOSTICS_SLEEP')
    )
SELECT
    [W1].[wait_type] AS [WaitType],
    CAST ([W1].[WaitS] AS DECIMAL(14, 2)) AS [Wait_S],
    CAST ([W1].[ResourceS] AS DECIMAL(14, 2)) AS [Resource_S],
    CAST ([W1].[SignalS] AS DECIMAL(14, 2)) AS [Signal_S],
    [W1].[WaitCount] AS [WaitCount],
    CAST ([W1].[Percentage] AS DECIMAL(4, 2)) AS [Percentage],
    CAST (([W1].[WaitS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgWait_S],
    CAST (([W1].[ResourceS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgRes_S],
    CAST (([W1].[SignalS] / [W1].[WaitCount]) AS DECIMAL (14, 4)) AS [AvgSig_S]
FROM [Waits] AS [W1]
INNER JOIN [Waits] AS [W2]
    ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum], [W1].[wait_type], [W1].[WaitS],
    [W1].[ResourceS], [W1].[SignalS], [W1].[WaitCount], [W1].[Percentage]
HAVING SUM ([W2].[Percentage]) - [W1].[Percentage] < 95; -- percentage threshold
GO


в этом случае будет более наглядно видно, во что именно сервера упираются...
Да и актуальные планы все же не помешали бы..
11 июн 13, 18:41    [14422310]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
во время выполнения запустила в соседнем окне такое
(не знала, по какому из них сортировать, но вот все значащие цифры на картинке)
это для х32, сейчас проделаю на х64,
или надо другое?

К сообщению приложен файл. Размер - 35Kb
11 июн 13, 18:44    [14422326]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр Волок (def1983),
x32:
WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION 2.84 2.83 0.01 669 73.34 0.0043 0.0042 0.0000
SOS_SCHEDULER_YIELD 0.79 0.00 0.79 8854 20.40 0.0001 0.0000 0.0001
PREEMPTIVE_OS_FILEOPS 0.07 0.07 0.00 12 1.88 0.0061 0.0061 0.0000

11 июн 13, 18:47    [14422339]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time,

В данном случае лучше сбросить заново статистику и запустить опрос wait stats не во время выполнения, а по завершению, используя запрос, что я привел, у него более наглядные результаты
11 июн 13, 18:50    [14422350]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
x64:
WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION	11.60	11.56	0.04	2091	84.69	0.0055	0.0055	0.0000
SOS_SCHEDULER_YIELD 1.82 0.00 1.82 10170 13.30 0.0002 0.0000 0.0002
11 июн 13, 18:58    [14422377]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
CPU time
Guest
Александр Волок (def1983)
CPU time,

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


а, ну вот по завершению(те до этого запускала ВО ВРЕМЯ ВЫПОЛНЕНИЯ)

x32:

WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION 9.20 9.17 0.03 1796 53.68 0.0051 0.0051 0.0000
PREEMPTIVE_OS_FLUSHFILEBUFFERS 1.73 1.73 0.00 31 10.12 0.0559 0.0559 0.0000
PAGEIOLATCH_SH 1.62 1.61 0.01 349 9.44 0.0046 0.0046 0.0000
SOS_SCHEDULER_YIELD 1.50 0.01 1.49 18522 8.76 0.0001 0.0000 0.0001
LCK_M_S 0.91 0.90 0.00 22 5.29 0.0412 0.0411 0.0001
PREEMPTIVE_OS_FILEOPS 0.73 0.73 0.00 111 4.28 0.0066 0.0066 0.0000
WRITELOG 0.37 0.36 0.01 139 2.18 0.0027 0.0026 0.0001
ASYNC_NETWORK_IO 0.33 0.30 0.03 934 1.92 0.0004 0.0003 0.0000

X64:

WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION 15.31 15.25 0.06 2789 81.43 0.0055 0.0055 0.0000
SOS_SCHEDULER_YIELD 2.50 0.02 2.48 64960 13.27 0.0000 0.0000 0.0000
ASYNC_NETWORK_IO 0.34 0.31 0.03 947 1.81 0.0004 0.0003 0.0000
11 июн 13, 19:03    [14422398]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
CPU time,

А вы уверены, что у вас на втором компе CPU работает на полную? Может там какой нить power saving mode включен?

http://www.sqlskills.com/blogs/paul/are-your-cpus-running-slowly-tool-tip-and-survey/
11 июн 13, 19:17    [14422464]     Ответить | Цитировать Сообщить модератору
 Re: что означает CPU time (SET STATISTICS TIME)  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
CPU time
Александр Волок (def1983)
CPU time,

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


а, ну вот по завершению(те до этого запускала ВО ВРЕМЯ ВЫПОЛНЕНИЯ)

x32:

WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION 9.20 9.17 0.03 1796 53.68 0.0051 0.0051 0.0000
PREEMPTIVE_OS_FLUSHFILEBUFFERS 1.73 1.73 0.00 31 10.12 0.0559 0.0559 0.0000
PAGEIOLATCH_SH 1.62 1.61 0.01 349 9.44 0.0046 0.0046 0.0000
SOS_SCHEDULER_YIELD 1.50 0.01 1.49 18522 8.76 0.0001 0.0000 0.0001
LCK_M_S 0.91 0.90 0.00 22 5.29 0.0412 0.0411 0.0001
PREEMPTIVE_OS_FILEOPS 0.73 0.73 0.00 111 4.28 0.0066 0.0066 0.0000
WRITELOG 0.37 0.36 0.01 139 2.18 0.0027 0.0026 0.0001
ASYNC_NETWORK_IO 0.33 0.30 0.03 934 1.92 0.0004 0.0003 0.0000

X64:

WaitType	Wait_S	Resource_S	Signal_S	WaitCount	Percentage	AvgWait_S	AvgRes_S	AvgSig_S
IO_COMPLETION 15.31 15.25 0.06 2789 81.43 0.0055 0.0055 0.0000
SOS_SCHEDULER_YIELD 2.50 0.02 2.48 64960 13.27 0.0000 0.0000 0.0000
ASYNC_NETWORK_IO 0.34 0.31 0.03 947 1.81 0.0004 0.0003 0.0000


Все таки, IO - это бутылочное горлышко..


По данным видно что
IO_COMPLETION на втором сервере вызывает более длительные задержки и его SIGNAL_S (signal_wait_time_ms) очень низкий, значит задержки именно его вине..

SOS_SCHEDULER_YIELD (процессор) - задержки тоже высоки.. но по ним видно, что почти все время идет на SIGNAL_S, т.е. процессор ожидает какой-то другой ресурс.. в данном случае IO


учитывая что:
Table 'Worktable'. Scan count 1, logical reads 630692

вероятно с проблемы темпдб...

Хорошо бы увидеть fn_virtual file stats
11 июн 13, 19:30    [14422526]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить