#author("2021-09-13T04:36:58+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]] **とりあえず実行計画 [#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/]] **クエリタイムアウト [#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で今何がロックされているか確認する: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/]] ***LCK_M_U [#maa104cf] -タスクが更新ロックの取得を待機しているときに発生 *テーブル有無 [#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]] **SQL [#e8512fe6] ***データコピー [#e56be143] insert [コピー先DB].dbo.[テーブル名] select [コピー元DB].dbo.[テーブル名]