SQLの進捗状況が把握可能なライブクエリ統計について

本投稿のSQL Serverのバージョンは「2017 Developer Edition」です。SQL Server Management Studioのバージョンは「17.3」です。

SQL Server 2014以降で使えるようになったらしい、ライブクエリ統計を使ってみました。
処理の進捗状況が分かるらしいです。
使い方は簡単で、メニューの「ライブクエリ統計」のボタンを押して、有効化して、SQLを実行するだけです。
以下の場所です。

f:id:masaru1006a:20190128010219j:plain

ライブクエリ統計を有効化した状態で、SQLを実行してみました。

f:id:masaru1006a:20190128010452j:plain

こんな感じで、SQLの進捗状況が表示されました。
「TairyouData_01」テーブルと「TairyouData_02」テーブルには3,000件ずつデータを入れてます。
そして、この2つのテーブルを内部結合させています。
上記の状態だと、「TairyouData_01」テーブルのTable Scanは完了していて、「TairyouData_02」テーブルのTable Scanは「17%」完了しているという事になりますね。
「TairyouData_02」テーブルから読込んで、「TairyouData_01」テーブルとINNER JOIN(内部結合)もしていて、これも「17%」が完了しています。
実行時間が長いSQLを実行する時に、処理の進捗状況を把握するのに役立ちそうです。

インテリセンスのローカルキャッシュの更新について

本投稿のSQL Serverのバージョンは「2017 Developer Edition」です。SQL Server Management Studioのバージョンは「17.3」です。

SQL Server Management Studioでテーブルを追加した場合、直ぐにインテリセンスに表示されない事が有りますよね。
以下の様な感じです。「TairyouData_02」テーブルが選択候補に表示されていません。

f:id:masaru1006a:20190128002622j:plain

こういう時は、[メニュー]-[編集]-[IntelliSense]-[ローカル キャッシュの更新]を選択します。
または、Ctrl + Shift + Rのショートカットキーを押下します。

f:id:masaru1006a:20190128003107j:plain

すると、「TairyouData_02」テーブルが選択候補に表示されるようになります。

f:id:masaru1006a:20190128003508j:plain

JSSUG(Japan SQL Server User Group):第5回 SQL Server 2017勉強会の資料公開

■JSSUG(Japan SQL Server User Group)主催:第5回 SQL Server 2017勉強会
トランザクション分離レベルの違いによるSQL Serverの動作の違い」についてです。
speakerdeck.com

INSERT文でIDENTITYが指定されている列に明示的な値を挿入する方法

本投稿のSQL Serverのバージョンは「2017 Developer Edition」です。SQL Server Management Studioのバージョンは「17.3」です。

IDENTITYが指定されている列に明示的な値を挿入する方法です。
テーブル定義はこんな感じです。

CREATE TABLE [dbo].[Table_1](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [Column1] [char](10) NULL,
 [Column2] [char](10) NULL
) ON [PRIMARY]

上記のテーブルの[ID]列に対して、INSERT文で明示的に値を指定すると以下の様なエラーになります。

f:id:masaru1006a:20180401025016j:plain

これを、回避するには、「SET IDENTITY_INSERT [データベース名].[スキーマ名].[テーブル名] ON」を実行して、「IDENTITY_INSERT」を有効にします。
すると、以下の様にエラーが起きなくなります。

f:id:masaru1006a:20180401025944j:plain

設定を戻すには、「SET IDENTITY_INSERT [データベース名].[スキーマ名].[テーブル名] OFF」を実行して、「IDENTITY_INSERT」を無効にします。

f:id:masaru1006a:20180401030341j:plain

元に戻すと、また、エラーが起きるようになります。

SQLやコマンドを指定した回数実行する方法

本投稿のSQL Serverのバージョンは「2017 Developer Edition」です。SQL Server Management Studioのバージョンは「17.3」です。

 

SQLやコマンドを回数を指定して実行する事が出来るみたいです。

以下の通りとなります。

 ■コマンド

 「GO [count] 」

 ※[count]には、正の整数を指定します。

そうすると、直前のSQLやコマンドが複数回実行されます。

■実行例

f:id:masaru1006a:20180401003718j:plain

こんな感じで2回実行されます。

トランザクションログファイルのサイズ縮小について

本投稿のSQL Serverのバージョンは「2017 Developer Edition」です。SQL Server Management Studioのバージョンは「17.3」です。

忘れそうになるので、備忘録として残しておきます。

トランザクションログファイルのサイズを縮小するには、以下のコマンドを使います。

第一パラメータには、トランザクションログファイルの論理名を指定します。

第二パラメータには、ファイルサイズをMB単位で指定します。

■コマンド

 「DBCC SHRINKFILE('DemoDatabase_log', 0)」

指定するトランザクションログファイルを調べるには、以下のSQLを実行します。

SQL

 「SELECT * FROM sys.database_files」 

すると、以下の様な実行結果が得られます。

f:id:masaru1006a:20180321155533j:plain

復旧モデルが完全の場合は、ファイルサイズが圧縮されない場合が有る(?)ので、以下のコマンドでトランザクションログファイルを切捨ててから「DBCC SHRINKFILE」を行うと良いかも。(良く分かっていないですが、「DBCC SHRINKFILE」と「BACKUP LOG」を交互に繰返し実行しないと、ファイルサイズが初期サイズまで戻らない事が有る気がします。)

■コマンド

 「BACKUP LOG [DemoDatabase] TO DISK = N'NUL'」

 ※[DemoDatabase]には、データベース名を指定する。

 

SQL Serverを使っていると、トランザクションログの上限サイズオーバーになる事が有るので、まとめてみました。