DynamicsPerf : AX DM Companies to Company user integration query slow due to HASH join

Encore une fois, selon Dynamics Perf, la requête la plus "couteuse" de mon environnement Dynamics AX provient de Management Reporter. Et encore une fois, c'est la requête responsable pour l'intégration de la sécurité entre Management Reporter et Dynamics AX. 

Lorsque j'exécute la requête manuellement, elle prend 14 heures à compléter et me retourne 14000 lignes. Pendant les 14 heures d'exécution, le CPU du serveur SQL tourne à l'entour de 25%. Cette requête ne causait pas problème il y a deux semaines, qu'est-ce qui a changé ? J'ai découvert que les permissions à certains utilisateurs ont été modifiées. En effet, chaque rôle assigné à un utilisateur a été modifier afin d'être appliqué à certaines entités légales au lieu de toutes les entités légales.

Bien sûr, le client ne veut pas changer les permissions en place, j'ai donc ouvert un billet avec Microsoft. On m'a dit que c'est un bug connu: 

Bug 3794820: AX DM Companies to Company user integration query slow due to HASH join

Quoique la requête ne soit pas optimale dans mon cas, Microsoft n'a pas l'intention de corriger le problème puisque la requête offre une bonne performance dans une majorité des cas. Heureusement, une autre solution s'est offert, celle d'activer le SQL Trace Flag 4199.

Suite à l'activation du flag 4199, la requête prend 35 min à exécuter au lieu de 14 heures. N'oubliez pas que cette tâche est configurée pour être exécuté à toutes les 5 minutes par Management Reporter, je recommande de modifier la fréquence à 24 heures ici : DynamicsPerf : Requêtes Longues (Long Queries)

Voici la requête en question:

