Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8   вперед  Ctrl      все
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
КонстантинО,
Если галочку поставить в фильтрах ("Исключить строки без значений") то соответственно остальные позиции, по которым CPU мене 500 или вообще не отражается не выводятся. Я прав?
18 мар 16, 14:22    [18948330]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Konst_One
Member

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

почитайте для начала как пользоваться профайлером
https://technet.microsoft.com/ru-ru/library/ms190793(v=sql.105).aspx
18 мар 16, 14:22    [18948334]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Glory
Member

Откуда:
Сообщений: 104751
КонстантинО
В трассировке стоит:

Я понимаю, что там стоит. Вопрос был, а почему там "стоит" только это.
18 мар 16, 14:22    [18948335]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
Glory,
Команды? Всмысле от приложения серверу?
Ну поиск я осуществлял абсолютно такого же наименования. Вся разница в том что один комп XP SP3 и послабже процессором и памятью... а второй помощнее. Клиентское ПО абсолютно одинаково, юзер и там и там с админскими правами. Накладная в которую добавляется наименование одна и та же, база в конце-концов одна и та же...
18 мар 16, 14:25    [18948349]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

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

Подскажите что поставить, какие события отметить
18 мар 16, 14:26    [18948355]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
КонстантинО,

Пойду читать указанные источники...
18 мар 16, 14:27    [18948361]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Glory
Member

Откуда:
Сообщений: 104751
КонстантинО
Пойду читать указанные источники...

Неужели.
А может еще позадаете "наводящие вопросы" ?

Сообщение было отредактировано: 18 мар 16, 14:29
18 мар 16, 14:28    [18948369]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Nosystem
Member

Откуда:
Сообщений: 22
КонстантинО
КонстантинО,

Теперь перенастроил фильтр по машине FDWS.
Результат того же поиска

CPU от 529 до 950 Duration от 309 до 575 Reads от 38394 до 78727....

Что за ????? Почему такая разница огромная-то?

Можно чуть подробней что за "Теперь перенастроил фильтр по машине FDWS" - вы в фильтре можете фильтровать по hostname компа? У вас прога цепляется к серверному варианту или напрямую к ms sql?
18 мар 16, 14:29    [18948372]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
Nosystem
КонстантинО
КонстантинО,

Теперь перенастроил фильтр по машине FDWS.
Результат того же поиска

CPU от 529 до 950 Duration от 309 до 575 Reads от 38394 до 78727....

Что за ????? Почему такая разница огромная-то?


Можно чуть подробней что за "Теперь перенастроил фильтр по машине FDWS" - вы в фильтре можете фильтровать по hostname компа? У вас прога цепляется к серверному варианту или напрямую к ms sql?


В профайлере поставил фильтр Hostname "похожее на" и указал нужную мне машину. Чтобы исключить трассировку запросов от остальных машин. В клиентской программе есть файл road.tps в котором указывается адрес, имя базы, пользователь, пароль - так что да, программа цепляется напрямую к sql если я не ошибаюсь
18 мар 16, 14:37    [18948418]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Nosystem
Member

Откуда:
Сообщений: 22
КонстантинО
Nosystem
пропущено...


Можно чуть подробней что за "Теперь перенастроил фильтр по машине FDWS" - вы в фильтре можете фильтровать по hostname компа? У вас прога цепляется к серверному варианту или напрямую к ms sql?


В профайлере поставил фильтр Hostname "похожее на" и указал нужную мне машину. Чтобы исключить трассировку запросов от остальных машин. В клиентской программе есть файл road.tps в котором указывается адрес, имя базы, пользователь, пароль - так что да, программа цепляется напрямую к sql если я не ошибаюсь

шел 21 век(((. Простите за флуд. Не сдержался.
18 мар 16, 14:45    [18948487]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
Вам надо исключить проблемы с сетью.
Убедитесь, что ежедневная перестройка индексов длится не 20 часов. Ну вообще, что там с Джобами?

Также обратите внимание на вот эти таблицы:

select [name] from oglf2012.sys.tables where object_id in (357576312, 1314103722, 421576540, 479340772)
select [name] from Store2012.sys.tables where object_id in (421576540, 479340772, 818154010, 421576540, 421576540, 818154010)

если там есть устаревшие данные, то сделайте их бекап и удалите их.
18 мар 16, 15:02    [18948635]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Nosystem
Member

Откуда:
Сообщений: 22
Я согласен с edyaN в том что надо проверить нет ли проблем с сетью. От себя добавлю, что т.к. клиентское ПО работает напрямую с SQL надо посмотреть в сторону клиентских тазиков, на сколько они нагружены при работе с прогой. В данном случае, как мне кажется, проблем с сивелем нет, да можно и нужно перестраивать индексы, может определить какие индексы еще нужны, какие удалить. Судя по видео таз FDWS отлично справляется с этой прогой, да и OZ2 неплохо работает. Остальным же очень трудно. Это может быть связано и с сетью (можно пустить ping 'sql server' -t и псмотреть как скачет джитер на тазиках - если сильно - то да, проблемы на сетевом уровне или в самих компах). Это не 1С где запросы можно переписать, чтобы они работали быстрее, как я понимаю логика зашита в саму прогу. Мой совет промониторить сеть и нагрузку на клиентских тазах. Оптимизацией одних лишь инедксов вы врядли поборете проблему. Особенно мне нравится, когда на рабочих тазах стоит куча лишнего г...а, токого как торрет и др...
18 мар 16, 15:29    [18948862]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Nosystem
Я согласен с edyaN в том что надо проверить нет ли проблем с сетью.
Когда Duration сопоставимо с CPU, это означает отсутствие проблем с сетью, дисками, блокировками и т.п.
18 мар 16, 15:53    [18949078]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
invm,
КонстантинО
Glory,
Нет. Уверен что не одно. Вот сейчас по совету Konst_One поставил фильтр в трассировке по CPU > 500 и Duration > 500,
правда в настройках сортировки поставил "Скрывать пустые строки".

С начала поиска по окончание вышло 7 строк RFC:Completed

подозреваю что это результат обработки сервером поиска наименования "оллсепт" (на каждую набранную букву он видимо подбирает наиболее подходящее значение)

Значения CPU при этом от 3307 до 3323 Duration от 3321 до 3348 Reads от 1349675 до 1358816

то есть запросы с CPU < 500 и Duration > 500 успешно отфильтровались. То есть мы по-прежнему ничего не можем сказать про источник проблем.
18 мар 16, 16:07    [18949237]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Nosystem
Member

Откуда:
Сообщений: 22
КонстантинО,

Так покажите нагрузку на клиентских тазах при выполнении поиска?
18 мар 16, 16:26    [18949401]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Nosystem
КонстантинО,

Так покажите нагрузку на клиентских тазах при выполнении поиска?
Идите лучше тренируйся вон на… на кошках.
18 мар 16, 19:25    [18950450]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
КонстантинО
Glory,

Я видимо не понимаю что и где посмотреть.
Настройте профайлер на одну конкретную клиентскую машину. Никаких фильтров по duration и cpu не надо, а то насоветуют щас. Это имело бы смысл если бы не понятно было какие запросы тормозят и нужно было бы помониторить вобщем. В вашем же случае тормозит какой то поиск по буквам, так вот нужно получить ВСЕ запросы в этот конкретный момент, а то может там приложение сотню запросов шлет по 50мс каждый.
Еще неплохо было бы добавить вот это событие в трассировку - Performance\ShowPlan XML.

После того как запустите профайлер, делайте поиски и тормозите профайлер. Я так понимаю это должно занять 5-10 секунд. После этого выкладывайте трейс сюда. Только не надо никаких файлообменников, у многих к ним доступ закрыт, ну и никаких rar-ов, только zip.

Ну и запрос, тот что вы выложили, если это из-за него тормоза, конечно уродский:
{fn UCASE( A.NAME)} на корню убивает возможность поиска по индексу.
Но это еще цветочки по сравнению вот с этим. Так криворукие рукожопы из Юнико реализовали поиск по тексту:
 {fn UCASE( A.NAME)} >= {fn UCASE(@P1)}

Для тех кто не знает SQL - поясню. Даже написав в строке поиска целиком слово 'зашибись', в результаты этого запроса все равно попадут все слова начинающиеся на и, к, л, м ... и т.д. Чисто теоритически поиск по товарам на букву "а" должен работать значительно медленне чем по товарам на букву "я". Никаких TOP я в запросе не вижу, так что есть ненулевая вероятность что все это тянется на клиента, ну и даже если предположить, что не тянется, все равно сколько придется серверу перелопатить данных впустую. Естественно ни о каких поисках по индексу мы уже не говорим.

Еще давайте скрипт вот этого view - v_KredOst.

Вердикт пока что такой - можно попробовать глянуть на план и сделать супер-заточенный индекс под этот поиск, но вероятность успеха не очень большая. В идеале вам надо нагнуть лоботрясов в Юнико чтобы они переписали этот кусок. Варианты я бы сказал у них такие:
1. Приложение должно ждать пару секунд пока пользователь не введет все слово целиком, а не слать запросы на каждую букву и тормозить в промежутках.
2. Переписать запрос, чтобы он выполнялся миллисекунды, чтобы он всегда делал поиск по индексу (если придется - захинтовать) и чтобы возвращал/обрабатывал не больше 100 строк. Тогда при быстрой сети это должно приемлимо работать.
3. Еще лучше объединить 1 и 2.
4. Загружать всю таблицу на клиента при первом запуске (или по мере необходимости), кэшировать и делать поиск уже на клиенте.

Для того чтобы их на что-то прогнуть, вам как минимум нужно заручится поддержкой вашего начальства, предоставить неопровержимые доказательства того что их код г-но и при необходимости уметь с ними поспорить. И давайте смотреть правде в глаза - вашей квалификации для этого не достаточно. Так что либо нанимайте специалиста, либо усиленно читайте книги и статьи и через пол года можно будет разговаривать.

Ну и перестаньте уже писать никому не нужные портянки с рассуждениями за жизнь и на сколько метров что от чего удалено, этим вы только напоминаете блондинку которая стучит по колесам чтобы машина завелась.
18 мар 16, 20:58    [18950862]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
Mind,
Спасибо за детальную рекомендацию. В профайлере 473 строки на всю операцию поиска. Как правильно их сюда выложить?
Если сохраняю как файл трассировки 46 Мб, если xml 64 мб...
Выкладывать по одной строчке в спойлере?
19 мар 16, 12:59    [18952805]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
КонстантинО
Как правильно их сюда выложить?
В виде зазипованного трейс-файла, выложенного на какой-нибудь файлообменник.
И не забудьте включить в трассировку ShowPlan XML.
19 мар 16, 14:09    [18952933]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

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

Сделал. Файл трассировки (46 мб) архивом zip упакован. Поиск наименования "оллсепт"
https://yadi.sk/d/SQo1PXbsqK99b - на Яндекс.Диск
19 мар 16, 14:34    [18952979]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
Mind,
v_Kred_Ost
+

SELECT B.Name, B.IsRecept, B.IsLife, B.ScanCod, C.Cod, C.Serial, C.PriceDeliver, C.PriceSale, B.Cod AS CodTMC, A.Ost, A.CodDivision, D.NNacl, D.DNacl, D.DPri,
E.ShortName, F.NameFactory, B.CodLoad, G.ShortName AS NameDivision, C.DateValid, C.Currency AS InnerScanCod, 0 AS IsFriction, 0 AS DividedPack,
C.Currency AS InnerScanCodMainOffice, G.CodOKONH AS IsMainOffice, 0 AS IsCompleted, C.QuantityPack, C.PecentNDSDeliver, C.PriceMake, C.PriceReestr,
C.DateReestr, B.PriceReestr AS PriceReestrTMC, B.DateReestr AS DateReestrTMC, B.TypeTMCID, D.Cod AS CodDoc, C.CodOrig
FROM dbo.Move AS A INNER JOIN
dbo.PDoc AS D ON D.Cod = A.CodPDoc INNER JOIN
dbo.ListDoc AS C ON C.Cod = A.Cod INNER JOIN
dbo.TMC AS B ON B.Cod = A.CodTMC LEFT OUTER JOIN
dbo.Client AS E ON E.Cod = D.Client LEFT OUTER JOIN
dbo.Factory AS F ON F.Cod = B.CodFactory LEFT OUTER JOIN
dbo.Client AS G ON G.Cod = A.CodDivision
19 мар 16, 18:25    [18953640]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
КонстантинО
Mind,
v_Kred_Ost
CTRL+A, CTRL+C, CTRL+V
Неужели так сложно скопировать текст VIEW целиком?
21 мар 16, 23:30    [18961296]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
КонстантинО,

Тот запрос что вы написали, выполняется 200 мс, он может и проблемный, но есть еще хуже. После запроса на поиск по букве в алфавитном порядке зачем то еще делается запрос по полному наименованию в порядке обратном алфавитному с кучей каких то дополнительных условий.
+ Вот собственно запрос
EXEC sp_executesql
	N'SELECT  A.NAME, A.ISRECEPT, A.ISLIFE, A.SCANCOD, A.COD, A.SERIAL, A.PRICEDELIVER, A.PRICESALE, A.CODTMC, A.OST, A.CODDIVISION, A.NNACL, A.DNACL, A.DPRI, A.SHORTNAME, A.NAMEFACTORY, A.CODLOAD, A.NAMEDIVISION, A.DATEVALID, A.INNERSCANCOD, A.ISFRICTION, A.DIVIDEDPACK, A.INNERSCANCODMAINOFFICE, A.ISMAINOFFICE, A.QUANTITYPACK, A.PECENTNDSDELIVER, A.PRICEREESTR, A.PRICEREESTRTMC, A.CODORIG, B.TMCID, B.MARKA, B.KOEFFICIENT, B.COVER, B.DIAMETR, B.LINSEKIND, B.SPH, B.CYL, B.ADDID, B.EXE, B.SIDE, B.MATERIAL, B.COLOR, B.MODEL, B.SEXY, B.ALTFIELD1, B.ALTFIELD2, C.COD, C.CODFACTORY, C.CODFARMGROUP, C.CODGORSPR, C.CODGROUP, C.CODLOAD, C.CODMEASURE, C.NAME, C.SCANCOD, C.CODSIA, C.CODPROTEK, C.CODFARMGROUPS, C.CODTORG3, C.ISEXTFORM, C.ISNOTUSE, C.TYPETMCID FROM  {oj v_KredOst A LEFT OUTER JOIN Opt_AltTMCProp B ON  A.CODTMC= B.TMCID LEFT OUTER JOIN TMC C ON  C.COD =  A.CODTMC }  WHERE ( ( A.CodDivision = 9) )  AND  ( {fn UCASE( A.NAME)} <= {fn UCASE(@P1)} )  AND (  ( {fn UCASE( A.NAME)} < {fn UCASE(@P2)} )  OR (  (  A.NAME <= @P3 )  AND (  (  A.NAME < @P4 )  OR (  (  A.COD <= @P5 )  AND (  (  A.COD < @P6 )  OR (  (  A.ISFRICTION <= @P7 ) )))))) ORDER BY {fn UCASE( A.NAME)} DESC,  A.NAME DESC,  A.COD DESC,  A.ISFRICTION DESC',
	N'@P1 varchar(80),@P2 varchar(80),@P3 varchar(80),@P4 varchar(80),@P5 int,@P6 int,@P7 int',
	'Облепиховое масло 0.5г №10 суппоз.ректал.','Облепиховое масло 0.5г №10 суппоз.ректал.','Облепиховое масло 0.5г №10 суппоз.ректал.','Облепиховое масло 0.5г №10 суппоз.ректал.',6449703,6449703,0
+ Он же отформатированный
SELECT A.NAME, A.ISRECEPT, A.ISLIFE, A.SCANCOD, A.COD, A.SERIAL, A.PRICEDELIVER, A.PRICESALE, A.CODTMC, A.OST, A.CODDIVISION, A.NNACL, A.DNACL, A.DPRI, A.SHORTNAME, A.NAMEFACTORY, A.CODLOAD, A.NAMEDIVISION, A.DATEVALID, A.INNERSCANCOD, A.ISFRICTION, A.DIVIDEDPACK, A.INNERSCANCODMAINOFFICE, A.ISMAINOFFICE, A.QUANTITYPACK, A.PECENTNDSDELIVER, A.PRICEREESTR, A.PRICEREESTRTMC, A.CODORIG, B.TMCID, B.MARKA, B.KOEFFICIENT, B.COVER, B.DIAMETR, B.LINSEKIND, B.SPH, B.CYL, B.ADDID, B.EXE, B.SIDE, B.MATERIAL, B.COLOR, B.MODEL, B.SEXY, B.ALTFIELD1, B.ALTFIELD2, C.COD, C.CODFACTORY, C.CODFARMGROUP, C.CODGORSPR, C.CODGROUP, C.CODLOAD, C.CODMEASURE, C.NAME, C.SCANCOD, C.CODSIA, C.CODPROTEK, C.CODFARMGROUPS, C.CODTORG3, C.ISEXTFORM, C.ISNOTUSE, C.TYPETMCID
FROM {oj v_KredOst A
LEFT OUTER JOIN Opt_AltTMCProp B ON A.CODTMC= B.TMCID
LEFT OUTER JOIN TMC C ON C.COD = A.CODTMC }
WHERE ((A.CodDivision = 9))
  AND ({fn UCASE(A.NAME)} <= {fn UCASE(@P1)})
  AND (({fn UCASE(A.NAME)} < {fn UCASE(@P2)})
       OR ((A.NAME <= @P3)
           AND ((A.NAME < @P4)
                OR ((A.COD <= @P5)
                    AND ((A.COD < @P6)
                         OR ((A.ISFRICTION <= @P7)))))))
ORDER BY {fn UCASE(A.NAME)} DESC, A.NAME DESC, A.COD DESC, A.ISFRICTION DESC


Я его переписал с sp_cursorprepexec на sp_executesql чтобы можно было выполнить. Выполняется он целых 3 секунды. Зачем они это делают и почему он так странно написан - это на совести разрабов, и сами мы поменять ничего в любом случае не можем. Все что можно сделать это создать индекс. У меня есть два варианта:
-- Этот более универсальный, и должен заработать 100%, но он будет заниматься больше места.
CREATE NONCLUSTERED INDEX IX_Move_DebKred_CodDivision_CodTMC_Ost ON	dbo.[Move] (DebKred, CodDivision, CodTMC, Ost)
INCLUDE(CodPDoc, Cod) 

-- Этот полегче из-за фильтра, но не факт что будет использоваться, и вероятность что он пригодится другим запросам - минимальна.
CREATE NONCLUSTERED INDEX FIX_Move_CodTMC_CodDivision ON dbo.[Move] (CodTMC, CodDivision)
INCLUDE(CodPDoc, Cod, Ost) 
WHERE (Ost > 0 AND DebKred=1)

Если у вас есть тестовый сервер, то попробуйте по очереди создать один или второй и запустить запрос, если только продакшн - создавайте первый и смотрите что получится. Хуже чем сейчас не должно стать в любом случае. Возможно что 1-ый запрос, тот что выполняется 200 мс, тоже станет чуточку быстрее.

Если кому еще интересно посмотреть - актуальный план прикрепил.

К сообщению приложен файл (Ollsept3.SQLPlan - 146Kb) cкачать
21 мар 16, 23:54    [18961371]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
Mind,
Есть тестовый сервер. Сегодня попробую погонять
22 мар 16, 05:57    [18961684]     Ответить | Цитировать Сообщить модератору
 Re: Уважаемые! прошу помочь новичку разобраться  [new]
КонстантинО
Member

Откуда:
Сообщений: 75
КонстантинО,
Приболел и домашние дела отвлекли. Поставил на тестовой базе предложенный индекс. Визуально у пользователей разницы нет. Запускали два экземпляра ПО одновременно на рабочую и тестовые базы - поиск идентичен по времени. Но выявилась такая картина. При ручном перезапуске службы mssqlserver не стартует связанная с ней Агент SQL Server (т.е. не работают планы обслуживания, бэкапы и т.д.) и тогда скорость работы с базами ощутимо выше.
27 мар 16, 08:31    [18983107]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить