問題
本番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管理者もつけっぱモンスターの仲間だった。
円満に納得させたいが。
参考