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

Чем можно посмотреть из-за каких запросов происходит использование базы tempdb?
10 фев 12, 16:32    [12070804]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Использование временных таблиц (#table ##table), использование рекусивных CTE, создание индексов с SORT_IN_TEMPDB, запросы у которых в плане "... spool", дальше не помню сейчас.

А версия скуля какая?
10 фев 12, 16:39    [12070884]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Использование больших временных таблиц ?
10 фев 12, 16:40    [12070888]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
Crimean
Member

Откуда:
Сообщений: 13147
+ транзакции уровня изоляции снапшот и/или RCSI
10 фев 12, 16:40    [12070890]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
сори забыл версия.

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6001: Service Pack 1)


Использование временных таблиц (#table ##table), использование рекусивных CTE, запросы у которых в плане "... spool", дальше не помню сейчас.

такого вроде не наблюдается.

создание индексов с SORT_IN_TEMPDB

это право не знаю, обычно стараюсь создавать индексы SORT_IN_TEMPDB = OFF, но беда баз крутится много.


Может активно использоваться база tempdb если используется очень частый Insert (таблицы только с одним кластерным индексов, порядка 20 млн. вставок в день, в довесок база куда кидаются данные на вставку обычный sata ) и большое кол-во update (порядка 100 млн операций)?

И самое главное есть ли какой скрипт чтобы посмотреть кто использует tempdb?
10 фев 12, 16:50    [12070973]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
+ MARS и DML-триггеры
10 фев 12, 17:07    [12071130]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
пользуете версионность?
10 фев 12, 17:10    [12071151]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
invm
+ MARS и DML-триггеры


можно немного подробней?
10 фев 12, 17:12    [12071163]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
SanyL
пользуете версионность?


можно чуть подробней? как и что?
10 фев 12, 17:13    [12071169]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
ну вообщето если используется версионность - то для хранения версий активно используется tempdb
10 фев 12, 17:14    [12071183]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
а подробнее посмотрите BOL -> Row Versioning
10 фев 12, 17:15    [12071188]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
When either the READ_COMMITTED_SNAPSHOT or ALLOW_SNAPSHOT_ISOLATION database options are ON, logical copies (versions) are maintained for all data modifications performed in the database. Every time a row is modified by a specific transaction, the instance of the Database Engine stores a version of the previously committed image of the row in tempdb. Each version is marked with the transaction sequence number of the transaction that made the change. The versions of modified rows are chained using a link list. The newest row value is always stored in the current database and chained to the versioned rows stored in tempdb.
10 фев 12, 17:16    [12071202]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
спасибо. да для одной базы использовался ALLOW_SNAPSHOT_ISOLATION

правда смена параметров, не принесла заметных изминений.


подскажите можно ли как то запросом отловить кто активно использует tempdb?
10 фев 12, 18:03    [12071606]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
_tempdb_
спасибо. да для одной базы использовался ALLOW_SNAPSHOT_ISOLATION

правда смена параметров, не принесла заметных изминений.


подскажите можно ли как то запросом отловить кто активно использует tempdb?



ток вы отключатьто не торопитесь... а то малоли что... а уже тяпница и вечер...



на счет использования tempdb попробуйте посмотреть вьюхи:
sys.dm_exec_sessions
sys.dm_exec_requests


возможно поможет...
10 фев 12, 18:08    [12071640]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
спасибо буду смотреть

ну теперь зато на вскидку знаю что нагрузка скорее всего не из-за базы лога
10 фев 12, 18:17    [12071696]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
_tempdb_
ну теперь зато на вскидку знаю что нагрузка скорее всего не из-за базы лога


из-за чего?
10 фев 12, 18:20    [12071711]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
вначале проверил на уровне настроект. потом просто прикрыл на время все запросы к базе логов. нагрузка упала но не сильно, опять таки база tempdb продолжает также активно использоватся.

еще вопрос - насколько можно верить монитору активности в 2008 SQL сервере? так как согласно ему происходит выполнение запросов по некоторым БД больше чем это возможно в принципе.
10 фев 12, 18:25    [12071739]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
полагаю ему верить можно - но не пользовался и не пользуюсь...
10 фев 12, 18:27    [12071747]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
а триггеры никак на это не могут влиять?
10 фев 12, 22:19    [12072713]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
SanyL
_tempdb_
спасибо. да для одной базы использовался ALLOW_SNAPSHOT_ISOLATION

правда смена параметров, не принесла заметных изминений.


подскажите можно ли как то запросом отловить кто активно использует tempdb?



ток вы отключатьто не торопитесь... а то малоли что... а уже тяпница и вечер...



на счет использования tempdb попробуйте посмотреть вьюхи:
sys.dm_exec_sessions
sys.dm_exec_requests


возможно поможет...

Не поможет.
Гуглите: sp_WhoIsActive
Или вот попроще вариант:

SELECT
  tsu.internal_page_count/128 AS internal_size_current_MB,
  tsu.user_page_count/128 AS user_size_current_MB,  
  tsu.internal_alloc_page_count/128 AS internal_alloc_MB,
  tsu.user_alloc_page_count/128 AS user_alloc_MB,    
  r.session_id,
  r.request_id,
  r.start_time,
  s.[host_name],
  s.program_name,
  s.login_name,
	DB_NAME(r.database_id) as db_name,
  CAST('<?text --'+CHAR(13)+CHAR(10)+substring(qt.text, (r.statement_start_offset/2)+1 , case r.statement_end_offset when -1 then 2147483647 else ((r.statement_end_offset - r.statement_start_offset)/2) + 1 end ) + '--?>' as XML) as sql_text,
  CAST(qp.query_plan AS XML) AS query_plan,
  r.granted_query_memory,
  r.cpu_time,
  r.reads,
  r.writes,
  r.logical_reads,
  r.statement_start_offset,
  r.statement_end_offset  
FROM sys.dm_exec_requests as r
  INNER JOIN
  (  
    SELECT
      tsu.session_id, 
      tsu.request_id,
      SUM(tsu.internal_objects_alloc_page_count - tsu.internal_objects_dealloc_page_count) internal_page_count,
      SUM(tsu.user_objects_alloc_page_count - tsu.user_objects_dealloc_page_count) user_page_count,
      SUM(tsu.internal_objects_alloc_page_count) internal_alloc_page_count,
      SUM(tsu.user_objects_alloc_page_count) user_alloc_page_count  
    FROM sys.dm_db_task_space_usage tsu
    WHERE tsu.internal_objects_alloc_page_count > 0 or tsu.user_objects_alloc_page_count > 0
    GROUP BY tsu.session_id, tsu.request_id
  ) tsu ON r.session_id = tsu.session_id and r.request_id = tsu.request_id
  outer apply sys.dm_exec_sql_text(r.sql_handle) qt
  outer apply sys.dm_exec_text_query_plan(r.plan_handle, r.statement_start_offset, r.statement_end_offset) qp
  LEFT JOIN sys.dm_exec_sessions as s ON s.session_id = r.session_id
WHERE r.status IN ('running', 'runnable', 'suspended')
  and r.session_id <> @@SPID

internal_size_current_MB - hash, sort, spool
user_size_current_MB - временные объекты явно созданные пользователем, @, #, ##

Это для текущих выполняющихся задач. Можно сделать подобное для сессий через sys.dm_db_session_space_usage. Короче допиливайте под свои нужды.
11 фев 12, 00:46    [12073205]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL активно использует tempdb  [new]
_tempdb_
Guest
Mind,

за скрипт спасибо, sp_WhoIsActive тоже погуглю. теперь видно куда копать.
13 фев 12, 13:47    [12081324]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить