วิธีรับสถิติการใช้งานของคุณ SQL Server ฐานข้อมูล

แบ่งปันเลย:

เมื่อทำงานในที่ใหญ่โตมาก SQL Server เป็นเรื่องปกติมากที่จะไม่มีใครในองค์กรรู้ว่าใครใช้ฐานข้อมูลเฉพาะ สถานการณ์นี้พบได้บ่อยมากหากมีระบบเดิมหลายระบบ ทำตามบทความนี้เพื่อระบุประสิทธิภาพของคุณ SQL Server มีการใช้ฐานข้อมูล

วิธีฮิต:

ในวิธีนี้ เราจะอ่านผลลัพธ์ของ sp_who2 และบันทึกลงในตาราง ขั้นตอนแรกคือการสร้างตารางโดยใช้สคริปต์นี้

CREATE TABLE T1 (
    session_id INT
    ,status_message VARCHAR(1000) NULL
    ,login_name SYSNAME NULL
    ,Name_of_Host SYSNAME NULL
    ,Blocked_By SYSNAME NULL
    ,Database_Name SYSNAME NULL
    ,Script_description VARCHAR(1000) NULL
    ,CPU_Time INT NULL
    ,Disk_Input_Output INT NULL
    ,Last_Batch VARCHAR(1000) NULL
    ,Name_of_Program VARCHAR(1000) NULL
    ,Session_ID_2 INT
    ,ID_of_Request INT NULL
    ,Log_Date DATETIME DEFAULT GETDATE()
    );

กำหนดเวลาและดำเนินการสคริปต์นี้เป็น SQL Server งาน. เราสามารถตรวจสอบตารางบันทึกได้ตลอดเวลาเพื่อระบุว่าฐานข้อมูลเป้าหมายของเรากำลังถูกใช้งานอยู่หรือไม่

INSERT INTO T1 (
    session_id
    ,status_message
    ,login_name
    ,Name_of_Host
    ,Blocked_By
    ,Database_Name
    ,Script_description
    ,CPU_Time
    ,Disk_Input_Output
    ,Last_Batch
    ,Name_of_Program
    ,Session_ID_2
    ,ID_of_Request
    )
EXECUTE sp_who2 active;

วิธีฮิต:

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

SELECT DB_NAME(sys.dm_exec_sessions.database_id) AS [Database Name]
    ,CASE 
        WHEN sys.dm_exec_sessions.is_user_process = 1
            THEN 'YES'
        WHEN sys.dm_exec_sessions.is_user_process = 0
            THEN 'NO'
        END AS [Is it User connection?]
    ,COUNT(sys.dm_exec_sessions.session_id) AS [Connections Count]
FROM sys.dm_exec_sessions
GROUP BY DB_NAME(sys.dm_exec_sessions.database_id)
    ,sys.dm_exec_sessions.is_user_process
ORDER BY 1
    ,2;

วิธีฮิต:

ก่อนพุชข้อมูลลงในตารางบันทึก ในวิธีที่ 1 เราไม่สามารถกรองชื่อฐานข้อมูลได้ อย่างไรก็ตาม เป็นไปได้ในวิธีที่ 2 และวิธีที่ 3

SELECT t1.objtype AS [Object]
    ,t1.refcounts AS [ReferredCount]
    ,t1.usecounts AS [Usage]
    ,t1.size_in_bytes / 1024 AS [KB Size]
    ,db_name(t3.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans t1
OUTER APPLY sys.dm_exec_text_query_plan(plan_handle, 0, - 1) t2
OUTER APPLY sys.dm_exec_sql_text(plan_handle) AS t3
WHERE db_name(t3.dbid) = 'ERP10_SandBox'
ORDER BY t1.usecounts DESC;

วิธีฮิต:

ตัวสร้างโปรไฟล์ SQLวิธีนี้มีประสิทธิภาพมากในการระบุการใช้ฐานข้อมูล แต่ต้องใช้ทรัพยากรมาก ใช่ เรากำลังพูดถึงตัวสร้างโปรไฟล์ เลือกเทมเพลตจาก Profiler หรือใช้เทมเพลตแบบกำหนดเองและติดตามการเชื่อมต่อฐานข้อมูล

ลบฐานข้อมูล

ลบฐานข้อมูลจากวิธีการที่ระบุไว้ข้างต้น คุณจะสามารถระบุได้ว่าฐานข้อมูลของคุณยังคงถูกใช้งานอยู่หรือไม่ หากคุณได้ข้อสรุปว่าไม่ได้ใช้งานอีกต่อไป แนวทางปฏิบัติที่ดีที่สุดคือแจ้งทีมที่เกี่ยวข้องว่าจะถูกลบออกจากเซิร์ฟเวอร์ ในวันที่อากาศดี ให้สำรองข้อมูลฐานข้อมูลที่ไม่ได้ใช้นี้ทั้งหมดแล้วปล่อยจากเซิร์ฟเวอร์ ต้องระมัดระวังไม่ให้ ทุจริต SQL Server db ในระหว่างกระบวนการนี้

บทนำผู้เขียน:

Neil Varley เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซมข้อผิดพลาดข้อมูล Outlook pst และผลิตภัณฑ์ซอฟต์แวร์กู้คืน excel ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด