У нас є процес, який формує звіт про інвентаризацію. На стороні клієнта процес розбиває настроювану кількість робочих потоків для створення фрагмента даних для звіту, який відповідає одному сховищу з багатьох (потенційно тисячі, як правило, десятки). Кожен робочий потік викликає веб-сервіс, який виконує збережену процедуру.
Процес бази даних для обробки кожного фрагмента збирає купу даних у # тимчасову таблицю. В кінці кожного фрагменту обробки дані записуються до постійної таблиці в tempdb. Нарешті, наприкінці процесу один потік на стороні клієнта запитує всі дані з постійної таблиці tempdb.
Чим більше користувачів, які працюють із цим звітом, тим повільніше він стає. Я проаналізував активність у базі даних. Одного разу я побачив 35 окремих запитів, всі заблоковані в один момент процесу. Усі ці SPID мали близько 50 мс очікування типу LATCH_EX
ресурсу METADATA_SEQUENCE_GENERATOR (00000010E13CA1A8)
. Один SPID має цей ресурс, а всі інші блокують. Я не знайшов нічого про цей ресурс очікування у веб-пошуку.
У таблиці tempdb, яку ми використовуємо, є IDENTITY(1,1)
стовпець. Чи очікують ці SPID-адреси в стовпці Ідентифікація? Які методи можна використати для зменшення чи усунення блокування?
Сервер є частиною кластера. На сервері працює 64-розрядна версія SQL Server 2012 Standard Edition SP1 для 64-розрядних Windows 2008 R2 Enterprise. Сервер має 64 ГБ оперативної пам’яті та 48 процесорів, але база даних може використовувати лише 16, оскільки це стандартне видання.
(Зауважте, що я не в захваті від дизайну використання постійної таблиці в tempdb для зберігання всіх цих даних. Зміна цього буде цікавою технічною та політичною проблемою, але я відкритий для пропозицій.)
ОНОВЛЕННЯ 23.04.2013
Ми відкрили справу підтримки з Microsoft. Я буду постійно оновлювати це питання, коли ми дізнаємось більше.
ОНОВЛЕННЯ 5.10.2013
Інженер підтримки SQL Server погодився, що очікування було викликано стовпцем Ідентифікатор. Видалення ідентичності усунуло очікування. Ми не могли дублювати проблему на SQL 2008 R2; це сталося лише в SQL 2012.