Настройка
- Стоимость порога параллелизма: 5
- Макс. Степень параллелизма: 4
- Количество процессоров: 8
- SQL Server 2008 10.0.2.2757
- У меня есть запрос со многими объединениями, множеством записей.
- Дизайн - звезда. (Центральная таблица с фкс к справочным таблицам)
- Центральная таблица разбита на соответствующий столбец даты.
- Схема разбиения разбита по дням
- Данные очень хорошо разбиты по схеме секционирования - судя по сравнению размеров файлов в файловых группах, назначенных для схемы секционирования
- Запрашиваемым запросам установлен предикат для многораздельного столбца. например, (cs.dte> = @min_date и cs.dte <@max_date) </li>
- Значения параметров даты разделены на сутки @ полночь, так что 2010-02-01, 2010-02-02
- Расчетный план запроса не показывает параллелизма
a) Этот вопрос относится к Sql Server 2008 Database Engine. Когда запрос в движке OLTP запущен, я хотел бы увидеть / получить представление, которое можно получить при профилировании запроса SSAS с использованием события Progress End - где можно увидеть что-то вроде «Закончено чтение PartititionXYZ».
b) если предполагаемый план запроса или фактический план запроса не показывает параллельной обработки, означает ли это, что все разделы будут / были проверены / прочитаны? * То, что я пытался сказать здесь, было - просто потому что я не вижу параллелизма в плане запроса, который не гарантирует, что запрос не затрагивает несколько разделов - верно? Или - существует ли прочная связь между параллелизмом и доступом к # разделам?
в) предложения? Есть ли еще информация, которую я должен предоставить?
d) как я могу узнать, обрабатывается ли запрос параллельно без просмотра @ фактического плана запроса? * Я действительно заинтересован в этом, только если это поможет определить, какие разделы используются.
Добавлено 10 ноября
Попробуйте это:
- Создайте запросы, которые должны ударить 1, 3 и все ваши разделы
- Откройте окно запроса SSMS и выполните
SET SHOWPLAN_XML ON
- Запускать каждый запрос по одному в этом окне
- Каждый прогон будет отбрасывать кусок XML
- Сравните эти результаты XML (я использую инструмент сравнения текста «CompareIt», но подойдет любой аналогичный инструмент)
Вы должны увидеть, что планы выполнения существенно отличаются. В моих запросах «3» и «Все» есть фрагмент текста, помеченный как «ConstantScan», в котором есть запись для (соответственно) 3 и всех разделов в таблице, и этот раздел отсутствует для запроса «1 раздел» , Я использую это, чтобы сделать вывод, что да, действительно, SQL делает то, что, как он говорит, он будет делать, а именно: читать только ту часть таблицы, которая, по его мнению, необходима для повторного запроса.