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

Откуда: Москва
Сообщений: 1176
автор
In order to improve performance, SQL Server introduces the concept of temporary table caching. This term is a bit confusing. It relates to temporary table allocation rather than data pages, which are cached in a buffer pool, similar to regular tables.
In a nutshell, with temporary table caching, instead of dropping the table, SQL Server truncates it, keeping two pages per index pre-allocated: one IAM and one data page. The next time the table is created, SQL Server will reuse these pages, which helps reduce the number of modifications required in the allocation map pages.


Как я понимаю, это те самые таблички в темпдб с цифровыми именами. А можно узнать, какие были исходные имена и для кого эти таблички кешились?
13 дек 15, 02:20    [18553076]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
Летят два крокодила, один зеленый, другой на север. ВОПРОС: какие были исходные имена и для кого эти таблички кешились?
13 дек 15, 03:21    [18553184]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Гавриленко Сергей Алексеевич,

Имя процедуры, для которой закешелась времянка
13 дек 15, 13:54    [18553815]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Mike_za
Имя процедуры, для которой закешелась времянка
Тогда уж не "закешелась", а в которой создалась, так ИМХО понятнее звучит.

По моему, узнать невозможно, только пытаться определить, какому коннекту она принадлежит (вроде тут были какие то способы, поищите), и анализировать вручную трейс (предварительно настроенный) для этого коннекта.
13 дек 15, 14:12    [18553865]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
alexeyvg,

Разве этот кеш завязан на коннект? Как я понял, эти времянки принадлежат плану
13 дек 15, 15:39    [18554002]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
o-o
Guest
Mike_za
alexeyvg,
Разве этот кеш завязан на коннект? Как я понял, эти времянки принадлежат плану

конечно не на коннект.
если в одной и той же сессии сперва вызвать процедуру с текущими параметрами,
а потом поменять, допустим, язык, и снова вызвать, будет создан новый план
и новые объекты уйдут в кэш.
с другой стороны, если вызвать одну и ту же процедуру одновременно из разных сессий,
можно получить столько "комплектов" объектов, сколько и сессий,
потому что даже не на "план" кэшируется, а на execution context derived from that cached plan.
Paul White
The runtime contents of a temporary object (table or variable) are obviously specific to a particular execution, so it makes sense for the cached object to be associated with execution contexts rather than the parent plan. There may also be more than one cached plan for a procedure in cache (for example due to compilations with different SET options) and each parent plan will have its own collection of execution contexts, so there can be one cached tempdb object per execution context per plan.

There does not appear to be a fixed limit on the number of these cached objects; I was able to quickly create 2,000 of them using the test procedures above and Adam Machanic’s SQL Query Stress tool running 200 threads. This is the reason for the 1 second delay in the procedure – to make sure the procedure runs for a little while so new execution contexts are generated for each execution rather than reused.

терминология и объяснение вот тут:
Temporary Table Caching Explained

я думаю, alexeyvg не о кэшируемых объектах писал, а про обычные временные таблицы.
т.е. не про первое вот отсюда, а про второе:
The cached objects themselves are visible in tempdb.sys.tables, named with a single # character followed by the 8-character hexadecimal representation of the object id. (1) This is different from the names of ordinary temporary tables, which have the user-supplied name followed by a bunch of underscores and an id. (2)
13 дек 15, 19:20    [18554533]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
o-o
я думаю, alexeyvg не о кэшируемых объектах писал, а про обычные временные таблицы.
Да, так автор же про это и говорит, разве нет?
13 дек 15, 23:13    [18555210]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
o-o,
Спасибо, уже трети раз читаю жту статью и вновь подчеркиваю новое))

автор
The highlighted section shows the table being renamed in the internal catalogue tables from the user-visible name to the internal name.

Как я понял, для временных таблиц по логу можно выцепить их имена))
Для табличных переменных уже будет сложнее)
13 дек 15, 23:24    [18555252]     Ответить | Цитировать Сообщить модератору
 Re: Кеш временных таблиц в процедурах  [new]
o-o
Guest
alexeyvg
o-o
я думаю, alexeyvg не о кэшируемых объектах писал, а про обычные временные таблицы.
Да, так автор же про это и говорит, разве нет?

вы про созданные темповые таблицы, умирающие вместе с процедурой (данные оттуда померли. нет их).
а про Mike_za то, что попадает в кэш (после выполнения процедуры 2 страницы таблицы [IAM + data page] ушли к кэш):
Paul White
Temporary objects are often created and destroyed at a high rate in production systems, so caching temporary objects can be an important optimization. The temporary object cache is just another SQL Server cache (using the general framework) though it’s entries are a bit more visible than most. The sys.dm_os_performance_counters DMV exposes a number of counters under the ‘Temporary Tables & Table Variables’ instance of the Plan Cache object. The cache is also visible through the usual cache DMVs, for example as CACHESTORE_TEMPTABLES in sys.dm_os_memory_cache_counters.

он кэширование называет кэшированием, все у него нормально с терминологией.
еще раз:
o-o
The cached objects themselves are visible in tempdb.sys.tables, named with a single # character followed by the 8-character hexadecimal representation of the object id. (1) This is different from the names of ordinary temporary tables, which have the user-supplied name followed by a bunch of underscores and an id. (2)

вы про (2), Mike_za про (1)
------------
т.е. какая нам разница, какой коннект первым вызвал эту процедуру?
Mike_za наверное хочет истребить определенные закэшированные объекты,
и создавшей их сессии давно нет, а объекты все висят.
а вот найти соответствующую процедуру, сделать ей ALTER,
вот заодно и все эти объекты прибьются.
их же может быть 10.000 на 1 процедуру,
если в процедуре 10 времянок и ее умудрились одновременно 1000 раз запустить
(там в блоге Paul White как раз описывает, как он 2000 штук получил)
14 дек 15, 00:26    [18555364]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить