ВИПРАВЛЕННЯ: Проблема продуктивності застосунку під час запиту посилається на тимчасових таблиць, створені під час сеансу у SQL Server 2008 і SQL Server 2008 R2

Застосовується до: SQL Server 2008 R2SQL Server 2008

Корпорація Майкрософт поширює виправлень, Microsoft SQL Server 2008 R2. в одному завантажуваному файлі. Через те, що ці виправлення сукупні, кожен новий пакет, містить усі поточні виправлення, і усі виправлення безпеки, що входили до складу попередніх SQL Server 2008 R2 виправити, випуск.

Ознаки


Розглянемо таку ситуацію:
  • Застосунок запускається на запит, який посилається на кілька тимчасових таблиць, у Microsoft SQL Server 2008 і Microsoft SQL Server 2008 R2.. Тимчасових таблиць, які створюються під час сеансу замість у збереженій процедурі.
  • План для запиту, кешування.
  • Багато користувачів, запустіть одного запиту в середовищі дуже одночасних. Наприклад, багато користувачів, використовуйте застосунок, який працює такий запит:
    create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go
У цьому випадку застосунок, виникає проблем із продуктивністю.Примітка. Щоб отримати додаткові відомості про те, як визначити цю проблему див. розділ "Додаткові відомості".

Причина


Ця проблема виникає в тому, що запит планів буде вставлено в кешу в одному геш-сегмент пам'яті для кожного користувача, коли ж текст запиту. Під час створення великої кількості планів є обговорювали до самого сегмент пам'яті (також відомий як геш мережа), час, щоб переглянути плану в кеші значно збільшується, а також можуть виникнути проблеми з продуктивністю. Крім того, робочі потоки, можуть виникнути серйозні-блокування з очікуванням твердження та інші теми, які впливає під час цих робочі потоки, не виконувати дає правильний планувальник.

Спосіб вирішення


Примітка. Наразі доступне оновлення для SQL Server 2008 R2. SQL Server 2008 див. розділ "Виправлення помилок", щоб вирішити цю проблему.

Відомості про Сукупне оновлення

SQL Server 2008 R2 з пакетом оновлень 1

Виправлення для цієї проблеми була випущена у накопичувальне оновлення 1 для SQL Server 2008 R2 пакет оновлень 1. Щоб отримати додаткові відомості про те, як отримати цей пакет накопичувальне оновлення клацніть номер статті в базі знань Microsoft Knowledge Base:
2544793 Сукупний пакет оновлень 1 для SQL Server 2008 R2 пакет оновлень 1
Примітка. Оскільки ці збірки сукупні, кожен новий пакет, містить усі виправлення, і усі виправлення безпеки, що входили до складу попередніх SQL Server 2008 R2 виправити, випуск. Корпорація Майкрософт рекомендує, що ви вважаєте, що застосування останньому випуску виправити, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:
2567616 У SQL Server 2008 R2 збірки, які були надані після випуску SQL Server 2008 R2 пакет оновлень 1

SQL Server 2008 R2

Виправлення для цієї проблеми, спочатку було випущено в сукупних оновлень 7. Щоб отримати додаткові відомості про те, як отримати цей пакет накопичувальне оновлення для SQL Server 2008 R2 клацніть номер статті в базі знань Microsoft Knowledge Base:
2507770 Сукупний пакет оновлень 7 для SQL Server 2008 R2
Примітка. Оскільки ці збірки сукупні, кожен новий пакет, містить усі виправлення, і усі виправлення безпеки, що входили до складу попередніх SQL Server 2008 R2 виправити, випуск. Корпорація Майкрософт рекомендує, що ви вважаєте, що застосування останньому випуску виправити, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:
981356 У SQL Server 2008 R2 збірки, які були надані після випуску SQL Server 2008 R2

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Спосіб вирішення


Для тимчасового усунення цієї проблеми у SQL Server 2008 і SQL Server 2008 R2, переміщення, посилання на будь-який тимчасових таблиць всередині, збережені процедури.

Додаткові відомості


Щоб отримати додаткові відомості про те, як створювати та змінювати таблиці основи відвідайте такий веб-сайт MSDN:Блокування з очікуванням твердження, можна визначити sys.dm_os_spinlock_stats подання динамічного керування (DMV), який має високу твердження на SOS_CACHESTORE на блокування з очікуванням. Визначити цю проблему, запустіть на запит, приблизно такого вигляду:
select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount desc
За таких умов під час виконання цього запиту, можуть виникнути проблеми з продуктивністю:
  • Цей запит, генерує текст запиту.
  • Кількість ж, на основі цього коду є великий.Примітка. Велика кількість для одного, на основі цього коду , як правило, більше 1000.
  • Запити посилання на тимчасових таблиць