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

Откуда: Ростов-на-Дону
Сообщений: 315
Добрый день.

Имеется резервный сервер SQL.
Microsoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec 16 2008 19:46:53 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Имеется резервная копия базы, которая полностью лежит на диске E.
Исходное состояние DBCC MEMORYSTATUS до проведения теста:

Buffer Counts
Commited 2621440
Target 2621440
Hashed 75456

Запускаю запрос, который расчитывает по семи таблицам свободные остатки. Результатом является количество строк с минусовыми свободными остатками. Вобщем один большой селект с маленьким результатом.

Первый раз запускаю запрос. Выполняется он 27 секунд. Наблюдаю активную дисковую активность. После выполнения процедуры в памяти зарезервировалось дополнительные 3 Гб буфферов.

Buffer Counts
Commited 2621440
Target 2621440
Hashed 473910

Дальше запускаю еще раз запрос. Он выполняется 14 секунд. Наблюдаю следующую активность.

Картинка с другого сайта.

Картинка с другого сайта.

Buffer Counts
Commited 2621440
Target 2621440
Hashed 472408

Дальше сколько бы я не запускал запрос - наблюдаю аналогичную активность, скорость выполнения и почти неизменные буффера.

Активность длится порядка 5 секунд.
Вопрос - что SQL делает 14 секунд? Если взять тупо предположить, что это он работает с памятью, то 3Гб в оперативке за 14 секунд - это скорость 214 Мбайт/сек. Врядли это скорость работы с оперативкой.
23 авг 13, 09:25    [14745363]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Гость333
Member

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

Покажите ваш запрос, план этого запроса, а также статистику выполнения (SET STATISTICS IO ON и SET STATISTICS TIME ON).
23 авг 13, 09:36    [14745415]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
aleks2
Guest
Kaktus_
Вопрос - что SQL делает 14 секунд? Если взять тупо предположить, что это он работает с памятью, то 3Гб в оперативке за 14 секунд - это скорость 214 Мбайт/сек. Врядли это скорость работы с оперативкой.


Считает, аднако. И чуть-чуть диск пользует.
23 авг 13, 09:36    [14745416]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Kaktus_
Member

Откуда: Ростов-на-Дону
Сообщений: 315
----------------------
План выполнения
----------------------


