2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLServerで特定セッションの一括削除

Last updated at Posted at 2019-10-25

問題

本番DBにつなぎパ

DB管理者に無視されたが、できることをやろう

定期的にPCからのセッションのみをぶった切る。特定セッションを掃除。
幸いPC名は命名規則のルールがあるので特定できる。
なお、更新中の処理もあるのでリクエスト終了時間から1時間後を条件に加える。

ストアドプロシージャ

CREATE PROCEDURE [dbo].[up_CleanSession]
AS
BEGIN
	SET NOCOUNT ON;

	Declare @cnt int, @i int, @ssid int
	Declare @tbl table(ID int identity(1,1), ssid int);

	INSERT INTO @tbl(ssid)
	SELECT session_id 
    FROM sys.dm_exec_sessions
	WHERE host_name like 'PC-%'
      and is_user_process = 1
      and status = 'sleeping'
      and datediff(MINUTE, last_request_end_time, getdate()) > 60


	SELECT  @cnt = Count(*) FROM @tbl
	SET @i = 1

	WHILE @i <= @cnt
	BEGIN
		SELECT @ssid = ssid FROM @tbl WHERE ID = @i

		--ごめんなさい。もう家に帰りなさい。
        EXEC ('KILL ' + @ssid);

		SET @i += 1
	END
END

メンテナンスプラン

定期でストアドプロシージャ実行

・・・

本番DBに接続したまま一日を過ごすモンスターが増えている。新人は先輩の背中を見る。
Macユーザも増え、見たことないツールで接続したままに。
帰りにPC電源切ってくりゃ、仕方ないとするが、つけっぱなしの有り様。環境にもワルイ。

障害調査中にモンスターセッションが非常に気になるのでDB管理者に相談したが。
何が悪いですかと聞かれ、過去にあったデットロック事件や接続ツールバグでTEMPDB枯渇事件などを説明したが、証拠がないからと却下された。
妙に証拠を求める時は何かを隠している(に違いない)。おっとDB管理者もつけっぱモンスターの仲間だった。
円満に納得させたいが。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?