日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 代理作业_查看SQLServer 代理作业的历史信息

發布時間:2025/4/5 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 代理作业_查看SQLServer 代理作业的历史信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不敢說眾所周知,但是大部分人都應該知道SQLServer的 代理 作業 情況都存儲在SQLServer5大系統數據庫(master/msdb/model/tempdb/resources)中的MSDB中,而由于 代理 作業 的長期運行和種類較多,所以一般可以看到msdb的大小往往比其他庫加起來還大。本文主

不敢說眾所周知,但是大部分人都應該知道SQLServer的代理作業情況都存儲在SQLServer5大系統數據庫(master/msdb/model/tempdb/resources)中的MSDB中,而由于代理作業的長期運行和種類較多,所以一般可以看到msdb的大小往往比其他庫加起來還大。本文主要專注在如何查詢作業的運行時間點及運行持續時間上。

作為DBA,周期性檢查作業情況是一下非常重要的任務。本文不講述太深入。只講述如何查詢作業的歷史運行情況。并加入一下在聯機叢書上沒有提及,也就是所謂的未公開的系統函數。

作業執行的歷史信息存放在msdb.dbo.sysjobhistory中。但是在這個表里面,日期和時間列的顯式方式會有點不常規,這就引出了本文的意圖。首先我們來看看表里的數據,這里需要關聯一下sysjobs表:

SELECT j.name AS 'JobName' ,

run_date ,

run_time

FROM msdb.dbo.sysjobs j

INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id

WHERE j.enabled = 1 --Only Enabled Jobs

ORDER BY JobName ,

run_date ,

run_time DESC

運行上面的代碼,得到以下的結果:

可以看到run_date這列,雖然能看得懂,但是是YYYYMMDD這樣的格式,用起來可能有點不方便。而run_time就更加難用了。Run_time中的180002意味著:18:00:02執行。這些不直觀的數據對時常需要使用的DBA來說是一種痛苦,當然,可以通過字符串函數來轉換成自己喜歡看的格式。但是這里提供一個微軟未公開的函數:

MSDB.dbo.agent_datetime(run_date,run_time)

它會返回一個比較常規的日期格式,使得使用和查看的時候都很方便,作為一個未公開的函數,對其的了解不多只需要會用就可以了。可以使用下面的例子:

SELECT j.name AS 'JobName' ,

run_date ,

run_time ,

msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime'

FROM msdb.dbo.sysjobs j

INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id

WHERE j.enabled = 1 --Only Enabled Jobs

ORDER BY JobName ,

RunDateTime DESC

結果轉換后,得到下面的結果:

可以看到經過函數格式化之后,數據已經很直觀了。特別注意,這個未公開函數是從2005以后才引入,2000是沒有的。只能通過字符串處理來獲得同樣的效果。

現在再來看看另外一列,run_duration,運行持續時間,同樣,這列是int類型,也和run_time一樣,不直觀。

SELECT j.name AS 'JobName' ,

run_date ,

run_time ,

msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,

run_duration

FROM msdb.dbo.sysjobs j

INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id

WHERE j.enabled = 1 --Only Enabled Jobs

ORDER BY JobName ,

RunDateTime DESC

結果如下:

這列兩位數代表僅僅是秒,3位數代表秒和分。單純從這里比較難看出作業的運行時間。對分析不利。比較遺憾的是沒有另外的存儲過程來轉換這列,所以需要自己編寫代碼,可以用下面的代碼來轉換:

SELECT j.name AS 'JobName' ,

run_date ,

run_time ,

msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,

run_duration ,

( ( run_duration / 10000 * 3600 + ( run_duration / 100 ) % 100 * 60

+ run_duration % 100 + 31 ) / 60 ) AS 'RunDurationMinutes'

FROM msdb.dbo.sysjobs j

INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id

WHERE j.enabled = 1 --Only Enabled Jobs

ORDER BY JobName ,

RunDateTime DESC為了方便展示,這里我篩選了持續時間比較長的幾個作業。

對于很多ETL的作業,可能會有很多步驟,下面來把這些步驟也帶出來,這就要關聯另外一個表msdb.dbo.sysjobsteps:

SELECT j.name AS 'JobName' ,

s.step_id AS 'Step' ,

s.step_name AS 'StepName' ,

msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' ,

( ( run_duration / 10000 * 3600 + ( run_duration / 100 ) % 100 * 60

+ run_duration % 100 + 31 ) / 60 ) AS 'RunDurationMinutes'

FROM msdb.dbo.sysjobs j

INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id

INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id

AND s.step_id = h.step_id

AND h.step_id <> 0

WHERE j.enabled = 1 --Only Enabled Jobs

ORDER BY JobName ,

RunDateTime DESC

通過這個查詢,可以檢查到具體哪個作業運行時間最長,然后進行檢查和優化。對于SQLServer 代理作業還有很多事情要做,由于主題原因,也不可能一篇就全部說完,將在后續文章中說明。

從代理作業中檢查性能問題只是查詢性能問題及檢查數據庫運行情況的手段之一,很多數據庫管理方面的操作其實往往不是單一的,而是一系列的操作合成的。但是學會一種工具,你就多了一樣利器。

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的mysql 代理作业_查看SQLServer 代理作业的历史信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。