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

Откуда:
Сообщений: 122
Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql.
За чем это. Я вижу в профайлере скрипты и я подозреваю что где-то в таком запросе
exec sp_executesql N'SELECT this_.EmailID, this_.EmailAddress  
FROM Email WHERE EmailAddress = @p0',N'@p0 nvarchar(4000)',@p0=N'temp@email.com'

идет неявное преобразование типов с varchar в nvarchar или на оборот. Потому что когда я выполняю этот запрос в нормальном виде я вижу 6 логически чтений, а в профайлере я вижу 2600.
Буду рад за любую подсказку.
18 дек 14, 19:45    [17019141]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
t_e_m_a
Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql.


Да, профайлером, например.
18 дек 14, 20:47    [17019358]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
автор
Да, профайлером, например.

Дак в профайлере будет в таком же виде запрос, это запрос из профайлера.
18 дек 14, 21:18    [17019459]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
t_e_m_a
автор
Да, профайлером, например.

Дак в профайлере будет в таком же виде запрос, это запрос из профайлера.
Выполнение самого запроса тоже показывается, попробуйте поискать ещё события.
18 дек 14, 21:21    [17019476]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
alexeyvg
t_e_m_a
пропущено...

Дак в профайлере будет в таком же виде запрос, это запрос из профайлера.
Выполнение самого запроса тоже показывается, попробуйте поискать ещё события.
Правда, там вы ничего не увидите, там будет просто запрос.

Но зато можно посмотреть план; там, если есть конвертация параметра, будет написано что то вроде: CONVERT_IMPLICIT(varchar(4000),[@p0],0)

А вообще ИМХО дело не в конвертации.
Планы посмотрите, более подробный трейс, что то же должно отличаться, раз количество чтений разное.
18 дек 14, 21:31    [17019522]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
Glory
Member

Откуда:
Сообщений: 104751
t_e_m_a
идет неявное преобразование типов с varchar в nvarchar или на оборот

В каком месте ?

t_e_m_a
Потому что когда я выполняю этот запрос в нормальном виде

Чем ваш "нормальный вид" отличается от показанного здесь ?
18 дек 14, 22:01    [17019652]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
t_e_m_a
автор
Да, профайлером, например.

Дак в профайлере будет в таком же виде запрос, это запрос из профайлера.


А вы откройте профайлер, повыбирайте разные событие и посмотрите... на виды запроса.
18 дек 14, 22:05    [17019665]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
автор
Чем ваш "нормальный вид" отличается от показанного здесь ?

Под нормальным видом я имел ввиду обычный запрос который я выполняю в managment studio
SELECT * FROM MyTable
19 дек 14, 18:04    [17025033]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
автор
Правда, там вы ничего не увидите, там будет просто запрос.

Но зато можно посмотреть план; там, если есть конвертация параметра, будет написано что то вроде: CONVERT_IMPLICIT(varchar(4000),[@p0],0)

А вообще ИМХО дело не в конвертации.
Планы посмотрите, более подробный трейс, что то же должно отличаться, раз количество чтений разное.

Не нашел в профайлере планы запросов.
19 дек 14, 18:06    [17025041]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
Glory
Member

Откуда:
Сообщений: 104751
t_e_m_a
Под нормальным видом я имел ввиду обычный запрос который я выполняю в managment studio
SELECT * FROM MyTable

Ничего, что это совсем другой запрос ?
19 дек 14, 18:08    [17025050]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
Я имел ввиду что в менеджмент студии я выполняю такого вида запрос
автор
SELECT EmailID, EmailAddress
FROM Email WHERE EmailAddress = 'temp@email.com'
19 дек 14, 18:39    [17025160]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
t_e_m_a
Я имел ввиду что в менеджмент студии я выполняю такого вида запрос
автор
SELECT EmailID, EmailAddress
FROM Email WHERE EmailAddress = 'temp@email.com'
А, вот вы с чем сравниваете :-)

