Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
Jun 28 2012 08:36:30
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Коллеги, не могу понять, почему при исполнении запроса из microsoft management studio

Параллельный план срабатывает, а при запуске такого же запроса, через JDBC - нет.

Запрос по снепшоту зеркала, параллелизм на сервере поставил 6, стоимость 3.

OPTION (Maxdop 8) срабатывает только для из microsoft management studio - оцениваю, что скорость отработки в два раза увеличивается.

Скрипт:

+
select
SF_PHONETYPE."Hjid" as C1_HJID,
SF_PHONETYPE.INFOSOURCES as C2_INFOSOURCES,
SF_PHONETYPE.EXTENSION as C3_EXTENSION,
SF_PHONETYPE.NUM as C4_NUM,
SF_PHONETYPE.PHONETYPE as C5_PHONETYPE,
SF_PHONETYPE.PhoneTypes_PHONE_Hjid as C6_PHONETYPES_PHONE_HJID,
SF_PHONETYPE.PhoneTypes_PHONE_Hjindex as C7_PHONETYPES_PHONE_HJINDEX
from (

select
SF_PHONETYPES.Hjid as Hjid
from (cr_rpt_cons_snp.dbo.SF_SINGLEFORMATType as SF_SINGLEFORMATTYPE INNER JOIN (cr_rpt_cons_snp.dbo.SF_MainType as SF_MAINTYPE INNER JOIN ((((cr_tutdf_cons_snp.dbo.GROUP_REQUEST as GROUP_REQUEST INNER JOIN cr_tutdf_cons_snp.dbo.CONNECTOR_DATA_REQUEST as CONNECTOR_DATA_REQUEST ON GROUP_REQUEST.ID=CONNECTOR_DATA_REQUEST.GROUP_REQUEST_ID) INNER JOIN cr_tutdf_cons_snp.dbo.CONNECTOR_DATA as CONNECTOR_DATA ON CONNECTOR_DATA_REQUEST.CONNECTOR_DATA_ID=CONNECTOR_DATA.ID) INNER JOIN cr_rpt_cons_snp.dbo.SF_ConnectorDataDetailType as SF_CONNECTORDATADETAILTYPE ON CONNECTOR_DATA.ID=SF_CONNECTORDATADETAILTYPE.CONNECTORDATAID) INNER JOIN cr_rpt_cons_snp.dbo.SF_ConnectorDataDetailsType as SF_CONNECTORDATADETAILSTYPE ON SF_CONNECTORDATADETAILTYPE.ConnectorDataDetailsType_CON_1=SF_CONNECTORDATADETAILSTYPE.Hjid) ON SF_MAINTYPE.CONNECTORDATADETAILS=SF_CONNECTORDATADETAILSTYPE.Hjid) ON SF_SINGLEFORMATTYPE.MAIN=SF_MAINTYPE.Hjid) INNER JOIN cr_rpt_cons_snp.dbo.SF_PhoneTypes as SF_PHONETYPES ON SF_SINGLEFORMATTYPE.PHONES=SF_PHONETYPES.Hjid
where (1=1)

And (GROUP_REQUEST.CREATED BETWEEN CONVERT(datetime, '2015-12-01 00:00:00', 120) and CONVERT(datetime, '2015-12-02 00:00:00', 120))


) as DELTA_CR_CLIENTS_PHONES INNER JOIN cr_rpt_cons_snp.dbo.SF_PhoneType as SF_PHONETYPE ON DELTA_CR_CLIENTS_PHONES.Hjid=SF_PHONETYPE.PhoneTypes_PHONE_Hjid
where (1=1) OPTION (MAXDOP 6)


К сообщению приложен файл (plan.rar - 7Kb) cкачать
15 дек 15, 13:27    [18562367]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А вы уже посмотрели текст запроса, который серверу посылает ваш JDBC?
15 дек 15, 13:29    [18562383]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Нельзя заставить оптимизатор использовать праллелизм в запросе.
Можно заставить не использовать.
15 дек 15, 13:29    [18562390]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
Гавриленко Сергей Алексеевич,

Ну да в профайлере в SPCASHEHIT и StmtStarting, запрос идентичен приведенному. Но план другой(((...
15 дек 15, 13:38    [18562458]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
tsdos,

У вас написано maxdop 8 (и в плане planMSSQL тоже 8), а в тексте запроса, который вы тут привели - maxdop 6.

Одним из факторов, когда сервер выбирает параллельный план, то что он дешевле последовательного. Он становится дешевле за счет уменьшения стоимости некоторых операторов план путем деления их обычной стоимости, на Estimated Degree of Parallelism (который равен половине от доступных cpu). Но в то же время дороже, за счет издержек по управлению параллелизмом. Видимо, когда делит на 4, параллельный план получается выгоднее, когда на 3, последовательный выгоднее (или также).

Иными словами, сервер считает что выполнять запрос с maxdop 8 выгоднее параллельно, а maxdop 6 - игра не стоит свеч.

Так что для начала, тот запрос который выполняется через JDBC тоже выполните с MAXDOP 8, потом уже сравнивайте, что получится. А то сейчас, судя по вашему тексту, запросы поставлены в разные условия.
15 дек 15, 13:39    [18562469]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
Glory, снапшот на зеркале на это как-то может влиять?
15 дек 15, 13:40    [18562473]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
SomewhereSomehow,

Делал. Аналогично, не паралелится. Более того. Запрос на прошлой неделе отрабатывал за 10 минут, не в параллель теперь часами отрабатывает и никак не закончится? Проблем с железом нет. А если запускать из microsoft management studio с любого хоста, все за 2 минуты отрабатывает.
15 дек 15, 13:46    [18562530]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
Glory
Member

Откуда:
Сообщений: 104751
tsdos
Аналогично, не паралелится.

Потому что, на план влияет не только текст запроса, но и установки соедиения, например
15 дек 15, 13:51    [18562558]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
Glory,

То, что сейчас нашел в трассировке, большего не нашел. Кроме Degree off Parrallelism - Для JDBC было что-то - 0X00000, означающее последовательное выполнение. А для microsoft management studio: 0X00008 означающее распараллеливание, но я не уверен, что это относится к параметрам подключения.

Для JDBC еще было вот это:

-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed

Set IMPLICIT_Transactions ON

Для microsoft management studio:

-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions on
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed



-- network protocol: LPC
set quoted_identifier on
set arithabort on
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed

К сообщению приложен файл. Размер - 149Kb
15 дек 15, 14:13    [18562731]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
tsdos,

У вас в плане planMSSQL в тексте запроса такие даты:
CONVERT(datetime, '2015-11-30 00:00:00', 120) and CONVERT(datetime, '2015-12-14 00:00:00', 120)


А в том тексте что вы привели, вот такие:
CONVERT(datetime, '2015-12-01 00:00:00', 120) and CONVERT(datetime, '2015-12-02 00:00:00', 120))

Хотя в планах вроде даты совпадают.

Кроме того, один оценочный план, другой действительный.

Путаница какая-то в посте.

Сделайте вот что, возьмите профайлер, включите там событие Existing Connection. Найдите там ваше JDBC подключение и посмотрите его параметры. Будет что-то вроде:
+
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed

Далее в студии откройте два окна, в одно окне добавьте все эти настройки, после этого GO, после этого ваш запрос. В другом окне просто ваш запрос. Включите в обоих "Include actual execution plan" и выполните запросы. После этого, если результаты разные, выкладывайте сюда планы в том формате как выкладывали в первом посте. Если одинаковые, ищите где у вас разница в экспериментах.
15 дек 15, 14:15    [18562742]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
SomewhereSomehow,


Огромное спасибо за совет. Попробую.
15 дек 15, 14:34    [18562890]     Ответить | Цитировать Сообщить модератору
 Re: Не включается параллелизм.  [new]
tsdos
Member

Откуда:
Сообщений: 217
tsdos,

Всем спасибо за помощь!!! Вопрос решился - сменой драйвера, все за парализовалось))).
15 дек 15, 16:13    [18563650]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить