Как я могу сказать, что * IF * AND * WHAT * разделы доступны - sql server 2008 db engine - PullRequest
2 голосов
/ 29 октября 2010

Настройка

  • Стоимость порога параллелизма: 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 делает то, что, как он говорит, он будет делать, а именно: читать только ту часть таблицы, которая, по его мнению, необходима для повторного запроса.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Получил довольно хороший ответ здесь: http://www.sqlservercentral.com/Forums/Topic1064946-391-1.aspx#bm1065048

0 голосов
/ 29 октября 2010

а) Мне неизвестен какой-либо способ определения хода выполнения запроса во время его выполнения.Может быть, что-то привередливое с запирающими и запирающими видами системы, но я в этом сомневаюсь.(Я, увы, недостаточно знаком с SSAS, чтобы проводить параллели между ними.)

b) SQL, вероятно, будет использовать параллелизм при работе с несколькими разделами в одной таблице, и в этом случае вы увидите параллельную обработку"токены" в вашем плане запроса.Однако, если по какой-либо причине параллелизм не вызывается, но несколько разделов должны быть прочитаны, они будут прочитаны без использования параллелизма.

d) Другая вещь, которую, возможно, невозможно сделать.При очень контролируемых обстоятельствах вы можете использовать системный монитор (Perfmon) для отслеживания загрузки процессора или, возможно, чтения с диска во время выполнения запроса.Это не поможет, если сервер выполняет другую работу, или данные находятся в памяти (буферный кеш), и поэтому могут иметь ограниченное использование.

c) Что вы на самом деле пытаетесьВычислять?К каким разделам (если есть) обращаются пользователи в течение определенного периода времени?SQL генерирует «умный» план запроса?Без подробностей о данных, структуре и запросе сложно придумать совет.

...