Slik får du bruksstatistikken til din SQL Server databaser

Når du jobber i en veldig stor SQL Server miljø, er det veldig vanlig at ingen i organisasjonen vet hvem som bruker en bestemt database. Dette scenariet er veldig vanlig hvis det er flere eldre systemer. Følg denne artikkelen for å identifisere hvor effektivt du SQL Server databaser brukes.

Metode 1:

I denne metoden skal vi lese utdataene til sp_who2 og fange det i en tabell. Det første trinnet er å lage tabellen ved å bruke dette skriptet.

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()
    );

Planlegg og utfør dette skriptet som en SQL Server Jobb. Vi kan se gjennom loggtabellen når som helst for å identifisere om vår target-databasen blir brukt.

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;

Metode 2:

I motsetning til metoden ovenfor, hvis du ikke er interessert i for mye detaljer og bare ville vite om databasen er i bruk eller ikke, så passer dette skriptet best. Hvis du bruker SQL Server med eldre versjon enn 2014, vil ikke dette fungere. Utdataene fra dette skriptet viser 3 felt. De første feltene gir informasjon om databasenavnet. Dette er nøkkelfeltet for oss, da dette vil hjelpe oss å identifisere om vår target-databasen er i bruk. Det andre feltet vil hjelpe oss med å klassifisere forbindelsene til databasen som brukerforbindelser vs SQL Server interne forbindelser. Den siste kolonnen viser antall tilkoblinger til databasen.

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;

Metode 3:

Før vi skyver dataene inn i loggtabellen, i metode 1, kan vi ikke gjøre et filter på databasenavn. Det er imidlertid mulig i metode 2 og metode 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;

Metode 4:

SQL-profilerDenne metoden er veldig kraftig for å identifisere databasebruk, men den er veldig ressurskrevende. Ja, vi snakker om profiler. Velg en mal fra Profiler eller bruk en egendefinert mal og spor databasetilkoblinger.

Fjern databasen

Fjern databasenFra ovennevnte metoder vil du kunne identifisere om databasen din fortsatt brukes eller ikke. Hvis du kommer til en konklusjon om at den ikke brukes lenger, er den beste praksisen å informere de respektive teamene om at den vil bli fjernet fra serveren. På en fin dag kan du ta en FULL sikkerhetskopi av denne ubrukte databasen og slippe den fra serveren. Man må passe på å ikke korrupt SQL Server db under denne prosessen.

Forfatterintroduksjon:

Neil Varley er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparer Outlook pst-datafeil og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.