StmtText                                                                                                                                                                                                                                                         
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
SELECT COUNT(*) FROM (

SELECT     TOP 100 PERCENT aaa.Склад, aaa.Товар, aaa.Цвет, aaa.Заказ, dbo.Item.Description AS Описание, cast(SUM(aaa.[Ост ШТ]) as money) AS [Ост ШТ], 
                      cast(SUM(aaa.[Рез ШТ]) as money) AS [Рез ШТ], cast(SUM(a

(1 row(s) affected)

StmtText                                                                                                                                                                                                                                                         
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  |--Compute Scalar(DEFINE:([Expr1081]=Convert([globalagg1099])))
       |--Stream Aggregate(DEFINE:([globalagg1099]=SUM([partialagg1098])))
            |--Parallelism(Gather Streams)
                 |--Stream Aggregate(DEFINE:([partialagg1098]=Count(*)))
                      |--Filter(WHERE:([Expr1076]-[Expr1077]<0.00000000000000000000))
                           |--Compute Scalar(DEFINE:([Expr1076]=If ([Expr1100]=0) then NULL else [Expr1101], [Expr1077]=If ([Expr1102]=0) then NULL else [Expr1103]))
                                |--Stream Aggregate(GROUP BY:([Union1068], [Union1069], [Union1070], [Union1071], [Item].[Description]) DEFINE:([Expr1100]=COUNT_BIG([Union1072]), [Expr1101]=SUM([Union1072]), [Expr1102]=COUNT_BIG([Union1073]), [Expr1103]=SU
                                     |--Sort(ORDER BY:([Union1068] ASC, [Union1069] ASC, [Union1070] ASC, [Union1071] ASC, [Item].[Description] ASC))
                                          |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Union1068], [Union1069], [Union1070], [Union1071], [Item].[Description]))
                                               |--Hash Match(Inner Join, HASH:([Item].[No_])=([Union1069]), RESIDUAL:([Item].[No_]=[Union1069]))
                                                    |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Item].[No_]))
                                                    |    |--Index Scan(OBJECT:([Первая фирма].[dbo].[Item].[$10]))
                                                    |--Concatenation
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Item Ledger Entry].[Item No_]))
                                                         |    |--Hash Match(Aggregate, HASH:([Первая фирма$Item Ledger Entry].[Location Code], [Первая фирма$Item Ledger Entry].[Item No_], [Первая фирма$Item Ledger Entry].[Vari
                                                         |         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Item Ledger Entry].[Location Code], [Первая фирма$Item Ledger Entry].[Item No_], [Первая фирма
                                                         |              |--Hash Match(Partial Aggregate, HASH:([Первая фирма$Item Ledger Entry].[Location Code], [Первая фирма$Item Ledger Entry].[Item No_], [Первая фирма$Item L
                                                         |                   |--Clustered Index Scan(OBJECT:([Первая фирма].[dbo].[Первая фирма$Item Ledger Entry].[Первая фирма$Item Ledger Entry$0]), WHERE:((like([Первая фирма
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Item Ledger Entry].[Item No_]))
                                                         |    |--Hash Match(Aggregate, HASH:([Вторая фирма$Item Ledger Entry].[Location Code], [Вторая фирма$Item Ledger Entry].[Item No_], [Вторая фирма$Item Ledger Ent
                                                         |         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Item Ledger Entry].[Location Code], [Вторая фирма$Item Ledger Entry].[Item No_], [Вторая фирма
                                                         |              |--Clustered Index Scan(OBJECT:([Первая фирма].[dbo].[Вторая фирма$Item Ledger Entry].[Вторая фирма$Item Ledger Entry$0]), WHERE:((([Вторая фирма
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Sales Line].[No_]))
                                                         |    |--Stream Aggregate(GROUP BY:([Первая фирма$Sales Line].[No_], [Первая фирма$Sales Line].[Location Code], [Первая фирма$Sales Line].[Variant Code], [Первая фирма
                                                         |         |--Sort(ORDER BY:([Первая фирма$Sales Line].[No_] ASC, [Первая фирма$Sales Line].[Location Code] ASC, [Первая фирма$Sales Line].[Variant Code] ASC, [Первая фирма
                                                         |              |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Sales Line].[No_], [Первая фирма$Sales Line].[Location Code], [Первая фирма$Sales Lin
                                                         |                   |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Первая фирма$Sales Line].[Первая фирма$Sales Line$0]), SEEK:([Первая фирма$Sales Line
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Sales Line].[No_]))
                                                         |    |--Stream Aggregate(GROUP BY:([Вторая фирма$Sales Line].[Location Code], [Вторая фирма$Sales Line].[No_], [Вторая фирма$Sales Line].[Variant Code], [Вторая фирма
                                                         |         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Sales Line].[Location Code], [Вторая фирма$Sales Line].[No_], [Вторая фирма$Sales
                                                         |              |--Stream Aggregate(GROUP BY:([Вторая фирма$Sales Line].[Location Code], [Вторая фирма$Sales Line].[No_], [Вторая фирма$Sales Line].[Variant Code
                                                         |                   |--Sort(ORDER BY:([Вторая фирма$Sales Line].[Location Code] ASC, [Вторая фирма$Sales Line].[No_] ASC, [Вторая фирма$Sales Line].[Variant Cod
                                                         |                        |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Вторая фирма$Sales Line].[Вторая фирма$Sales Line$0]), SEEK:([Вторая фирма
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Четвертая фирма$Sales Line].[No_]))
                                                         |    |--Stream Aggregate(GROUP BY:([Четвертая фирма$Sales Line].[Location Code], [Четвертая фирма$Sales Line].[No_], [Четвертая фирма$Sales Line].[Variant Code], [Четвертая фирма$Sales Line].[Order No_]) DEFINE:([Expr10
                                                         |         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Четвертая фирма$Sales Line].[Location Code], [Четвертая фирма$Sales Line].[No_], [Четвертая фирма$Sales Line].[Variant Code], [Четвертая фирма$Sales Line
                                                         |              |--Stream Aggregate(GROUP BY:([Четвертая фирма$Sales Line].[Location Code], [Четвертая фирма$Sales Line].[No_], [Четвертая фирма$Sales Line].[Variant Code], [Четвертая фирма$Sales Line].[Order No_]) DEFIN
                                                         |                   |--Sort(ORDER BY:([Четвертая фирма$Sales Line].[Location Code] ASC, [Четвертая фирма$Sales Line].[No_] ASC, [Четвертая фирма$Sales Line].[Variant Code] ASC, [Четвертая фирма$Sales Line].[Order No_] A
                                                         |                        |--Parallelism(Distribute Streams)
                                                         |                             |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Четвертая фирма$Sales Line].[Четвертая фирма$Sales Line$0]), SEEK:([Четвертая фирма$Sales Line].[Document Type]=1),  WHE
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Третья фирма$Sales Line].[No_]))
                                                         |    |--Stream Aggregate(GROUP BY:([Третья фирма$Sales Line].[Location Code], [Третья фирма$Sales Line].[No_], [Третья фирма$Sales Line].[Variant Code], [Третья фирма$Sales Line].[Order No_]) DEFINE:([Ex
                                                         |         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Третья фирма$Sales Line].[Location Code], [Третья фирма$Sales Line].[No_], [Третья фирма$Sales Line].[Variant Code], [Третья фирма$Sales 
                                                         |              |--Stream Aggregate(GROUP BY:([Третья фирма$Sales Line].[Location Code], [Третья фирма$Sales Line].[No_], [Третья фирма$Sales Line].[Variant Code], [Третья фирма$Sales Line].[Order No_]) D
                                                         |                   |--Sort(ORDER BY:([Третья фирма$Sales Line].[Location Code] ASC, [Третья фирма$Sales Line].[No_] ASC, [Третья фирма$Sales Line].[Variant Code] ASC, [Третья фирма$Sales Line].[Order No
                                                         |                        |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Третья фирма$Sales Line].[Третья фирма$Sales Line$0]), SEEK:([Третья фирма$Sales Line].[Document Type]=1),  WHERE
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Item Journal Line].[Item No_]))
                                                         |    |--Stream Aggregate(GROUP BY:([Первая фирма$Item Journal Line].[Item No_], [Первая фирма$Item Journal Line].[Location Code], [Первая фирма$Item Journal Line].[Varia
                                                         |         |--Sort(ORDER BY:([Первая фирма$Item Journal Line].[Item No_] ASC, [Первая фирма$Item Journal Line].[Location Code] ASC, [Первая фирма$Item Journal Line].[Vari
                                                         |              |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Первая фирма$Item Journal Line].[Item No_], [Первая фирма$Item Journal Line].[Location Code], [Первая фирма
                                                         |                   |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Первая фирма$Item Journal Line].[Первая фирма$Item Journal Line$0]), SEEK:([Первая фирма
                                                         |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Item Journal Line].[Item No_]))
                                                              |--Stream Aggregate(GROUP BY:([Вторая фирма$Item Journal Line].[Item No_], [Вторая фирма$Item Journal Line].[Location Code], [Вторая фирма$Item Journal Lin
                                                                   |--Sort(ORDER BY:([Вторая фирма$Item Journal Line].[Item No_] ASC, [Вторая фирма$Item Journal Line].[Location Code] ASC, [Вторая фирма$Item Journal Li
                                                                        |--Parallelism(Repartition Streams, PARTITION COLUMNS:([Вторая фирма$Item Journal Line].[Item No_], [Вторая фирма$Item Journal Line].[Location Code], [Вторая фирма
                                                                             |--Clustered Index Seek(OBJECT:([Первая фирма].[dbo].[Вторая фирма$Item Journal Line].[Вторая фирма$Item Journal Line$0]), SEEK:([Вторая фирма

(56 row(s) affected)


---------------
Статистика SET STATISTICS IO ON
---------------

SQL Server parse and compile time: 
   CPU time = 297 ms, elapsed time = 305 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
            
----------- 
0

(1 row(s) affected)
Table 'Первая фирма$Item Ledger Entry'. Scan count 8, logical reads 288817, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Item Ledger Entry'. Scan count 8, logical reads 107412, physical reads 0, read-ahead reads 0.
Table 'Первая фирма$Sales Line'. Scan count 8, logical reads 328, physical reads 0, read-ahead reads 0.
Table 'Четвертая фирма$Sales Line'. Scan count 1, logical reads 85, physical reads 0, read-ahead reads 0.
Table 'Первая фирма$Item Journal Line'. Scan count 8, logical reads 147, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Item Journal Line'. Scan count 8, logical reads 962, physical reads 0, read-ahead reads 0.
Table 'Item'. Scan count 8, logical reads 612, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Sales Line'. Scan count 8, logical reads 2803, physical reads 0, read-ahead reads 0.
Table 'Третья фирма$Sales Line'. Scan count 8, logical reads 175, physical reads 0, read-ahead reads 0.


---------------
Статистика SET STATISTICS TIME ON
---------------

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
            
----------- 
0

(1 row(s) affected)

Table 'Первая фирма$Item Ledger Entry'. Scan count 8, logical reads 288817, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Item Ledger Entry'. Scan count 8, logical reads 107412, physical reads 0, read-ahead reads 0.
Table 'Первая фирма$Sales Line'. Scan count 8, logical reads 328, physical reads 0, read-ahead reads 0.
Table 'Четвертая фирма$Sales Line'. Scan count 1, logical reads 85, physical reads 0, read-ahead reads 0.
Table 'Первая фирма$Item Journal Line'. Scan count 8, logical reads 147, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Item Journal Line'. Scan count 8, logical reads 946, physical reads 0, read-ahead reads 0.
Table 'Item'. Scan count 8, logical reads 612, physical reads 0, read-ahead reads 0.
Table 'Вторая фирма$Sales Line'. Scan count 8, logical reads 2803, physical reads 0, read-ahead reads 0.
Table 'Третья Фирма$Sales Line'. Scan count 8, logical reads 175, physical reads 0, read-ahead reads 0.

SQL Server Execution Times:
   CPU time = 26332 ms,  elapsed time = 13946 ms.
23 авг 13, 10:07    [14745632]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
))) если вкратце то сортирует , агрегирует, соединяет множества . Вобщем, делает все, что вы ему написали делать в запросе. С дисков не читает, все в памяти в кеше.
23 авг 13, 10:12    [14745663]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Kaktus_
Member

Откуда: Ростов-на-Дону
Сообщений: 315
Как было видно из примера - он обращался к диску c:. На нем лежит tempdb. (не пинайте. Сервер резервный - там с дисков пока мало). Положил tempdb на другой диск - запустил запрос - явно видно, что к диску c: не обращается, а обращается к диску с tempdb.

Получается, что он (не очень понятно правда почему) интенсивно обращается во время запроса к tempdb.
23 авг 13, 10:26    [14745758]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Kaktus_
Как было видно из примера - он обращался к диску c:. На нем лежит tempdb. (не пинайте. Сервер резервный - там с дисков пока мало). Положил tempdb на другой диск - запустил запрос - явно видно, что к диску c: не обращается, а обращается к диску с tempdb.

Получается, что он (не очень понятно правда почему) интенсивно обращается во время запроса к tempdb.

при сортировке и соединении хешированием используется tempdb
23 авг 13, 10:33    [14745824]     Ответить | Цитировать Сообщить модератору
 Re: Практический пример использования памяти SQLServerом. С вопросом.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Kaktus_
Получается, что он (не очень понятно правда почему) интенсивно обращается во время запроса к tempdb.

Capacity Planning for tempdb
автор
Internal Objects
Internal objects are created as necessary by the SQL Server Database Engine to process SQL Server statements. Internal objects are created and dropped within the scope of a statement. Internal objects can be one of the following:
• Work tables for cursor or spool operations and temporary large object (LOB) storage.
• Work files for hash join or hash aggregate operations.
Intermediate sort results for operations such as creating or rebuilding indexes (if SORT_IN_TEMPDB is specified), or certain GROUP BY, ORDER BY, or UNION queries.
23 авг 13, 10:37    [14745859]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить