Databaseindeks i MS CRM

af Henrik Jensen 3. februar 2016 10:19

Jeg har ofte opgaver som handler om optimering af MS CRM, herunder optimering af databasen. Der er mange "knapper" man kan "skrue på", en af dem er at optimere databaseindeks, særligt på CRM-organisationer som indeholder mange tilpasninger.

Jeg benytter enten SQL egen profiler til at analysere data-trafikken, eller meget gerne SQL-værktøjet sp_BlitzCache™ fra Brent Ozar, som i øvrigt også har en fortræffelig checkliste til SQL-optimering (Engelsk): How to Make Slow SQL Servers Go Faster...

Jeg faldt dog også over et indlæg som er lavet af Teamet bag Dynamics CRM in the Field. Dette indlæg beskriver bl.a.:

  • Hvad man skal være opmærksom i forhold til optimering af MS CRM.
  • Fokus på fjernelse af indeks som ikke benyttes.
  • Anviser forskellige lister (Excel), med standardindeks i MS CRM.
  • Anviser en forespørgsel som viser alle indeks i en MS CRM-organisation (Se herunder)
SELECT s.name + '.' + t.name AS 'table_name', i.name, i.index_id
FROM sys.schemas AS s
INNER JOIN sys.tables AS t ON s.schema_id = t.schema_id
INNER JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT OUTER JOIN sys.objects AS o ON o.parent_object_id = t.object_id
AND i.name = o.name
WHERE (i.name IS NOT NULL)

Link til indlæg om optimering (Engelsk): Dynamics CRM indexes (missing, redundant, and OOB)...

Tags: ,

2013 | 2015 | 2016 | SQL Server

Antal af poster i en CRM organisationsdatabase

af Henrik Jensen 15. september 2015 12:23

Jeg har tidligere brugt værktøjet Dynamics XRM Tools (Statistics) til at vise hvor mange poster der er i en CRM-organisation. Værktøjet fungerer stadig, selvom det er skrevet til MS CRM 2011.

Jeg har også tidligere benyttet en standardrapport som SQL Serveren tilbyder, som hedder Disk Usage by Top Tables, og som viser en ganske fin rapport.

Jeg har for nyligt "opdaget" at Jamie Miley har begået et blogindlæg (How to Easily Get Record Counts for Entitys in MS CRM...) som indeholder et SQL View, som viser alle CRM-relaterede poster. SQL'et ser således ud:

SELECT        TOP (1000) dbo.RecordCountSnapshot.Count, dbo.RecordCountSnapshot.RecordCountSnapshotId, dbo.EntityView.ObjectTypeCode, dbo.EntityView.Name
FROM            dbo.RecordCountSnapshot INNER JOIN
                         dbo.EntityView ON dbo.RecordCountSnapshot.ObjectTypeCode = dbo.EntityView.ObjectTypeCode
WHERE        (dbo.RecordCountSnapshot.Count > 0)
ORDER BY dbo.RecordCountSnapshot.Count DESC

Outputtet er:

Problemer med E-mail Router i MS CRM 2013, som er flyttet fra Online til Onpremise

af Henrik Jensen 13. september 2015 08:27

Jesper Funk og Thomas Rath fra Norriq har tippet mig om et problem, som kan opstå med E-mail Router softwaren i MS CRM 2013, som er flyttet fra Online til Onpremise. Problemet har omfattet flere kunder.

Problemet

En række brugere, som er indstillet til at benytte Email Router for Outgoing Emails blev e-mails ikke behandlet. I Email Router Configuration Manager ved klik på knappen Load Data blev e-mails ikke overført til E-mail Routeren, og dermed er de ikke behandlet.

 

Analysen

Følgende SQL Trace blev benyttet til analyse af problemet:

