• GreyBeard (11/17/2011)


    Comments posted to this topic are about the item <A HREF="/articles/Performance+Tuning/71784/">Performance Monitoring with Dynamic Management Views</A>

    I know this is OLD .. but still someone will stumble upon this and find it useful ... 😀

    Getting all the scripts to be dynamic ....instead of 'MSSQL$URINSTANCENAME:Databases'

    below is the code :

    -- Modified by Kin... to make the script dynamic irrespective of default of Named Instance

    /***

    * +-++-++-++-++-++-++-++-+ +-++-++-++-++-++-++-+ +-++-++-+

    * |O||r||i||g||i||n||a||l| |A||u||t||h||o||r||:| |R||o||n|

    * +-++-++-++-++-++-++-++-+ +-++-++-+++-+-+-++-++-+-++-++-+

    * |M||o||d||i||f||i||e||d| |B||y| |:| |K||i||n|

    * +-++-++-++-++-++-++-++-+ +-++-+ +-+ +-++-++-+

    *Ref: http://www.sqlservercentral.com/articles/Performance+Tuning/71784/

    *Modification:Made it dynamic to work with Default and Named Instances

    Divide by Zero Error is resolved by use of COALESCE and NULLIF

    */

    --Returns the buffer cache hit ratio

    SELECT ROUND(CAST(A.cntr_value1 AS NUMERIC) / CAST(B.cntr_value2 AS NUMERIC), 3) AS Buffer_Cache_Hit_Ratio

    FROM (

    SELECT cntr_value AS cntr_value1

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Buffer cache hit ratio'

    ) AS A

    ,(

    SELECT cntr_value AS cntr_value2

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Buffer cache hit ratio base'

    ) AS B

    --Returns the page life expectancy in minutes

    SELECT round((CAST(cntr_value AS NUMERIC) / 60), 1) AS 'Page Life Expectancy in Minutes'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Page life expectancy'

    --Returns pages read per second

    SELECT cntr_value AS 'Page reads per Second'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Page reads/sec'

    --Returns pages written per second

    SELECT cntr_value AS 'Page writes per Second'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Page writes/sec'

    --Returns Free list Stall per second

    SELECT cntr_value AS 'Free List Stalls per second'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Free list stalls/sec'

    --Returns Lazy writes per second

    SELECT cntr_value AS 'Lazy writes per second'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Buffer Manager'

    AND counter_name = 'Lazy writes/sec'

    --Returns Total SQL Server Memory

    SELECT cntr_value AS 'Total SQL Server Memory'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Memory Manager'

    AND counter_name = 'Total Server Memory (KB)'

    --Average Latch Wait Time

    SELECT ROUND(CAST(A.cntr_value1 AS NUMERIC) / CAST(B.cntr_value2 AS NUMERIC), 3) AS [Average Latch Wait Time]

    FROM (

    SELECT cntr_value AS cntr_value1

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Latches'

    AND counter_name = 'Average Latch Wait Time (ms)'

    ) AS A

    ,(

    SELECT cntr_value AS cntr_value2

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Latches'

    AND counter_name = 'Average Latch Wait Time Base'

    ) AS B

    -- Returns Pending memory grants

    SELECT cntr_value AS 'Pending memory grants'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Resource Pool Stats'

    AND counter_name = 'Pending memory grants count'

    -- Returns Pending Disk IO Count

    SELECT [pending_disk_io_count] AS [Pending Disk IO Count]

    FROM sys.dm_os_schedulers

    -- Returns the number of user connections

    SELECT cntr_value AS [User Connections]

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':General Statistics'

    AND counter_name = 'User Connections'

    --Returns CPU Utilization Percentage

    SELECT coalesce((ROUND(CAST(A.cntr_value1 AS NUMERIC) / CAST(nullif(B.cntr_value2,0) AS NUMERIC), 3)),0) * 100 AS [CPU Utilization Percentage]

    FROM (

    SELECT cntr_value AS cntr_value1

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Resource Pool Stats'

    AND counter_name = 'CPU usage %'

    ) AS A

    ,(

    SELECT cntr_value AS cntr_value2

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Resource Pool Stats'

    AND counter_name = 'CPU usage % base'

    ) AS B

    --Returns Data File Size

    SELECT instance_name AS 'DB Name'

    ,cntr_value AS 'Data File Size'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Databases'

    AND counter_name = 'Data File(s) Size (KB)'

    --Remaining Log File KB

    SELECT A.instance_name AS 'DB'

    ,CAST(Size AS NUMERIC) - CAST(Used AS NUMERIC) AS [Available Log File KB]

    FROM (

    SELECT instance_name

    ,cntr_value AS Size

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Databases'

    AND counter_name = 'Log File(s) Size (KB)'

    ) AS A

    INNER JOIN (

    SELECT instance_name

    ,cntr_value AS Used

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Databases'

    AND counter_name = 'Log File(s) Used Size (KB)'

    ) AS B ON A.instance_name = B.instance_name

    -- Returns percent Log File Used

    SELECT instance_name AS 'DB'

    ,cntr_value AS 'Percent Log Used'

    FROM sys.dm_os_performance_counters

    WHERE counter_name = 'Percent Log Used'

    --Returns Transactions per second

    SELECT instance_name AS 'DB Name'

    ,cntr_value AS 'Transactions per second'

    FROM sys.dm_os_performance_counters

    WHERE object_name = CASE

    WHEN SERVERPROPERTY('InstanceName') IS NULL

    THEN 'SQLServer'

    ELSE 'MSSQL$' + CAST(SERVERPROPERTY('InstanceName') AS VARCHAR)

    END + ':Databases'

    AND counter_name = 'Transactions/sec'

    ______________________________________________________________________________________________________________________________________________________________________________________
    HTH !
    Kin
    MCTS : 2005, 2008
    Active SQL Server Community Contributor 🙂