Сравнивайте одинаковые запросы, а не разные, разные, конечно, будут выполняться разное время.
t_e_m_a
Не нашел в профайлере планы запросов.
Планы можно посмотреть, включив событие "план выполнения".
19 дек 14, 19:48    [17025452]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
Glory
Member

Откуда:
Сообщений: 104751
t_e_m_a
Я имел ввиду что в менеджмент студии я выполняю такого вида запрос
автор
SELECT EmailID, EmailAddress
FROM Email WHERE EmailAddress = 'temp@email.com'

А что вам мешает запустить в студии
exec sp_executesql N'SELECT this_.EmailID, this_.EmailAddress  
FROM Email WHERE EmailAddress = @p0',N'@p0 nvarchar(4000)',@p0=N'temp@email.com'
19 дек 14, 19:52    [17025460]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
автор
А что вам мешает запустить в студии

Типа продебажить?
Если я просто это выполню то количество чтений будет минимальным, но когда я вижу этот запрос в профайлере, то количество чтений в 1000 раз больше.
24 дек 14, 17:43    [17047708]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
_djХомяГ
Guest
Может не в тему - это какое то сторонее приложение генерирует запросы (а ля Axapta и тд и тп) ?
24 дек 14, 18:39    [17048050]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
t_e_m_a
Member

Откуда:
Сообщений: 122
автор
Может не в тему - это какое то сторонее приложение генерирует запросы (а ля Axapta и тд и тп) ?

Это NHibernate генерирует такие запросы.
24 дек 14, 19:50    [17048337]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
Mind
Member

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

Если запрос выполнялся недавно, то можно попытаться найти его план в кэше. Например вот так.

+
DECLARE @query_text NVARCHAR(1024)
SET @query_text = '%SELECT this_.EmailID, this_.EmailAddress%FROM Email WHERE EmailAddress%'

SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET LOCK_TIMEOUT 10000

SET @query_text = REPLACE(REPLACE(@query_text, '[', '\['), '\\[', '\[')

SELECT
    cp.cacheobjtype,
    cp.objtype,
    ObjectName = DB_NAME(st.dbid) + '.' + OBJECT_SCHEMA_NAME(st.objectid, st.dbid) + '.' + OBJECT_NAME(st.objectid, st.dbid),
    DatabaseName = (select TOP 1 DB_NAME(convert(int, value)) from sys.dm_exec_plan_attributes(cp.plan_handle) WHERE attribute IN ('dbid', 'dbid_execute') and value <> 32767 ORDER BY attribute),
    cp.usecounts,
    cp.size_in_bytes,
    qs.last_execution_time,
    qp.query_plan,
    sql_text = st.text,
    cp.plan_handle
FROM sys.dm_exec_cached_plans cp
  CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st 
  CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp
  LEFT JOIN (SELECT 
                plan_handle, 
                last_execution_time = MAX(last_execution_time)
             FROM sys.dm_exec_query_stats 
             GROUP BY plan_handle) qs ON qs.plan_handle = cp.plan_handle
WHERE st.text like @query_text ESCAPE '\'
  AND st.text not like '%FBC03230-87F5-4D53-9BE4-26131E04F62E%' -- exclude itself
OPTION(MAXDOP 1, RECOMPILE)
Ну и если найдете план, то смотрите на значения параметров с которыми запрос был скомпилирован, возможно в этом проблема.
24 дек 14, 20:36    [17048475]     Ответить | Цитировать Сообщить модератору
 Re: Можно как-то посмотреть скомпилированый запрос который выполняет exec sp_executesql  [new]
Glory
Member

Откуда:
Сообщений: 104751
t_e_m_a
автор
А что вам мешает запустить в студии

Типа продебажить?
Если я просто это выполню то количество чтений будет минимальным, но когда я вижу этот запрос в профайлере, то количество чтений в 1000 раз больше.

запустить в студии, чтобы увидеть план выполнения
25 дек 14, 01:54    [17049175]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить