#author("2022-01-12T07:30:05+00:00","default:admin","admin")
#author("2022-01-20T00:09:27+00:00","default:admin","admin")
-テーブルの特定の位置にカラムを追加する ... SQL Serverではできない!ダサッ!
--[[SQL ServerのT-SQLでテーブルの特定の位置にカラム (列、項目) を追加する:https://urashita.com/archives/13652]]
--SQL Management Studioでやるしかない

*実行SQL [#v2885d29]
-[[sys.dm_exec_sql_text (Transact-SQL):https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15]]
-[[sys.dm_exec_query_stats (Transact-SQL):https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-query-stats-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15]]

-[[現在実行中のSQLを調べる:https://haradago.hatenadiary.org/entry/20130325/p1]]
-[[SQL Server で実行された SQL を SQL で取得する方法:https://www.projectgroup.info/tips/SQLServer/MSSQL_00000042.html]]

-現在実行中の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; 

*原因究明・改善 [#ud18c175]
-[[SQLServer: 現在実行中クエリのリアルタイムトラブルシューティング:https://qiita.com/maaaaaaaa/items/83e4f984e63fee4dae34]]
-[[SQLパフォーマンスtips(SQLServer):https://qiita.com/kazuho39/items/0d3e617661670311ea05]]

**とりあえず実行計画 [#t533b7ee]
-[[【SQL Server】実行計画を見てみよう:https://www.w2solution.co.jp/tech/2020/10/26/%E3%80%90sql-server%E3%80%91%E5%AE%9F%E8%A1%8C%E8%A8%88%E7%94%BB%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86/]]

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

***Clustered Index Update [#n04401c3]
-[[Clustered Index Update Slow Update On Large Table:https://www.sqlservercentral.com/forums/topic/clustered-index-update-slow-update-on-large-table]]

**クエリタイムアウト [#le9f44c5]
-[[SQL Serverで断続的に発生するクエリタイムアウトの原因を調査した話:https://techblog.zozo.com/entry/sqlserver-query-timeout]]

**suspended [#j5370b1e]
-[[「ロックされたわけではない」のに終わらない処理がある(パフォーマンストラブル):https://atmarkit.itmedia.co.jp/ait/articles/1707/03/news001.html]]

**WAIT_TYPE [#j2562a70]
-[[sys.dm_os_wait_stats (Transact-SQL):https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys-dm-os-wait-stats-transact-sql?view=sql-server-ver15]]
-[[SQL Server の Wait Statistics オブジェクト:https://docs.microsoft.com/ja-jp/sql/relational-databases/performance-monitor/sql-server-wait-statistics-object?view=sql-server-ver15]]

-[[SQL Serverのロックについて出来る限り分かりやすく解説:https://qiita.com/maaaaaaaa/items/38fd95b142b07acf7700]]
-[[SQL Serverで今何がロックされているか確認する:https://scrapbox.io/gosyujin/SQL_Server%E3%81%A7%E4%BB%8A%E4%BD%95%E3%81%8C%E3%83%AD%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B]]
-[[ZOZOTOWNで最大級のトラフィックを記録する福袋発売イベントで実施した負荷対策:https://qiita.com/maaaaaaaa/items/7df70befb20f3b047e8f]]
-[[「待ち事象」を起点とした SQL Server のボトルネックの調査の基本 その 1:https://blog.engineer-memo.com/2019/01/03/%E3%80%8C%E5%BE%85%E3%81%A1%E4%BA%8B%E8%B1%A1%E3%80%8D%E3%82%92%E8%B5%B7%E7%82%B9%E3%81%A8%E3%81%97%E3%81%9F-sql-server-%E3%81%AE%E3%83%9C%E3%83%88%E3%83%AB%E3%83%8D%E3%83%83%E3%82%AF%E3%81%AE-1/]]
-[[「待ち事象」を起点とした SQL Server のボトルネックの調査の基本 その 2:https://blog.engineer-memo.com/2019/01/05/%e3%80%8c%e5%be%85%e3%81%a1%e4%ba%8b%e8%b1%a1%e3%80%8d%e3%82%92%e8%b5%b7%e7%82%b9%e3%81%a8%e3%81%97%e3%81%9f-sql-server-%e3%81%ae%e3%83%9c%e3%83%88%e3%83%ab%e3%83%8d%e3%83%83%e3%82%af%e3%81%ae/]]

-[[すぐに終了するはずの処理が、急に「いつまでたっても」終わらなくなった(パフォーマンストラブル):https://atmarkit.itmedia.co.jp/ait/articles/1706/26/news004.html]]

***LCK_M_U [#maa104cf]
-タスクが更新ロックの取得を待機しているときに発生

***LCK_M_X [#n947ab2f]
-タスクが排他ロックの取得を待機しているときに発生

***LATCH_EX [#cb01897f]
-[[【SQL server】ラッチ状況の確認:https://memorandom-nishi.hatenablog.jp/entry/2016/12/19/011756]]

***PAGEIOLATCH_EX [#p9bb3553]


*テーブル有無 [#h2795c39]
-[[【SQL Server】テーブルの存在チェックするやり方を解説します:https://www.tairax.com/entry/Microsoft-SQL-Server/Check-existence-of-table]]

 IF OBJECT_ID (N'テーブル名', N'U') IS NOT NULL  
 	「テーブルが見つかったときの処理」
 ELSE
 	「テーブルが見つからなかったときの処理」

-OBJECT_ID関数に指定する引数は
--第一引数:オブジェクト名
--第二引数:オブジェクトタイプ
-第二引数に【N'U'】を指定する理由は、【N'U'】がテーブルのオブジェクトタイプのため

*Tips [#ka23c672]
-[[複数の列で in 句を使いたい:https://odashinsuke.hatenablog.com/entry/2015/12/13/103651]]

**変数 [#ca325574]
-[[SQL Server: 変数にSELECTした結果を代入する方法:https://ameblo.jp/hiro628/entry-11025756474.html]]
-[[sql-server – クエリ結果を変数に格納し、それをストアドプロシージャ内で変更する:https://codeday.me/jp/qa/20190301/293218.html]]

-[[SELECT した結果をカーソルを使用してループ処理をする方法:https://www.projectgroup.info/tips/SQLServer/SQL/SQL000028.html]]

**乱数 [#ycc00736]
-[[[SQLServer] 指定した範囲内の乱数を生成する:https://propg.ee-mall.info/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/sql-server/sqlserver-%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E7%AF%84%E5%9B%B2%E5%86%85%E3%81%AE%E4%B9%B1%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/]]

**SQL [#e8512fe6]
***データコピー [#e56be143]
 insert [コピー先DB].dbo.[テーブル名]
   select [コピー元DB].dbo.[テーブル名]

*トラブルシューティング [#k73b6a49]
***この SqlTransaction は完了しています。再度使用することはできません。 [#y87697c9]
-[[DataAdapter.Update実行時に発生するタイムアウトに対するRollbackについて:https://social.msdn.microsoft.com/Forums/ja-JP/657959c0-04b8-491b-af60-3167da11c14b/dataadapterupdate23455348922617812395303302998312377124271247912452?forum=sqlserverja]]
-[[[ASP.NET]SQL実行時エラー「SqlTransactionは完了しています」:https://atmarkit.itmedia.co.jp/bbs/phpBB/viewtopic.php?topic=33819&forum=7&5]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS