เครื่องมือที่ดีสำหรับการแสดงผลงาน SQL Agent คืออะไร [ปิด]


14

ฉันพบว่าเครื่องมือ MS SQL Studio ในตัวสำหรับการจัดการงานตัวแทนให้น่าผิดหวังเล็กน้อย คุณพบว่ามีเครื่องมืออะไรบ้างที่เป็นประโยชน์

Offhand มีสามสิ่งที่ฉันต้องการเห็นในเครื่องมือดังกล่าว:

  • สรุปกราฟิกของงานที่ทำงานเมื่อนานเท่าไหร่และไม่ว่าพวกเขาจะประสบความสำเร็จ
  • มุมมองสถานะปัจจุบันเช่น Job Activity Monitor แต่รีเฟรชในเวลาจริง
  • อินเทอร์เฟซที่สะดวกกว่าสำหรับทำซ้ำหรือแก้ไขงาน (เช่นเปรียบเทียบสองขั้นตอนงานโดยไม่ถูกบล็อกโดยกล่องโต้ตอบโมดอล)

มันอาจจะง่ายในการเขียนแอพเล็ก ๆ น้อย ๆ เพื่อจัดการสิ่งนี้ แต่มีบางคนทำไปแล้วและทำได้ดีกว่า

เห็นได้ชัดว่านี่เป็นคำถามเชิงอัตวิสัยดังนั้นหากมีการดัดแปลงบางอย่างที่ผ่านมาแล้วอย่าลังเลที่จะทำให้มันเป็น CW

คำตอบ:


13

ลองใช้ googling ดูบ้างและนี่เป็นซอฟต์แวร์ที่คุณอาจสนใจ:

  1. ผู้จัดการงาน SQL https://www.idera.com/productssolutions/freetools/sqljobmanager

  2. แบบสอบถามกำลังเรียกใช้งานตัวแทนของเซิร์ฟเวอร์ SQL ในขณะนี้ http://sqlconcept.com/2011/06/25/how-to-query-currently-running-sql-server-agent-jobs/

ถ้าใครมีลิงค์เพิ่มเติมให้เพิ่มไปเลย!


สำหรับจุดที่ 3 เคียวรีลิงก์และโน้ตอยู่ที่นี่ -

วันนี้ฉันไปค้นคว้าเพื่อค้นหาวิธีแสดงรายการงาน SQL Server Agent ทั้งหมดที่กำลังทำงานอยู่ เช่นเดียวกับภารกิจอื่น ๆ สิ่งนี้เริ่มต้นด้วย Google-ing :)

ภายใน 2 นาทีฉันพบโพสต์ที่ยอดเยี่ยมนี้โดย Brent Ozar บน SQLServerPedia ทำไมโพสต์นี้ถึงดีมาก? มันยอดเยี่ยมมากเพราะเบรนต์คิดว่าถ้าคุณค้นหาเฉพาะ sysjobs และตาราง sysjobhistory คุณจะไม่ได้รับสถานะงานที่ถูกต้องในปัจจุบัน เช่นในตาราง sysjobhistory คุณมีคอลัมน์ run_status อย่างไรก็ตาม (ถึงแม้ว่าตาม BOL ค่าที่เป็นไปได้สำหรับคอลัมน์นี้คือ“ สถานะของการปฏิบัติงาน: 0 = ล้มเหลว, 1 = สำเร็จ, 2 = ลองอีกครั้ง 3 = ยกเลิก, 4 = กำลังดำเนินการ”) ในความเป็นจริงค่าจะไม่เป็น 4 (กำลังดำเนินการ) ที่จริงแล้วในตาราง sysjobhistory จะถูกเก็บข้อมูลประวัติของแต่ละขั้นตอนงานที่ดำเนินการซึ่งหมายความว่าสถานะของขั้นตอนนั้นจะได้รับการปรับปรุงหลังจากดำเนินการขั้นตอนถัดไปแล้วเท่านั้น กล่าวอีกนัยหนึ่งตารางจะไม่อัปเดตตามเวลาจริงหรือทุก ๆ วินาที

ดังนั้นเบรนต์จึงพบว่ามีกระบวนงานที่เก็บไว้ที่ไม่มีเอกสาร sys.xp_sqlagent_enum_jobs ซึ่งเป็นส่วนหนึ่งของ sp_help_job ซึ่งสามารถให้สถานะการดำเนินการปัจจุบันของตัวแทนงานได้

แม้ว่าฉันจะพบวิธีในการรับงานที่กำลังทำงานอยู่ แต่ฉันก็ไม่พอใจกับสคริปต์นี้เพราะทำงานเฉพาะใน SQL 2005/2008 เท่านั้น

ฉันควรทำอย่างไรถ้าฉันมีอินสแตนซ์ SQL 2000 และอยากรู้อยากเห็นมากเกี่ยวกับงานที่กำลังทำงานอยู่?

ด้วยความช่วยเหลือเล็กน้อยจากทิมแชปแมน (หลักของ www.SQLServerNation.com) ฉันคิดว่าจะทำอย่างไร ขอบคุณทิม!

นี่คือสคริปต์สุดท้ายซึ่งจะทำงานบน SQL 2000, 2005 และ 2008 และจะให้งานตัวแทนของ SQL Server ที่คุณใช้งานอยู่ในปัจจุบัน (อย่างที่คุณเห็นความแตกต่างของสคริปต์ของเบรนต์นั้นน้อยมาก: แทนที่จะเป็น“ sys.xp_sqlagent_enum_jobs” ฉันใช้“ master.dbo.xp_sqlagent_enum_jobs” และฉัน จำกัด ชุดผลลัพธ์เพื่อให้ได้งานที่รันอยู่ในปัจจุบันเท่านั้น .running = 1″)

เรียบง่ายเหมือนที่เป็นอยู่ สนุก.

IF EXISTS (SELECT *
FROM    tempdb.dbo.sysobjects
WHERE   id = OBJECT_ID(N'[tempdb].[dbo].[Temp1]')
)
DROP TABLE [tempdb].[dbo].[Temp1]
GO
CREATE TABLE [tempdb].[dbo].[Temp1]
(
job_id uniqueidentifier NOT NULL,
last_run_date nvarchar (20) NOT NULL,
last_run_time nvarchar (20) NOT NULL,
next_run_date nvarchar (20) NOT NULL,
next_run_time nvarchar (20) NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL,
request_source INT NOT NULL,
request_source_id sysname
COLLATE database_default NULL,
running INT NOT NULL,
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)
DECLARE @job_owner   sysname
DECLARE @is_sysadmin   INT
SET @is_sysadmin   = isnull (is_srvrolemember ('sysadmin'), 0)
SET @job_owner   = suser_sname ()
INSERT INTO [tempdb].[dbo].[Temp1]

--EXECUTE sys.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner
UPDATE [tempdb].[dbo].[Temp1]
SET last_run_time    = right ('000000' + last_run_time, 6),
next_run_time    = right ('000000' + next_run_time, 6);
-----
SELECT j.name AS JobName,
j.enabled AS Enabled,
CASE x.running
WHEN 1
THEN
'Running'
ELSE
CASE h.run_status
WHEN 2 THEN 'Inactive'
WHEN 4 THEN 'Inactive'
ELSE 'Completed'
END
END
AS CurrentStatus,
coalesce (x.current_step, 0) AS CurrentStepNbr,
CASE
WHEN x.last_run_date > 0
THEN
convert (datetime,
substring (x.last_run_date, 1, 4)
+ '-'
+ substring (x.last_run_date, 5, 2)
+ '-'
+ substring (x.last_run_date, 7, 2)
+ ' '
+ substring (x.last_run_time, 1, 2)
+ ':'
+ substring (x.last_run_time, 3, 2)
+ ':'
+ substring (x.last_run_time, 5, 2)
+ '.000',
121
)
ELSE
NULL
END
AS LastRunTime,
CASE h.run_status
WHEN 0 THEN 'Fail'
WHEN 1 THEN 'Success'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Cancel'
WHEN 4 THEN 'In progress'
END
AS LastRunOutcome,
CASE
WHEN h.run_duration > 0
THEN
(h.run_duration / 1000000) * (3600 * 24)
+ (h.run_duration / 10000 % 100) * 3600
+ (h.run_duration / 100 % 100) * 60
+ (h.run_duration % 100)
ELSE
NULL
END
AS LastRunDuration
FROM          [tempdb].[dbo].[Temp1] x
LEFT JOIN
msdb.dbo.sysjobs j
ON x.job_id = j.job_id
LEFT OUTER JOIN
msdb.dbo.syscategories c
ON j.category_id = c.category_id
LEFT OUTER JOIN
msdb.dbo.sysjobhistory h
ON     x.job_id = h.job_id
AND x.last_run_date = h.run_date
AND x.last_run_time = h.run_time
AND h.step_id = 0
where x.running = 1

ฉันลองใช้ SQLjobvis มันทำให้ฉันเห็นภาพตารางเวลาบ้าง แต่มันก็ไม่ได้ดีไปกว่าสิ่งที่ฉันสามารถทำได้ด้วยตัวเองภายในหนึ่งชั่วโมง ฉันได้วางแกนเวลาในแนวตั้งเพื่อให้ผู้ใช้สามารถเลื่อนดูวันต่างๆได้อย่างง่ายดาย
Jon of All Trades

3

ฉันรู้ว่านี่เป็นโพสต์เก่าและฉันเองมีปัญหาเดียวกัน การจัดการงานตัวแทน SQL หลายในหลายกรณีดังนั้นผมจึงตัดสินใจที่จะสร้างบริษัท ตัวแทน SQL Insight , พบได้ที่นี่> http://brentec.ca มันเป็นผลิตภัณฑ์ที่มีการพัฒนาและจะออกมาจากรุ่นเบต้าในอนาคตอันใกล้และมีการปรับปรุงอย่างต่อเนื่องและยินดีให้คำแนะนำ นี่เป็นโครงการที่ฉันทำงานในช่วงเวลาว่างขณะที่ฉันปรึกษาและมีกิ๊กเต็มเวลา แต่ถ้าคำแนะนำมีค่าในขณะนั้นพวกเขาจะถูกนำไปใส่ในถังเพื่ออนาคต

ขณะนี้เป็นเพียงเครื่องมือตรวจสอบสำหรับเอเจนต์ SQL ที่มีความสามารถในการเขียนสคริปต์บางอย่าง ปัจจุบันตั้งอยู่ที่เวอร์ชัน 0.11 พร้อมอัพเดต 2-3 ครั้งต่อปีและมีข้อมูลติดต่อเพื่อขอความช่วยเหลือ ใช่ตอนนี้ไม่มีความช่วยเหลือออนไลน์ แต่เนื่องจากเป็นผลิตภัณฑ์แบบอ่านอย่างเดียวความเสียหายจึงไม่สามารถทำได้กับอินสแตนซ์ที่ถูกตรวจสอบของ SQL


2

คุณลองใช้คุณสมบัติรายงานหรือไม่

คลิกขวาที่ตัวแทน SQL => รายงาน => รายงานมาตรฐาน


ฉันไม่ได้ แต่พวกเขาไม่ได้เป็นประโยชน์อย่างมาก มีสองและพวกเขาเพียงแสดงจำนวนของการประหารชีวิตและเวลาดำเนินการเฉลี่ย
Jon of All Trades

เพื่อความชัดเจนฉันไม่ได้พิจารณารายงาน SQL Studio หากมีคนมีรายงานที่มีประโยชน์ที่พวกเขาต้องการแชร์
Jon of All Trades

2

ฉันไม่แน่ใจว่าสิ่งนี้ตรงตามเกณฑ์ของคุณทั้งหมด แต่คุณอาจดูสิ่งนี้:

http://www.sqlsoft.co.uk/sqljobvis.php


เว็บไซต์ทำให้ฉันสับสนเล็กน้อยที่จะเรียกใช้. exe ข้อมูลการติดต่อบางอย่างจะเป็นการเริ่มต้น
จอนแห่งการค้าทั้งหมด

2

อีกหนึ่งรายการที่จะเพิ่มในรายการ:

สิ่งหนึ่งที่ฉันชอบเกี่ยวกับสิ่งนี้คือมันรวมเข้ากับส่วนประกอบอื่น ๆ เช่นงาน Windows Scheduler และ Oracle

ขอบคุณMark ที่นำเรื่องนี้ขึ้นมาเมื่อฉันถาม The Heap

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.