В SQL Server 2005 один поток был выделен на раздел, когда запрос обращался к нескольким разделам. Иными словами, каждый запрос, который применялся к разделенным таблицам, не мог выполняться параллельно. (Определение параллельных запросов.) Это может привести к проблемам производительности в системах с несколькими центральными процессорами, если схема таблицы содержит меньше разделов, чем существует центральных процессоров. В этом случае не все CPU будут использованы для обработки запроса.
SQL Server 2008 предоставляет две стратегии выполнения запросов для параллельных планов запросов к разделенным объектам: стратегия одного потока на раздел и стратегия нескольких потоков на раздел.
В стратегии одного потока на раздел оптимизатор запросов назначает один поток на каждый раздел для выполнения параллельного плана запроса, который обращается к нескольким разделам. (Это соответствует поведению SQL Server 2005 и является значением по умолчанию для SQL Server 2008.) Один раздел не разделяется между несколькими потоками, но несколько разделов могут выполняться параллельно.
Стратегия нескольких потоков на раздел назначает несколько потоков на раздел, независимо от количества разделов, к которым осуществляется доступ. Иными словами, все доступные потоки запускаются к первому разделу; он сканируется в первую очередь. Когда раздел достигает конца раздела, он переключается на следующий раздел и начинает его сканирование. При переходе на другой раздел поток не ждет, когда другие потоки завершат свою работу.
Решение о том, какую выбрать стратегию, зависит от вашего оборудования. Первая стратегия рекомендуется, когда операции ввода/вывода в запросах ограничены и в них включено больше разделов, чем уровень параллелизма. Вторая стратегия рекомендуется в следующих случаях:
♦ разделы распределены равномерно среди многих дисков;
♦ ваши запросы используют меньшее количество разделов, чем количество доступных потоков;
♦ размеры разделов значительно отличаются в пределах одной таблицы. Улучшения, связанные с информацией разделения
SQL Server 2008 предоставляет следующую улучшенную информацию разделения:
♦ необязательный атрибут, называемый Partitioned, который указывает, что оператор (поиска, сканирования, добавления, изменения или удаления) выполняется по отношению к разделенной таблице;
♦ улучшенная информация, связанная с вычисляемым столбцом partitioniD;
♦ итоговая информация, которая предоставляет общее количество обращений к разделам.