実行SQL

  • 現在実行中のSQLを表示
    select	sql.text as クエリ, 
           db.name as DB,
    	req.session_id,
    	req.command,
    	req.status,
    	req.wait_type,
    	req.last_wait_type,
    	req.wait_time, 
    	req.total_elapsed_time, 
    	--(req.total_elapsed_time/1000) as 経過時間_秒,
    	req.start_time as 処理開始日時
    from sys.dm_exec_requests req cross apply sys.dm_exec_sql_text(req.sql_handle) sql,
         sys.databases db 
    where db.database_id = req.database_id
  • 指定日時以降に実行されたSQLを表示
    SELECT st.text
          ,last_execution_time
    FROM   sys.dm_exec_query_stats qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    WHERE  last_execution_time >= '2020/03/12 12:00:00'
    ORDER BY last_execution_time
  • CPU の平均時間で順位付けされた上位5つのクエリに関する情報
    SELECT TOP 5 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  
    ORDER BY total_worker_time/execution_count DESC; 

原因究明・改善

とりあえず実行計画

  • テキスト表示
    • SQLの実行時に「SET STATISTICS PROFILE ON」文を追加
  • グラフィカル表示
    • メニューバー内「実際の実行プランを含める」アイコンをクリックしてONにしてからSQL実行

Clustered Index Update

クエリタイムアウト

suspended

WAIT_TYPE

LCK_M_U

  • タスクが更新ロックの取得を待機しているときに発生

LCK_M_X

  • タスクが排他ロックの取得を待機しているときに発生

LATCH_EX

PAGEIOLATCH_EX

テーブル有無

IF OBJECT_ID (N'テーブル名', N'U') IS NOT NULL  
	「テーブルが見つかったときの処理」
ELSE
	「テーブルが見つからなかったときの処理」
  • OBJECT_ID関数に指定する引数は
    • 第一引数:オブジェクト名
    • 第二引数:オブジェクトタイプ
  • 第二引数に【N'U'】を指定する理由は、【N'U'】がテーブルのオブジェクトタイプのため

Tips

変数

乱数

SQL

データコピー

insert [コピー先DB].dbo.[テーブル名]
  select [コピー元DB].dbo.[テーブル名]

トラブルシューティング

この SqlTransaction? は完了しています。再度使用することはできません。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-01-20 (木) 09:09:27 (126d)