Запрос ЦП на сервере БД - PullRequest
       1

Запрос ЦП на сервере БД

3 голосов
/ 11 декабря 2011

В течение последних нескольких дней у моего сервера БД постоянно высокая загрузка ЦП.Исследуя это, я смотрел на выполняющиеся в данный момент запросы, используя запрос

SELECT session_id,
       request_id,
       Db_name(database_id),
       start_time,
       status,
       command,
       Substring(txt.TEXT, ( statement_start_offset / 2 ) + 1,
       ( ( CASE statement_end_offset
       WHEN -1 THEN Datalength(txt.TEXT)
       ELSE statement_end_offset
                                                                   END
           - statement_start_offset ) / 2 ) + 1) AS statement_text,
       wait_type,
       wait_time,
       blocking_session_id,
       percent_complete,
       cpu_time,
       reads,
       writes,
       logical_reads,
       row_count
FROM   sys.dm_exec_requests
       CROSS APPLY sys.Dm_exec_sql_text([sql_handle]) AS txt
WHERE  session_id <> @@SPID
       AND session_id > 50 

В большинстве случаев я обнаружил, что помимо обычных запросов, отправляемых сервером приложений, существуют эти странные запросы S, которые, кажется,занимать приличную долю процессорного времени.например,

Screen shot from query analyzer I took yesterday for the above query

Они не отображаются в профилировщике SQL.У кого-нибудь есть идеи, что это такое и что с ними делать?

1 Ответ

2 голосов
/ 11 декабря 2011

Я предполагаю, что если вы захватите все txt.text вместе с statement_start_offset statement_end_offset, вы обнаружите, что есть некоторые обстоятельства, когда столбцы смещения могут оказаться 0, и поэтомуstatement_text усекается, чтобы показать вам только первый символ запроса SELECT.

DECLARE @text nvarchar(max); 
SET @text = 'SELECT .....';
DECLARE @statement_start_offset INT; 
SET @statement_start_offset = 0;
DECLARE @statement_end_offset INT;
SET @statement_end_offset = 0;


SELECT 
       Substring(@text, ( @statement_start_offset / 2 ) + 1,
       ( ( CASE @statement_end_offset
       WHEN -1 THEN Datalength(@text)
       ELSE @statement_end_offset END
           - @statement_start_offset ) / 2 ) + 1) AS statement_text

Я не смог найти никаких признаков того, когда statement_end_offset вернет 0 вместо -1хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...