exec sp_executesql N'select 
top 5001 "systemuser0".SystemUserId as "systemuserid"
, "systemuser0".FullName as "fullname"
, "systemuser0".InternalEMailAddress as "internalemailaddress"
, "systemuser0".OutgoingEmailDeliveryMethod as "outgoingemaildeliverymethod"
, "systemuser0".IncomingEmailDeliveryMethod as "incomingemaildeliverymethod" 
from
SystemUserBase as "systemuser0" 
where
(((((("systemuser0".InternalEMailAddress is not null and "systemuser0".IsDisabled = @IsDisabled0)) 
 and (((("systemuser0".OutgoingEmailDeliveryMethod = @OutgoingEmailDeliveryMethod0))
  or (("systemuser0".IncomingEmailDeliveryMethod = @IncomingEmailDeliveryMethod0
   or "systemuser0".IncomingEmailDeliveryMethod = @IncomingEmailDeliveryMethod1))))
    and (("systemuser0".InviteStatusCode = @InviteStatusCode0)))))) 
            order by
"systemuser0".SystemUserId asc',
N'@IsDisabled0 bit, @OutgoingEmailDeliveryMethod0 int, @IncomingEmailDeliveryMethod0 int, @IncomingEmailDeliveryMethod1 int, @InviteStatusCode0 int', @IsDisabled0=0, @OutgoingEmailDeliveryMethod0=2, @IncomingEmailDeliveryMethod0=2, @IncomingEmailDeliveryMethod1=3, @InviteStatusCode0=4

 

Bemærk følgende: (("systemuser0".InviteStatusCode = @InviteStatusCode0))))))

Nye brugere har som standard værdien 4 (InviteStatusCode), men analysen viser at brugere har en anden værdi end 4.

Løsningen

Løsningen var at eksekvere følgende script på den aktuelle organisation:

UPDATE SystemUserBase
SET InviteStatusCode = 4
WHERE InviteStatusCode <> 4

Fejl ved import af organisationer efter Opdatering 0.1

af Henrik Jensen 25. juni 2015 19:33

Hvis man har opdateret MS CRM 2015 med Opdatering 0.1 (Update 0.1) så vil man opleve følgende fejl når man forsøger at importere en organisation:

I logfilen finder man bl.a. følgende meddelelse:

Error while updating organization information: System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'p_CreateAuditEntry'.

Der er flere som har oprettet en sag hos Microsoft, men der er ikke frigivet en officiel løsning på problemet. Læs mere om dette her: Error Importing Organization after Update 0.1...

I ovennævnte artikel beskriver Harald Petersilka en løsning, som jeg kan tilslutte mig, om end det er en midlertidig løsning. Husk herunder at fjerne de dele af de 2 stored procedures, som refererer til tabellen AuditHistory. De 2 stored procedures skal ende med at se således ud:

if exists (select * from sys.objects where name = 'p_CompleteAuditEntry' and type = 'P')
begin
drop procedure p_CompleteAuditEntry
end
go
create procedure p_CompleteAuditEntry( @AuditEntryId uniqueidentifier,
@Result int,
@Details nvarchar(max)) as
begin
set nocount on
end
go

 

if exists (select * from sys.objects where name = 'p_CreateAuditEntry' and type = 'P')
begin
drop procedure p_CreateAuditEntry
end
go

create procedure p_CreateAuditEntry (@AuditEntryId uniqueidentifier,
@ObjectId uniqueidentifier,
@ObjectType nvarchar(40),
@Operation nvarchar(40),
@Details nvarchar(max),
@UserName nvarchar(40)) as
begin
set nocount on
end
go

Forbedring af ydelsen på forespørgsler med SQL Server 2014

af Henrik Jensen 8. juni 2015 08:42

Jeg læste for nyligt et indlæg (Improve CRM query performance using compatibility version 120 with SQL 2014...) som har fokus på forbedring af ydelsen på forespørgsler med SQL Server 2014. Indlægget kommer omkring fordelene ved at indstille Compatibility Level på SQL Serveren til det korrekte niveau. I forhold til SQL Server 2014 er det SQL Server 2014 (120):

Jeg har lavet en række test (forespørgsler på indekserede og ikke indekserede felter) af ydelsen på de forskellige Compatibility Level med følgende resultat:

  • SQL Server 2008 (100): Udgangspunktet for analysen
  • SQL Server 2012 (110): En ydelsesfremgang på 2-4%
  • SQL Server 2014 (120): En ydelsesfremgang på optil 25%

Vær opmærksom på at hvis man skifter indstillingerne i et kørende miljø så kan det påvirke resultatet af forespørgsler til det uheldige...altså at man får forkerte resultater af forespørgsler. For at undgå dette kan man:

  • Genstarte SQL Serveren

    eller

  • Indstil databasen til Single-user access mode ved at benytte ALTER DATABASE SET SINGLE_USER.
  • Ændre Compatibility level.
  • Indstil databasen til Multi-user access mode ved at benytte ALTER DATABASE SET MULTI_USER.

MS CRM-rapporter med PowerPivot

af Henrik Jensen 23. november 2012 16:09

I går afholdt jeg et indlæg på MS CRM Partner Community hos Microsoft.

På dette Community-møde handlede mit indlæg om PowerPivot, og om hvordan man kommer i gang med at benytte PowerPivot til at lave rapporter som relaterer til såvel MS CRM som andre datakilder.

Dagen igennem har modtaget en række e-mails, samt henvendelser fra MS partnere og kunder via bloggen, hvor jeg bliver spurgt til PowerPoint-præsentation og links.

Så hermed min PowerPoint-præsentation:  MSCRM_2011-CRM-rapporter_med_PowerPivot.pptx (498,84 kb)

Nye kurser til MS CRM 2011

af Henrik Jensen 4. juli 2012 21:53

Microsoft har atter frigivet en række kurser (Engelsk). I denne omgang som e-learning. Kurserne er kun tilgængelige for Microsoft Partnere (Login kræves).

  • Implementing Claims-Based Authentication and IFD (61 minutter)
    Kurset kommer omkring de mange udfordringer, der er ved implementering og konfiguration af Claims-baseret sikkerhed ifm. MS CRM 2011.
    Kursusindhold:
    • Preparing to use Claims-Based Authentication
    • Install and configure the ADFS 2.0 server
    • Configure the CRM Server for Claims-Based Authentication
    • Configure the CRM Server for IFD
    • How to pass through claims for an untrusted domain
    • Troubleshooting
       
  • Custom Reporting (67 minutter)
    Kurset handler om at oprette brugerdefinerede rapporter, som laves ved brug af MS CRM 2011 og BIDS (Business Intelligence Developer Studio).
    Kursusindhold:
    • Reporting Extensions
    • Custom Report Types
    • Fetch XML-based Reports
    • SQL-based Reports
    • Working with Solutions
    • Including External data Sources on Reports

Ud over ovennævnte nye kurser, vil jeg anbefale følgende kurser: Kurser til MS CRM 2011...

Maksimumsgrænsen for poster er overskredet, og dashboard vises ikke...?

af Henrik Jensen 27. februar 2012 16:21

I forbindelse med dashboard, i MS CRM 2011, kan man rende ind i en kedelig meddelelse, nemlig "Maksimumgrænsen for poster er overskredet. Reducer antallet af poster.", og det var præcis hvad en af mine kollegaer (Bo Møller, Logica) gjorde mig opmærksom på.

Jeg har gravede lidt i problemstillingen, hvilket dette indlæg handler om. I indlægget anvises også en anden indstilling, som er anvendelig omkring dashboards.

Læs mere: Maksimumsgrænsen for poster er overskredet, og dashboard vises ikke...

Planlagte rapporter i MS CRM 2011

af Henrik Jensen 1. december 2011 01:07

Man kan oprette et såkaldt øjebliksbillede af en Reporting Services-rapport. Et øjebliksbillede er en statisk fil, der indeholder resultaterne af en rapport, som er kørt på et bestemt tidspunkt, hvilket giver mulighed for at gemme data som er gældende på et bestemt tidspunkt, f.eks. ugentligt.

Man skal oprette en definition af øjebliksbilledet, som kan bruges til at oprette øjebliksbilleder efter behov eller planlægge, at der tages øjebliksbilleder på bestemte tidspunkter.

Dette indlæg beskriver hvordan man opretter, administrerer og sletter planlagte rapporter i MS CRM 2011: Planlagte rapporter i MS CRM 2011...

Tags: , , ,

2011

Logisk databasediagram til MS CRM 2011

af Henrik Jensen 10. november 2011 10:56

Som det også var tilfældet med MS CRM 4.0, har Microsoft frigivet en række logiske databasediagrammer til MS CRM 2011. Diagrammerne er Microsoft Office Visio 2010-diagrammer, som viser de logiske relationer mellem objekter i MS CRM 2011. De logiske relationer afspejler programmeringsmodellen for MS CRM 2011.

Diagrammerne gælder både for MS CRM 2011 Online og Lokal løsning (Onpremise).

Download diagrammer: Crm2011DiagramsRTM.zip (1,67 mb)

Omdøbe MS CRM Active Directory-grupper

af Henrik Jensen 20. oktober 2011 23:47

Når man installerer MS CRM (4.0/2011) bliver der oprettet en række Active Directory-grupper. Efter installationen kan man godt omdøbe disse grupper...man skal dog gøre det med forsigtighed, da dette foregår i såvel Active Directory, SQL Serverens sikkerhedsgrupper som i en organisationsdatabase.

Jeg har lavet et indlæg om at omdøbe grupperne på den rigtige måde, med reference til et tidligere indlæg om sikkerhedsgrupperne og deres funktion. Læs mere her: Omdøbe MS CRM Active Directory-grupper...

Tags: , ,

2011 | SQL Server

Nyhed i MS CRM 2011: Automatisk sletning af fuldførte arbejdsprocesser

af Henrik Jensen 26. september 2011 22:40

I MS CRM (både 4.0 og 2011) bliver mange operationen logført, altså gemt i systemet, så man kan se deres status.

Mange af registreringerne kan være nyttige...men informationerne fylder rigtig meget i databasen, jo længere tid der går. Og hvem har behov for at vide at en arbejdsproces, som er 2 år gammel, blev fuldført?

I dette indlæg skal vi kigge på en nyhed, i MS CRM 2011, som kan hjælpe med til at optimere systemjobbene, så de ikke fylder unødigt i MS CRM-databasen. Nyhed i MS CRM 2011: Automatisk sletning af fuldførte arbejdsprocesser...

Bliv medlem af CRMUG DK

De regionale afdelinger i CRMUG giver mulighed for a mødes med andre medlemmer af CRMUG i dit lokalområde. Hermed får du mulighed for at mødes ansigt til ansigt og vidensdele med andre brugere af Microsoft Dynamics CRM i dit område.

Læs mere den Danske afdeling af CRMUG...

Om Henrik Jensen

Jeg har altid fingeren på pulsen når det drejer sig om Microsofts produkter & teknologier, og især når det handler om Microsoft Dynamics CRM.

Henrik Jensen

Jeg har arbejdet professionelt i IT-branchen mere end 25 års, deraf mere end 18 år med CRM-systemer, og samtidig indehaver af mere end 50 Microsoft-certificeringer.

EASYConsult ApS

Læs mere...

Downloads, værktøjer, installation og JScript

Downloade komponenter til MS CRM:
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011
    • Microsoft Dynamics CRM 2013
    • Microsoft Dynamics CRM 2015
    • Microsoft Dynamics CRM 2016

Liste over Opdateringspakker (Rollups):
    • Microsoft Dynamics CRM 4.0
    • Microsoft Dynamics CRM 2011
    • Microsoft Dynamics CRM 2013
    • Microsoft Dynamics CRM 2015
    • Microsoft Dynamics CRM 2016

Værktøjer til MS CRM:
    • Liste med værktøjer til MS CRM

Krav og opsætninger til installation:
    • Krav og opsætninger MS CRM 2011
    • Krav og opsætninger MS CRM 2013
    • Krav og opsætninger MS CRM 2015
    • Krav og opsætninger MS CRM 2016

JScript eksempelkode:
    • JScript eksempelkode

Diverse værktøjer:
    • Sysinternals
    • PowerShell og MS CRM 2011

Månedsliste

Forbehold

Alt hvad du læser på denne blog er alene udtryk for mine egne holdninger og meninger, og kan ikke henføres til andet end som så.

De løsninger jeg fremstiller på denne blog er ikke nødvendigvis testet i et driftsmiljø. Hvis du gør brug af mine løsninger er det på eget ansvar.