Microsoft Dynamics AX general performance analysis scripts page 4
This is page 4 of 8 of the general performance analysis scripts online for the Performance Analyser 1.20 tool. See page 1 for the introduction. Use the links in the table below to navigate between pages.
– General analysis | |
---|---|
Analyse SQL Configuration |
Page 1 |
Analyse SQL Indexes | Page 2 |
Analyse SQL Queries | Page 3 |
Analyse Blocking | Page 4 |
Baseline – benchmark queries | Page 5 |
– AX Specific | |
Analyse AX Configuration | Page 6 |
Analyse AX Indexes | Page 7 |
Analyse AX Queries | Page 8 |
Analyse Blocking
SQLTRACE_BLOCKING
OPTIONAL_BLOCKING_QUERIES
/***************** SQLTRACE_BLOCKING **********************************
*
*
* NOTE:DYNPERF_Default_Trace_Start Job MUST be setup and running
*
*
**************************************************************************/
/********* This view reads the Trace files direct
*** from the @PATH parameter on the DYNPERF_Default_Trace_Start job *******/
SELECT *
FROM [BLOCKED_PROCESS_VW]
ORDER BY END_TIME DESC
–Run in the database to find a key lock
USE DYNAMICSDB –<—————–PUT YOUR DBNAME HERE
GO
SELECT o.name,
i.name
FROM sys.partitions p
JOIN sys.objects o
ON p.object_id = o.object_id
JOIN sys.indexes i
ON p.object_id = i.object_id
AND p.index_id = i.index_id
WHERE p.hobt_id = 72057709223149568 — key: 15:72057709223149568(aldk9nn887) as example
–Run in the database to find an object lock
USE DYNAMICSDB –<—————–PUT YOUR DBNAME HERE
GO
SELECT o.name,
i.name
FROM sys.partitions p
JOIN sys.objects o
ON p.object_id = o.object_id
JOIN sys.indexes i
ON p.object_id = i.object_id
AND p.index_id = i.index_id
WHERE o.object_id = 72057709223149568 — object: 15:72057709223149568 as example
–Summarize blocks by resource
SELECT WAIT_RESOURCE,
COUNT(WAIT_RESOURCE)
FROM (SELECT WAIT_RESOURCE
FROM [BLOCKED_PROCESS_VW]) AS A
GROUP BY WAIT_RESOURCE
ORDER BY 2 DESC
/******** Read the trace directly *************/
SELECT E.name,
F.*
–FROM fn_trace_gettable(‘C:\SQLTRACE\DYNAMICS_DEFAULT.trc’, DEFAULT) F,
–sys.trace_events EXECUTE
FROM fn_trace_gettable(isnull((SELECT TRACE_FULL_PATH_NAME
FROM DYNAMICSPERF_SETUP), (SELECT TOP 1 path
FROM sys.traces
WHERE path LIKE ‘%DYNAMICS_DEFAULT%’)), DEFAULT) F,
sys.trace_events E
WHERE EventClass = trace_event_id
ORDER BY StartTime DESC
/**********************************************************************************************************
*
* OPTIONAL_BLOCKING_QUERIES
*
* NOTE: The DYNPERF_Optional_Polling_for_Blocking must be run for any of the following queries to
* have data. This job is not intended to run full time but only optionally when more
* information is needed for api_cursorfetch sql statements in blocking conditions.
*
*
*
**********************************************************************************************************/
/*************************************************************************
Find all lead blockers with a wait time > 2 seconds from most recent to oldest
*************************************************************************/
SELECT *
FROM BLOCKS_VW
WHERE BLOCKER_STATUS = ‘Lead Blocker’
AND WAIT_TIME > 2000
ORDER BY BLOCKED_DTTM DESC
/*************************************************************************
Find all lead blockers from most recent to oldest
*************************************************************************/
SELECT *
FROM BLOCKS_VW
–WHERE BLOCKER_STATUS = ‘Lead Blocker’
ORDER BY BLOCKED_DTTM DESC
/*************************************************************************
Find all lead blockers with a wait time > 2 seconds on a specific date
from most recent to oldest
*************************************************************************/
SELECT *
FROM BLOCKS_VW
WHERE BLOCKER_STATUS = ‘Lead Blocker’
AND WAIT_TIME > 2000
AND BLOCKED_DTTM BETWEEN ‘5/20/2008’ AND ‘5/21/2008’
ORDER BY BLOCKED_DTTM DESC
/*************************************************************************
Which applications are the Lead Blocker the most
*************************************************************************/
SELECT BLOCKER_PROGRAM,
COUNT(*) AS NUMBER
FROM BLOCKS_VW
WHERE BLOCKER_STATUS = ‘Lead Blocker’
GROUP BY BLOCKER_PROGRAM
ORDER BY NUMBER DESC
/*************************************************************************
Which applications are Blocked the most
*************************************************************************/
SELECT BLOCKED_PROGRAM,
COUNT(*) AS NUMBER
FROM BLOCKS_VW
GROUP BY BLOCKED_PROGRAM
ORDER BY NUMBER DESC
/*************************************************************************
Which applications are causing the most waiting
*************************************************************************/
SELECT BLOCKER_PROGRAM,
SUM(WAIT_TIME) AS WAITTIME
FROM BLOCKS_VW
GROUP BY BLOCKER_PROGRAM
ORDER BY WAITTIME DESC
/*************************************************************************
Which applications are waiting the most
*************************************************************************/
SELECT BLOCKED_PROGRAM,
SUM(WAIT_TIME) AS WAITTIME
FROM BLOCKS_VW
GROUP BY BLOCKED_PROGRAM
ORDER BY WAITTIME DESC
/*************************************************************************
Which objects are waiting the most
*************************************************************************/
SELECT OBJECT_NAME,
SUM(WAIT_TIME) AS WAITTIME
FROM BLOCKS_VW
GROUP BY OBJECT_NAME
ORDER BY WAITTIME DESC
/*************************************************************************
Which databases are waiting the most
*************************************************************************/
SELECT DATABASE_NAME,
SUM(WAIT_TIME) AS WAITTIME
FROM BLOCKS_VW
GROUP BY DATABASE_NAME
ORDER BY WAITTIME DESC