Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Спасибо.
18 июн 13, 18:27    [14449886]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Mikhail Tchervonenko,

в рамках своей сессии конечно.
18 июн 13, 18:37    [14449930]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
в рамках своей сессии конечно.

В рамках своей сессии последним запросом будет запрос на получение последнего запроса.
18 июн 13, 18:41    [14449956]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory,

Тогда в рамках определённой пользовательской базы. Думаю запрос о последнем запросе обращается с системным таблицам за пределами текущей пользовательской базы, или нет?
18 июн 13, 18:50    [14450021]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
Думаю запрос о последнем запросе обращается с системным таблицам за пределами текущей пользовательской базы, или нет?

sys.dm_exec_requests
18 июн 13, 18:54    [14450046]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory
Mikhail Tchervonenko
Думаю запрос о последнем запросе обращается с системным таблицам за пределами текущей пользовательской базы, или нет?

sys.dm_exec_requests
Это сведения о выполняющихся запросах в данный момент. А мне нужен был последний уже выполненный запрос в рамках моей сессии.
Слепил такой запрос:
SELECT TOP 1 total_worker_time/execution_count AS [Avg CPU Time],
    SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
         ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
WHERE UPPER(st.text) like 'SELECT %'
ORDER BY  creation_time DESC;

Запрос возвращает время выполнения и текст селекта. Одна вешь тут мне не нравится это Like но его можно пережить.
Проблема другая, sys.dm_exec_query_stats не имеет номера сессии, а мне нужны запросы из моей сессии, как тут выкрутиться пока не нашел.
21 июн 13, 13:16    [14465321]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
sys.dm_exec_query_stats - Returns aggregate performance statistics for cached query plans.

Mikhail Tchervonenko
а мне нужны запросы из моей сессии, как тут выкрутиться пока не нашел.

Писать все выполняемые в сессии команды в свой лог.
21 июн 13, 13:20    [14465351]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory
sys.dm_exec_query_stats - Returns aggregate performance statistics for cached query plans.

Mikhail Tchervonenko
а мне нужны запросы из моей сессии, как тут выкрутиться пока не нашел.

Писать все выполняемые в сессии команды в свой лог.


по другому никак нельзя выяснить номер сессии в которой произошел этот запрос?
не хочется раздувать базу.
21 июн 13, 13:40    [14465546]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
не хочется раздувать базу.

Аудит не может быть дешевым
У вас там миллионы команд в сессии ?
И почему в одной сессии следующей команде нужно знать текст предыдущей команды ?
21 июн 13, 14:10    [14465832]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mikhail Tchervonenko
Member

Откуда: Münster, Germany
Сообщений: 1738
Glory
Mikhail Tchervonenko
не хочется раздувать базу.

Аудит не может быть дешевым
У вас там миллионы команд в сессии ?
И почему в одной сессии следующей команде нужно знать текст предыдущей команды ?


Не миллионы но немало. А текст комманды нужен для внутренних целей т.к. используются параметризированные запросы и нужен текст запроса с уже подставленными параметрами.
21 июн 13, 16:59    [14467214]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Tchervonenko
А текст комманды нужен для внутренних целей т.к. используются параметризированные запросы и нужен текст запроса с уже подставленными параметрами.