select T.USERKEY, T.NAME, T.ALIAS, T.DOMAIN, T.SECURITYID, MAX(T.GENERALLEDGERROLETYPE) GENERALLEDGERROLETYPE, T.COMPANYKEY, T.ISENABLED
from (
select UI.RECID USERKEY, UI.NAME, UI.NETWORKALIAS ALIAS, UI.NETWORKDOMAIN DOMAIN, SID SECURITYID, 
CASE st.AOTNAME 
WHEN 'SysSecSecurityMaintain' THEN 5
WHEN 'LedgerBalanceSheetDimMaintain' THEN 4
WHEN 'LedgerFinancialJournalReportBGenerate' THEN 3
WHEN 'LedgerBalanceSheetDimPrintGenerate' THEN 3
WHEN 'LedgerViewFinancialStatement' THEN 2
END GENERALLEDGERROLETYPE, l.RECID COMPANYKEY, UI.ENABLE ISENABLED
from [MicrosoftDynamicsAX_TESSIER]..USERINFO UI
inner join [MicrosoftDynamicsAX_TESSIER]..SECURITYUSERROLE sur on UI.ID = sur.USER_ and UI.PARTITION = sur.PARTITION
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLE sr on sur.SECURITYROLE = sr.RECID
and (GETUTCDATE() between sur.VALIDFROM and sur.VALIDTO OR 
(sur.VALIDFROM = '1/1/1900' and sur.VALIDTO = '1/1/1900'))
inner join [MicrosoftDynamicsAX_TESSIER]..SECURITYUSERROLECONDITION c on c.SECURITYUSERROLE = sur.RECID and c.PARTITION = sur.PARTITION
inner join (SELECT T1.SECURITYTASK AS SECURITYTASK
,T2.SECURITYROLE AS SECURITYROLE
FROM [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLETASKGRANT T1
CROSS JOIN [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLEEXPLODEDGRAPH T2
WHERE (T1.SECURITYROLE = T2.SECURITYSUBROLE)
GROUP BY T1.SECURITYTASK
,T2.SECURITYROLE) v on v.SECURITYROLE = sr.RECID 
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYTASKEXPLODEDGRAPH g on g.SECURITYTASK = v.SECURITYTASK
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYTASK st on g.SECURITYSUBTASK = st.RECID
inner join (Select l.RECID, l.PARTITION, CI.DATAAREA from [MicrosoftDynamicsAX_TESSIER]..LEDGER l 
inner hash join [MicrosoftDynamicsAX_TESSIER]..DIRPARTYTABLE CI on CI.PARTITION = l.PARTITION and CI.INSTANCERELATIONTYPE = 41 and l.PRIMARYFORLEGALENTITY = CI.RECID) l on UI.PARTITION = l.PARTITION and l.DATAAREA = c.DATAAREA
Where 
UI.EXTERNALUSER = 0 AND
UI.[SID] != '' AND
UI.[ACCOUNTTYPE] = 0 AND
sur.ASSIGNMENTSTATUS = 1 AND
st.AOTNAME in (
'SysSecSecurityMaintain',
'LedgerBalanceSheetDimMaintain', 
'LedgerFinancialJournalReportBGenerate', 
'LedgerBalanceSheetDimPrintGenerate',
'LedgerViewFinancialStatement')
union all
-- get users and their assigned tasks for all companies where the task hasn't been constrained to a company
select UI.RECID USERKEY, UI.NAME, UI.NETWORKALIAS ALIAS, UI.NETWORKDOMAIN DOMAIN, SID SECURITYID, 
CASE st.AOTNAME 
WHEN 'SysSecSecurityMaintain' THEN 5
WHEN 'LedgerBalanceSheetDimMaintain' THEN 4
WHEN 'LedgerFinancialJournalReportBGenerate' THEN 3
WHEN 'LedgerBalanceSheetDimPrintGenerate' THEN 3
WHEN 'LedgerViewFinancialStatement' THEN 2
END GENERALLEDGERROLETYPE, l.RECID COMPANYKEY, UI.ENABLE ISENABLED
from [MicrosoftDynamicsAX_TESSIER]..USERINFO UI
inner join [MicrosoftDynamicsAX_TESSIER]..SECURITYUSERROLE sur on UI.ID = sur.USER_ and UI.PARTITION = sur.PARTITION
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLE sr on sur.SECURITYROLE = sr.RECID
and (GETUTCDATE() between sur.VALIDFROM and sur.VALIDTO OR 
(sur.VALIDFROM = '1/1/1900' and sur.VALIDTO = '1/1/1900'))
inner join (SELECT T1.SECURITYTASK AS SECURITYTASK
,T2.SECURITYROLE AS SECURITYROLE
FROM [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLETASKGRANT T1
CROSS JOIN [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLEEXPLODEDGRAPH T2
WHERE (T1.SECURITYROLE = T2.SECURITYSUBROLE)
GROUP BY T1.SECURITYTASK
,T2.SECURITYROLE) v on v.SECURITYROLE = sr.RECID  
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYTASKEXPLODEDGRAPH g on g.SECURITYTASK = v.SECURITYTASK
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYTASK st on g.SECURITYSUBTASK = st.RECID
inner join (Select l.RECID, l.PARTITION from [MicrosoftDynamicsAX_TESSIER]..LEDGER l 
inner hash join [MicrosoftDynamicsAX_TESSIER]..DIRPARTYTABLE CI on CI.PARTITION = l.PARTITION and CI.INSTANCERELATIONTYPE = 41 and l.PRIMARYFORLEGALENTITY = CI.RECID) l on UI.PARTITION = l.PARTITION
Where 
UI.EXTERNALUSER = 0 AND
UI.[SID] != '' AND
UI.[ACCOUNTTYPE] = 0 AND
sur.ASSIGNMENTSTATUS = 1 AND
st.AOTNAME in (
'LedgerBalanceSheetDimMaintain', 
'LedgerFinancialJournalReportBGenerate', 
'LedgerBalanceSheetDimPrintGenerate',
'LedgerViewFinancialStatement',
'SysSecSecurityMaintain')
and not exists (select 1 from SECURITYUSERROLECONDITION c where c.SECURITYUSERROLE = sur.RECID and c.PARTITION = sur.PARTITION)
union all
-- get all administrators for all companies where the admin's aren't limited to specific companies
select UI.RECID, UI.NAME, UI.NETWORKALIAS, UI.NETWORKDOMAIN, SID, 5 RoleType, l.RECID, UI.ENABLE ISENABLED
from [MicrosoftDynamicsAX_TESSIER]..USERINFO UI
inner join [MicrosoftDynamicsAX_TESSIER]..SECURITYUSERROLE sur on UI.ID = sur.USER_ and UI.PARTITION = sur.PARTITION
inner join [MicrosoftDynamicsAX_TESSIER_Model]..SECURITYROLE sr on sr.RECID = sur.SECURITYROLE
and (GETUTCDATE() between sur.VALIDFROM and sur.VALIDTO OR 
(sur.VALIDFROM = '1/1/1900' and sur.VALIDTO = '1/1/1900'))
inner join (Select l.RECID, l.PARTITION from [MicrosoftDynamicsAX_TESSIER]..LEDGER l 
inner hash join [MicrosoftDynamicsAX_TESSIER]..DIRPARTYTABLE CI on CI.PARTITION = l.PARTITION and CI.INSTANCERELATIONTYPE = 41 and l.PRIMARYFORLEGALENTITY = CI.RECID) l on UI.PARTITION = l.PARTITION
where
UI.EXTERNALUSER = 0 AND
UI.[SID] != '' AND
UI.[ACCOUNTTYPE] = 0 AND
sur.ASSIGNMENTSTATUS = 1 AND
AOTNAME in ('SysSecSecurityAdministrator') 
)
T
Group by T.USERKEY, T.NAME, T.ALIAS, T.DOMAIN, T.SECURITYID,  T.COMPANYKEY, T.ISENABLED
order by T.COMPANYKEY

AX 2012 R3 Export & Import environment configurations

Parmi les tâches quotidiennes d'un administrateur de Système Dynamics AX, on y trouve entre autres le rafraichissement des environnements. La tâche consiste à copier un environnement vers un autre. Plusieurs tâches doivent être executé pour compléter le rafraichissement d'un environnement. Entre autres, il faut reconfigurer certains composants, par exemple la configuration SSRS ou tout simplement l'URL du serveur Help.

J'ai mis en ligne deux scripts qui permet d'exporter et importer la configuration dans un fichier XML different composants d'un environnement Dynamics AX . Avant d'effectuer la restauration des base de données, j'exporte la configuration AX. Ensuite je performe la restauration de la BD et re-import la configuration. J'ai mis mes scripts sur codeplex.



Dynamics 365 for Operation : DNS record is already used by another public IP.

Lors du déploiement de Dynamics 365 for opération - Démo (Release 1611 - ARM enabled) v61, j'ai reçu le message d'erreur suivant:

ARM Deployment [DEMO] finished with state [Failed], error details
DNS record demodemo.eatuse.cloudapp.azure.com is already used by another public IP.




J'ai donné le nom DEMO à mon environnement. Il semble que Microsoft a oublié de valider la disponibilité du nom "demo" lors de prises d'information.

Le déploiement de l'environnement a été compléter correctement et je pouvais mon l'adresse IP public avec le nouveau nom:

Dynamics AX 2012 : Crash du client AX sur les machines Citrix

Un de mes clients avait un problème de déconnexion persistant. Le problème semblait aléatoire parmi tous ses utilisateurs qui utilisaientt Citrix. Nous étions incapables de reproduire le problème.

Les messages d’erreur suivants se trouvaient sur le serveur AOS:

Object Server 01:  No ping from client session 6 (User: mathieu, ClientType: GUI). Terminating the session.
Object Server 01:  No ping from client session 20 (User: mathieu, ClientType: Worker). Terminating the session.
Object Server 01:  No ping from client session 21 (User: mathieu, ClientType: Worker). Terminating the session.

La fenêtre du client AX disparaissait tout simplement ou l’utilisateur recevait le message suivant:

The server is unavailable. Check your configuration and network connection and try again.

Sur la machine Citrix, l’erreur était la suivante:

RPC exception 1726 occurred in session 6 process is AX32.exe thread is 5964 (user: mathieu, ClientType: GUI)

Finalement, il existe un hotfix pour ce problème;


Dynamics 365 for Operations : User account from identify provider does not exist in 'Microsoft'

Le déploiement de Dynamics AX 365 for Operations requiert l'activation de ARM. Lors du processus d'activation, j'ai eu deux problèmes distincts en suivant les etapes de ce lien: Azure Resource Manager onboarding.

Tout d'abord, lors de l'activation, j'ai reçu le message d'erreur suivant:

An Unexpected error has occured. Please try again later. If the problem persists contact support for further assistamce.

Pour corriger ce problème, j'ai utilisé le Azure Tenant Domain lié à O365 mathdax.ca au lieu de mtessier.onmicrosoft.com. Malheureusement, je ne sais pas pourquoi je ne peux pas utiliser mtessier.onmicrosoft.com.



Le deuxième problème est survenu lors de l'autorisation. Après avoir cliqué sur le lien Authorize, je dois m'authentifier et lorsque je tente d'utiliser mon compte associer à Azure, je revois le message d'erreur suivant:

User Account 'mtessier@hitachi-solutions.com' from identity provider 'live.com' does not exist in tenant 'Microsoft' and cannot access application 'ID' in that tenant.



Le problème est dû au fait que je veux utiliser un abonnement Azure qui n'est pas lié à mon compte O365. La solution se trouve ici: Deal with Dynamics Deployment Services [wsfed-enabled]

Dynamics 365 for Operations : Permissions nécessaires pour pouvoir déployer

Réussir à déployer Dynamics 365 for Operations est tout un défie ! Je voulais documenter quelques cas dont j’ai fait face. Le premier: avoir les accès nécessaires.

Tout d’abord, vous devez avoir un compte qui répond aux critères afin de pouvoir faire le déploiement.

Si vous êtes partenaire, mais que vous n’utilisez pas un compte O365, vous serez incapable de créer un projet Dynamics 365 for Operations.



Si vous êtes un prospect avec un compte Office 365, vous allez pouvoir créer un projet Dynamics 365 for Operation, mais incapable d’effectuer un deploiement. Le signe "+" est manquant.



Afin de pouvoir créer un projet Dynamics 365 for Operation ainsi que l'option de déployer, vous devez être partenaire ou client AX, mais aussi utiliser un compte Office 365.






Dynamics 365 : Déploiement et administration

Voici l'information que j'ai trouver sur le déploiement et l'administration de Dynamics 365.

Dynamics 365

TechNet
  • Microsoft Dynamics 365 IT Pro Technical Library
    • Dynamics 365 (online and on-premises)
      • Deployment and Administration
        • Subscription Management for Dynamics 365 (online)
          • Release history
          • Important information for CRM Online customers
          • Switch from Dynamics CRM Online to Dynamics 365 (online)
          • Try Dynamics 365 (online)
          • Manage Microsoft Dynamics 365 (online) updates
          • Policies and Communications for Dynamics 365 (online)
          • Restrict access to Dynamics 365 (online) with trusted IP rules
          • Get started administering Microsoft Dynamics 365 (online)
          • Manage subscriptions, licenses, and user accounts
          • Manage Microsoft Dynamics 365 (online) instances
          • Manage email notifications
          • Migrate Microsoft Dynamics 365 (online) to Microsoft Dynamics 365 (on-premises)
          • Accessibility in Microsoft Dynamics CRM
        • Administering Dynamics 365
          • What's new for administrators and customizers in Microsoft Dynamics 365
          • After you update: next steps to success with Microsoft Dynamics CRM
          • Getting started
          • Manage security, users, and teams
          • Audit data and user activity
          • Customize your Dynamics 365 system
          • Manage configuration data
          • Manage product catalog configuration
          • Manage your data
          • Set up and manage phones and tablets
          • Integrate (synchronize) your email system with Microsoft Dynamics 365
          • Extend Dynamics 365 with integration and solutions
          • Microsoft Cognitive Services integration with Dynamics 365
          • Add interoperation features to Microsoft Dynamics 365 (online)
          • Add Office 365 Online services
        • Reporting & Analytics for Dynamics 365
          • Get started writing reports
          • Working with Microsoft Dynamics 365 reports
          • Working with SQL-based reports (Dynamics 365 on-premises only)
          • Test and troubleshoot reports
          • Publish reports
          • Report considerations and best practices
          • Example reports
          • Copy reports between Microsoft Dynamics 365 (on-premises) deployments
          • Customize Microsoft Dynamics 365 Power BI content packs
    • Dynamics 365 (on-premises)

Dynamics 365 for Operations Help Wiki

Dynamics 365 Help & Training

Dynamics 365 : Comment ajouter une instance de non-production

Il est possible d'ajouter des instances de Dynamics 365 pour vos environnements autres que Production. Pour ce faire, il faut cliquer sur Admin centers --> Dynamics 365


Par défaut, il y a déjà une instance Sandbox, mais elle n'est pas configuré. Cliquer sur l'instance et cliquer sur Configure


Sélectionner les applications que vous désirez dans votre nouvelle instance


Donner un nom à votre instance et taper une URL unique.


Sélectionner le groupe de sécurité et la langue et cliquer sur Configure



Après quelques secondes, l'instance est prête.


Dynamics 365 : Comment activer D365 en tant que partenaire Gold

Il y a un mois, j'avais activé la période d'essai pour Dynamics 365 Enterprise dans mon abonnement Office 365. Je me suis évidemment retrouvé avec une un service expiré 30 jours plus tard. 



En tant que Partenaire Gold de Microsoft, j'ai accès en mode pré-payer a certain services en ligne de Microsoft. J'en ai donc profite pour activer Dynamics 365 Plan 1.

Donc, voici les étapes pour activer Dynamics 365 en tant que partenaire Microsoft.

Premièrement, vous devez avoir access à Partner Network. Ouvrer Partner Membership Center a cette adresse: https://partners.microsoft.com

Ensuite, vous devez cliquer sur Download Software.

Ensuite, vous devez cliquer sur Microsoft Online Services


Sélectionner Microsoft Dynamics 365 Plan 1



Ensuite, exploser Gold Core Benefits et copier une clé. Dans la section Special instructions, cliquer sur le lien.


Vous pouvez ajouter votre clé a n'importe quel souscription. Il suffit de cliquer sur Sign In


Vous allez devoir vous connecter a votre souscription et ensuite vous allez pouvoir coller la clé


Cliquer Next et confirmer l'ajout de la clé !





DynamicsPerf : D'où viennent les données ?

J'aime beaucoup l'outil DynamicsPerf afin d'analyser les performances de mes environnements Dynamics AX. Toutefois, ce n'est pas un outil très user friendly. Il arrive souvent que l'outil collecte partiellement les données à l'insu du DBA ! Je vais mettre ici l'information et les requêtes TSQL qui me permettent de troubleshooter l'installation de DynamicsPerf.

DATABASES_2_COLLECT

Une requête qui me donne les bases de données à collecter

SELECT * FROM DATABASES_2_COLLECT




CAPTURE_LOG

Une requête qui me retourne les logs

SELECT * FROM CAPTURE_LOG ORDER BY STATS_TIME DESC

Une requête qui me retourne les logs qui contiennent le mot FAILED

SELECT * FROM CAPTURE_LOG
WHERE TEXT LIKE '%FAILED%'
ORDER BY STATS_TIME DESC




DYNPERF_TASK_HISTORY

Une requête qui me retourne l'historique des taches exécutées

SELECT DTS.TASK_DESCRIPTION,
                DTH.*,
                DTS.*
FROM   DYNPERF_TASK_HISTORY DTH
               INNER JOIN DYNPERF_TASK_SCHEDULER DTS
               ON DTH.TASK_ID = DTS.TASK_ID
ORDER  BY DTH.TASK_ID 


SQL JOBS

Cette requête me retourne l'information sur les SQL Jobs de Dynamics Perf

SELECT 
sJOB.name AS [Job Name],

CASE
WHEN sSCH.schedule_uid IS NULL THEN 'No'
ELSE 'Yes'
END AS [Schedule Enabled],

CASE sJOB.enabled
WHEN 1 THEN 'Yes'
WHEN 0 THEN 'No'
END AS [Job Enabled],

CASE sJSTP.last_run_outcome
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Succeeded'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Canceled'
WHEN 5 THEN 'Unknown'
END AS [Last Run Outcome],

CASE 
WHEN [sJSTP].[last_run_date] IS NULL OR [sJSTP].[last_run_time] IS NULL OR [sJSTP].[last_run_date] = 0 OR [sJSTP].[last_run_time] = 0 THEN NULL
ELSE CAST(CAST([sJSTP].[last_run_date] AS CHAR(8)) + ' ' + STUFF(STUFF(RIGHT('000000' + CAST([sJSTP].[last_run_time] AS VARCHAR(6)),  6), 3, 0, ':'), 6, 0, ':')  AS SMALLDATETIME)
END AS [Last Run Date Time],

STUFF(STUFF(RIGHT('000000' + CAST([sJSTP].[last_run_duration] AS VARCHAR(6)),  6) , 3, 0, ':') , 6, 0, ':') AS [Last Run Duration (HH:MM:SS)],

CASE
WHEN [sJOBSCH].[next_run_date] IS NULL OR [sJOBSCH].[next_run_time] IS NULL OR [sJOBSCH].[next_run_date] = 0 OR [sJOBSCH].[next_run_time] =0  THEN NULL
ELSE CAST(CAST([sJOBSCH].[next_run_date] AS CHAR(8)) + ' ' + STUFF(STUFF(RIGHT('000000' + CAST([sJOBSCH].[next_run_time] AS VARCHAR(6)),  6), 3, 0, ':'), 6, 0, ':') AS SMALLDATETIME)
END AS [Next Run Date Time],

CASE sSCH.freq_type
WHEN 1 THEN 'One time only'
WHEN 4 THEN 'Daily'
WHEN 8 THEN 'Weekly'
WHEN 16 THEN 'Monthly'
WHEN 32 THEN 'Monthly'
WHEN 64 THEN 'Runs when the SQL Server Agent service starts'
WHEN 128 THEN 'Runs when the computer is idle'
END AS [Frequency],
 
sJOB.date_created AS [Creation Date]
FROM
msdb.dbo.sysjobs AS sJOB
LEFT JOIN msdb.dbo.syscategories AS sCAT ON sJOB.category_id = sCAT.category_id
LEFT JOIN msdb.dbo.sysjobsteps AS sJSTP ON sJOB.job_id = sJSTP.job_id AND sJOB.start_step_id = sJSTP.step_id
LEFT JOIN msdb.dbo.sysjobschedules AS sJOBSCH ON sJOB.job_id = sJOBSCH.job_id
LEFT JOIN msdb.dbo.sysschedules AS sSCH ON sJOBSCH.schedule_id = sSCH.schedule_id
WHERE sJOB.name IN ('DYNPERF_PROCESS_TASKS_LOW_PRIORITY','DYNPERF_PURGE_QUERYPLANS','DYNPERF_COLLECT_AOS_CONFIG','DYNPERF_PROCESS_TASKS','DYNPERF_CAPTURE_STATS','DYNPERF_CAPTURE_SSRS')



TABLES

Je me sers de la requête suivante pour savoir le nombre de lignes par table. Je suis ainsi capable d'identifier plus facilement les données qui manquent.

SELECT  t.NAME AS TableName,
                 p.[Rows]
FROM  sys.tables t
INNER JOIN sys.partitions p ON t.object_id = p.object_id
WHERE t.NAME NOT LIKE '%CRM%' AND index_id < 2
ORDER BY ROWS ASC, TableName ASC





Il arrive que je trouve certaines tables avec aucune donnée. Il est difficile de savoir la raison. Afin de m'aider à trouver le problème, j'ai identifié la source de données pour chaque table de DynamicsPerf. Par exemple, je sais maintenant que les données dans QUERY_STATS proviennent d'une Store procédure nommée DYNPERF_COLLECT_QUERY_STATS qui est exécutée par une SQL Job nommée DYNPERF_CAPTURE_STATS


Type
Name
Tables
Schedule
AX Batch Job
AOTExport
dbo.AX_BATCHJOB_DETAIL
dbo.AX_BATCHSERVERGROUP_CONFIG
dbo.AX_CONFIGURATIONKEY_DETAIL
dbo.AX_INDEX_DETAIL
dbo.AX_SERVER_CONFIG
dbo.AX_TABLE_DETAIL

SQL Job
DYNPERF_COLLECT_AOS_CONFIG
dbo.AOS_EVENTLOG
dbo.AOS_REGISTRY
Every day at 6AM
SQL Query
4-ConfigureDBs to Collect.sql
dbo.DATABASES_2_COLLECT
Manual
SQL Query
5-Setup SSRS Data Collection.sql
dbo.SSRS_CONFIG
Manual

SQL JOB - DYNPERF_CAPTURE_STATS
Type
Name
Tables
Schedule (default)
Store Proc
DYNPERF_COLLECT_QUERY_STATS
dbo.QUERY_STATS
Every 5 minutes
Store Proc
DYNPERF_COLLECT_INDEXSTATS
dbo.INDEX_DETAIL
Every 1 hour
Store Proc
DYNPERF_COLLECT_SQL_TEXT
dbo.QUERY_TEXT
Every 5 minutes
Store Proc
DYNPERF_COLLECT_QUERY_PLANS
dbo.QUERY_PLANS_PARSED
Every 5 minutes
Store Proc
DYNPERF_COLLECT_SYSOBJECTS
dbo.DYNSYSOBJECTS
dbo.DYNSYSCOLUMNS
dbo.DYNSYSINDEXES
dbo.DYNSYSCOLUMNS
Every 1 day
Store Proc
DYNPERF_COLLECT_WAITSTATS
dbo.WAIT_STATS
Every 1 hour
Store Proc
DYNPERF_COLLECT_VIRTIALIO_DISKSTATS
dbo.DISKSTATS
Every 1 hour
Store Proc
DYNPERF_COLLECT_CHANGE_DATA_CONTROL
dbo.CDC
Every 1 day
Store Proc
DYNPERF_COLLECT_CHANGE_TRACKING
dbo.SQL_CHANGETRACKING_DBS
dbo.SQL_CHANGETRACKING_TABLES
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_DATA_BUFFER_CACHE
dbo.BUFFER_DETAIL
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_DATABASES
dbo.SQL_DATABASES
Every 1 day
Store Proc
DYNPERF_COLLECT_DATABASE_REPLICATION_INFO
dbo.SQL_REPLICATION
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_CONFIGURATION
dbo.SQL_CONFIGURATION
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_DATABASE_FILES
dbo.SQL_DATABASEFILES
Every 1 day
Store Proc
DYNPERF_COLLECT_DATABASE_VLFS
dbo.LOGINFO
Every 1 day
Store Proc
DYNPERF_COLLECT_INDEX_USAGE_STATS
dbo.INDEX_USAGE_STATS
Every 1 hour
Store Proc
DYNPERF_COLLECT_INDEX_OPERATIONAL_STATS
dbo.INDEX_OPERATIONAL_STATS
Every 1 hour
Store Proc
DYNPERF_COLLECT_SQL_JOBS
dbo.SQL_JOBS
Every 1 day
Store Proc
DYNPERF_COLLECT_SERVERINFO
dbo.SERVERINFO
Every 1 day
Store Proc
DYNPERF_COLLECT_SERVER_REGISTRY
dbo.SERVER_REGISTRY
Every 1 day
Store Proc
DYNPERF_COLLECT_SERVER_DISKVOLUMES
dbo.SERVER_DISKVOLUMES
Every 1 week
Store Proc
DYNPERF_COLLECT_SERVER_OS_INFO
dbo.SERVER_OS_VERSION
Every 1 week
Store Proc
DYNPERF_COLLECT_TRIGGER_INFO
dbo.TRIGGER_TABLE
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_TRACEFLAGS_RUNNING
dbo.TRACEFLAGS
Every 1 day
Store Proc
DYNPERF_COLLECT_SQL_ERRORLOG
dbo.SQLERRORLOG
Every 5 minutes
Store Proc
DYNPERF_COLLECT_DATABASE_STATISTICS
dbo.INDEX_STAT_HEADER
dbo.INDEX_DENSITY_VECTOR
dbo.INDEX_HISTOGRAM
Every 1 week
Store Proc
DYNPERF_COLLECT_SQL_PLAN_GUIDES
dbo.SQL_PLAN_GUIDES
Every 1 day
Store Proc
DYNPERF_COLLECT_PERF_COUNTERS
dbo.PERF_COUNTER_DATA
Every 5 minutes
Store Proc
DYNPERF_COLLECT_PERF_COUNTERS_AZURE
dbo.PERF_COUNTER_DATA
Every 5 minutes
Store Proc
DYNPERF_COLLECT_AZURE_EVENTLOG
dbo.AZURE_EVENTS
Every 5 minutes
Store Proc
DYNPERF_COLLECT_AX_SQLTRACE
dbo.AX_SQLTRACE
Every 5 minutes
Store Proc
DYNPERF_COLLECT_AX_SQLSTORAGE
dbo.AX_SQLSTORAGE
Every 1 week
Store Proc
DYNPERF_COLLECT_AX_USERINFO
dbo.AX_USERINFO
Every 1 day
Store Proc
DYNPERF_COLLECT_AX_NUMBERSEQUENCE
dbo.AX_NUM_SEQUENCES
Every 1 hour
Store Proc
DYNPERF_COLLECT_AX_SYSGLOBALCONFIG
dbo.AX_SYSGLOBALCONFIGURATION
Every 1 day
Store Proc
DYNPERF_COLLECT_AX_USERINFO
dbo.AX_USERINFO
Every 1 day

SQL JOB - DYNPERF_CAPTURE_SSRS

Type
Name
Tables
Schedule (default)
Store Proc
DYNPERF_COLLECT_SSRS_EXECUTIONLOG
dbo.WRK_TZ_SQL_INFO
dbo.SSRS_EXECUTIONLOG
Every 5 minutes