Ну так вы же его сформировали перед выполнением - в чем проблема записать значение переменной с текстом запроса в лог ?
21 июн 13, 17:05    [14467260]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Поникрофилим немного, дабы темы не плодить:)
Друзья, такой вопрос:
Есть CRM система с нее идут запросы в базу при добавлении тех или иных объектов, или выборке итд итп.
Как можно посмотреть последние запросы от нее(CRM'ки) к базе?
21 дек 15, 10:30    [18587235]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
mishanya3624
Как можно посмотреть последние запросы от нее(CRM'ки) к базе?

А вы прочитали эту тему прежде, чем задавать этот вопрос ?
21 дек 15, 11:12    [18587411]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

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

упс, думал в конкретном случае рабортал запрос, немного поправил запрос Mikhail Tchervonenko и получил, что надо.
Спасибо!
21 дек 15, 11:25    [18587477]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
все же нужна помощь:
написал простой триггер, загвоздка в том, что не могу сделать привязку к id пользователя, точнее могу, но почему то в sys.sysusers отсутствует системный пользователь sa , откуда мне его name с id привязать?
alter trigger test1 ON dbo.BiznesPlan
AFTER  INSERT, UPDATE, DELETE
AS
DECLARE @id_old int 
DECLARE @id_new int
DECLARE @name_old varchar(50)
DECLARE @name_new varchar(50)
DECLARE @user varchar(150)
DECLARE @select nvarchar(MAX)

SELECT @id_old = (SELECT ID FROM deleted )
SELECT @id_new = (SELECT ID FROM inserted )
SELECT @name_old = (SELECT Проекты FROM deleted)
SELECT @name_new = (SELECT Проекты FROM inserted)
SELECT @user = SUSER_SNAME() 
SELECT @select = (SELECT TOP 1 
                         SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
                         ((CASE qs.statement_end_offset
                          WHEN -1 THEN DATALENGTH(st.text)
                          ELSE qs.statement_end_offset
                          END - qs.statement_start_offset)/2) + 1) AS statement_text
                          FROM sys.dm_exec_query_stats AS qs
                          CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st,
                          sys.dm_exec_requests as qq
                          WHERE user_id in (select uid from sys.sysusers where name = SUSER_SNAME() )
                          order by creation_time desc)

 BEGIN
INSERT INTO Project2 VALUES (@id_old,@id_new,@name_old,@name_new,@user,@select,  GETDATE()) 
 END
21 дек 15, 18:29    [18590464]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
mishanya3624,

ваш триггер сломается как только вы выполните это
update BiznesPlan set id = id
21 дек 15, 20:26    [18590841]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
mishanya3624
но почему то в sys.sysusers отсутствует системный пользователь sa ,

Он там отсутствует по уважительной причине. Потому, что sa есть логин, а не пользователь
21 дек 15, 20:44    [18590901]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
mishanya3624
написал простой триггер, загвоздка в том, что не могу сделать привязку к id пользователя, точнее могу
Вы скопировали чужую фигню и сделали еще большую.
Как связано sys.dm_exec_requests с остальным запросом? Никак. Следовательно результат непредсказуем.
Я уж не говорю о том что не все запросы попадают в кэш, да еще и сортировка сделана по creation_time.

Не занимайтесь ерундой. Либо включите лог в вашей CRM, если это возможно, либо профайлер вам в помощь.
21 дек 15, 22:34    [18591344]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
WarAnt
mishanya3624,

ваш триггер сломается как только вы выполните это
update BiznesPlan set id = id

он просто не выполнится(запрос), id для информации при inserte
21 дек 15, 23:14    [18591477]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Mind
mishanya3624
написал простой триггер, загвоздка в том, что не могу сделать привязку к id пользователя, точнее могу
Вы скопировали чужую фигню и сделали еще большую.
Как связано sys.dm_exec_requests с остальным запросом? Никак. Следовательно результат непредсказуем.
Я уж не говорю о том что не все запросы попадают в кэш, да еще и сортировка сделана по creation_time.

Не занимайтесь ерундой. Либо включите лог в вашей CRM, если это возможно, либо профайлер вам в помощь.


чужая фигня один в один от сюда - https://msdn.microsoft.com/ru-ru/library/ms181929(v=sql.120).aspx
я не нашел, как связать sys.dm_exec_requests, проблема конечно...
а почему не все попадают в кэш?
сортировка плохая, из-за того, что возможны несколько запросов в одно время?
21 дек 15, 23:22    [18591502]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

Откуда:
Сообщений: 796
Glory
mishanya3624
но почему то в sys.sysusers отсутствует системный пользователь sa ,

Он там отсутствует по уважительной причине. Потому, что sa есть логин, а не пользователь


syslogins, понял
21 дек 15, 23:27    [18591526]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
mishanya3624
Mind
пропущено...
Вы скопировали чужую фигню и сделали еще большую.
Как связано sys.dm_exec_requests с остальным запросом? Никак. Следовательно результат непредсказуем.
Я уж не говорю о том что не все запросы попадают в кэш, да еще и сортировка сделана по creation_time.

Не занимайтесь ерундой. Либо включите лог в вашей CRM, если это возможно, либо профайлер вам в помощь.


чужая фигня один в один от сюда - https://msdn.microsoft.com/ru-ru/library/ms181929(v=sql.120).aspx
я не нашел, как связать sys.dm_exec_requests, проблема конечно...
Ага, а в заголовке написано "Получение сведений о первых пяти запросах по среднему времени ЦП" ? И каким же образом это решает вашу задачу?
mishanya3624
а почему не все попадают в кэш?
Потому что SQL Server так устроен.
mishanya3624
сортировка плохая, из-за того, что возможны несколько запросов в одно время?
Ну хотя бы потому что это дата создания, а не выполнения.
21 дек 15, 23:36    [18591560]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

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

да, видимо действительно не айс получается, даже при изменении сортировки и самого запроса, не все запросы попадают в кэш, и посему записывается некорректная информация в поле запроса, пошел настраивать аудит в профайлере:(
22 дек 15, 10:42    [18592787]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
mishanya3624
пошел настраивать аудит в профайлере:(

Аудит уже есть сам по себе
22 дек 15, 10:44    [18592799]     Ответить | Цитировать Сообщить модератору
 Re: Каким селектом можно вытащить текст последнего запроса с MSSQL 2008  [new]
mishanya3624
Member

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

но он как я понимаю, есть только на текущие сессии , а не в режиме истории?
22 дек 15, 10:55    [18592871]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить