Sdílet prostřednictvím


Odstraňování problémů s výkonem v konfiguracích ER

Tento článek vysvětluje, jak najít a vyřešit problémy s výkonem v konfiguracíchElektronického výkaznictví (ER).

Vyšetřování problémů s výkonem se obvykle skládá z několika kroků.

  1. Sběr dat.
  2. Analýza shromážděných dat.
  3. Na základě výsledků analýzy použijte konfigurace ER k provedené změn nebo se rozhodnete shromáždit více údajů.

Řešení potíží

Analyzujte čas provedení

Čas spuštění může záviset na nepředvídatelných faktorech, jako jsou jiné úkoly spuštěné ve stejném prostředí a ukládání do mezipaměti, které používá data při prvním volání. Proto byste měli provádění a měření několikrát opakovat.

Někdy nejsou problémy s výkonem způsobeny konfigurací formátu ER, která se používá pro vytváření sestav. Místo toho jsou způsobeny kódem X++, který se používá k otevření konfigurace formátu ER.

  1. V Centru akcí nebo protokolu událostí se podívejte na čas provedení sestavy.

  2. Porovnejte čas provedení sestavy s celkovou dobou provedení ve scénáři.

  3. Pokud je doba spuštění sestavy mnohem kratší než celková doba provedení, zvažte množství dat, která sestava zpracovává:

    • Pokud sestava zpracovává malé množství dat, problém může zahrnovat dobu načítání konfigurace.
    • Pokud sestava zpracovává velké množství dat, problém může zahrnovat předzpracování X++. Použijte Trace parser k analýze tohoto případu.

    V ostatních případech viz další části.

  4. Spusťte více testů, které zahrnují různá množství dat, abyste zjistili, jak čas provedení závisí na množství dat.

Analýza trasování Trace parseru

Připravte si malý příklad nebo shromážděte několik tras během náhodných částí generování sestavy.

Pak v Trace parseru proveďte standardní analýzu zdola nahoru a odpovězte na následující otázky:

  • Jaké jsou nejlepší metody z hlediska spotřeby času?
  • Jakou část celkového času tyto metody používají?

Na dotazy odpovídejte na stejné otázky.

Pokud uvidíte, že před metodami je uvedeno „ER“, přejděte k další části.

Pokud vidíte, že metody nebo dotazy pocházejí z aplikační sady, zvažte obecné optimalizace (například vytvořte indexy).

Analyzujte počet hovorů. Pokud je počet výrazně vyšší, než se očekávalo, zvažte uložení do mezipaměti odpovídajících uzlů konfigurace.

Analyzujte volání databáze

Připravte si příklad, který obsahuje malé množství dat, abyste mohli shromáždit trasování ER.

Poté otevřete trasování v návrháři mapování modelů ER a podívejte se na spodní část stránky. Odpovězte na následující otázky:

  • Existuje nějaká duplikace dotazu? Pokud existuje, zvažte jednu z následujících oprav:

  • Odpovídá počet dotazů a načtených záznamů celkovému množství dat? Například pokud má dokument 10 řádků, ukazují statistiky, že zpráva extrahuje 10 řádků nebo 1 000 řádků? Pokud máte značný počet načtených záznamů, zvažte jednu z následujících oprav:

Analyzujte trasování PerfView

PerfView je nástroj pro zkušené vývojáře. Podrobnější informace o následujících krocích najdete v části Základy šetřování času nástěnných hodin.

  1. Shromážděte trasování pomocí času vlákna.

  2. Zahrnujte pouze zásobníky, které používají runUnattended, pro filtrování pouze vlákna, které má provádění konfigurace. (Přidejte runUnattended do vstupního pole IncPats.)

  3. Přeložte celou síť COU a blokovaný čas.

  4. Nahrejte Předvolby ER pro PerfView.

  5. Vyberte ER>Další předvolba.

  6. Podívejte se na jména:

    • Pravděpodobně uvidíte kód platformy, který spotřebovává nejvíce času.

    • Můžete poklepat (nebo dvakrát kliknout) a projít callees.

      Pokud najdete třídy, které mají předponu „ERExpression“, a pokud se jedná o funkce, které se vztahují k vzorcům, můžete uhodnout název funkce na základě názvu třídy a můžete se podívat na úložiště ER, kde můžete zobrazit atributy.

Opravy

  • Pokud zjistíte, že většinu času CPU spotřebovávají dotazy, zkuste snížit počet dotazů:

    • Zkontrolujte trasování ER pro duplicitní dotazy.
    • Podívejte se, kolik záznamů je načteno, a vyhodnoťte, kolik dat by teoreticky mělo být načteno.
  • Pokud vidíte, že většinu času CPU spotřebovávají použité funkce, zkuste najít místo v konfiguraci, která spotřebovává nejvíce prostředků.

  • Pokud vidíte, že většinu času CPU spotřebovávají funkce sběru dat, zvažte jejich nahrazení Skupina SQL podle na straně mapování modelu.

Shromažďování dat

V závislosti na vašem prostředí existuje několik způsobů, jak shromažďovat dostupná data:

  • Získejte celkovou dobu chodu:

    • Z centra akcí
    • Z protokolu událostí
  • Profilovat provedení:

    • Pomocí nástrojů ER
    • Pomocí Trace parseru
    • Pomocí PerfView

Sběr dat v produkčním prostředí

Někdy lze problémy reprodukovat pouze v produkčním prostředí. Data lze vybírat následujícím způsobem:

Sběr dat ve vývojovém prostředí

Kromě nástrojů, které lze použít v produkčním prostředí, existuje několik nástrojů, které můžete použít ve vývojovém prostředí:

  • Protokol událostí (Microsoft-Dynamics-ElectronicReporting). Tento protokol vám může poskytnout celkovou dobu spuštění.
  • Běžné nástroje .NET, například PerfView.

Vývojové prostředí vám navíc poskytuje větší flexibilitu při experimentování. Můžete například vypnout části sestav, abyste viděli, jak je ovlivněna doba spuštění.

Nástroje

Čas spuštění v centru akcí

ER může zobrazit čas spuštění konfigurace v centru akcí. Tato možnost funguje pouze pro konkrétního uživatele a konkrétní společnost a pouze pro interaktivní relace. Chcete-li tuto funkci zpřístupnit, postupujte takto.

  1. Přejděte do části Správa organizace>Elektronické výkaznictví>Konfigurace.
  2. Na stránce Konfigurace v podokně akcí na kartě Konfigurace ve skupině Pokročilá nastavení vyberte Parametry uživatelů.
  3. V dialogovém okně Uživatelské parametry nastavte u možnosti Zobrazit čas generování souboru možnost Ano.

Čas spuštění v protokolu událostí

  1. Otevřít prohlížeč událostí Windows.
  2. V Protokolech aplikací a služeb otevřete Microsoft-Dynamics-ElectronicReporting/Operational.
  3. Vyhledejte události FormatMapingRun, kde EventID=2, protože tyto události obsahují informace o uplynulém čase.

Sledování Trace parseru

Protože ER je implementováno v X++, můžete k analýze výkonu použít běžné nástroje X++. Další informace viz Sledování pomocí Trace parseru.

Tento přístup má několik omezení. Protože část ER je implementována v C #, nebudou k dispozici všechny podrobnosti. Můžete však zobrazit podrobnosti o využití dat. Dlouhé spouštění sestav může navíc překročit omezení úložiště trasování.

Sledování ER

ER může shromažďovat své vlastní stopy a má pro tyto stopy nástroje pro vizualizaci a analýzu. Více informací viz Sledování provedení formátů elektronického výkaznictví pro při řešení problémů s výkonem.

PerfView

Protože X++ i ER jsou implementovány na platformě .NET, můžete použít běžné nástroje .NET. Můžete například použít bezplatný nástroj PerfView.

Můžete také shromažďovat data z příkazového řádku. Například následující skript prostředí Windows PowerShell shromažďuje čas spuštění, dokud se na počítači nezastaví jakékoli provádění formátu.

c:\programs\PerfView collect "e:\traces\$(date -format "ddMMyyyy_hhmm").etl" `
    -CircularMB:20000 -ThreadTime `
    -NoNGenRundown `
    -StopOnEtwEvent:Microsoft-Dynamics-ElectronicReporting/FormatMappingRun/Stop

Tento přístup má několik omezení. Musíte mít administrativní přístup k tomuto počítači. Kromě toho musíte být zkušeným vývojářem, protože je strmá křivka učení.

Provádění změn

Použijte ukládání do mezipaměti

Přestože ukládání do mezipaměti snižuje dobu potřebnou k opětovnému načtení dat, spotřebovává paměť. Ukládání do mezipaměti použijte v případech, kdy množství načtených dat není příliš velké. Další informace a příklad, který ukazuje, jak používat ukládání do mezipaměti, najdete v tématu Vylepšete mapování modelu na základě informací z trasování spuštění.

Snižte objem načítaných dat

Spotřebu paměti pro ukládání do mezipaměti můžete snížit omezením počtu polí v záznamech tabulky aplikace, které načítáte za běhu. V tomto případě získáte pouze ty hodnoty polí tabulky aplikace, které potřebujete ve svém mapování modelu ER. Ostatní pole v této tabulce nebudou načtena. Proto je objem paměti, který je vyžadován pro ukládání načtených záznamů do mezipaměti, snížen. Další informace viz Zlepšete výkon řešení ER snížením počtu polí tabulky, která jsou načítána za běhu.

Použijte parametrizované vypočítané pole v mezipaměti

Někdy musí být hodnoty vyhledávány opakovaně. Mezi příklady patří názvy účtů a čísla účtů. Chcete-li ušetřit čas, můžete vytvořit vypočítané pole, které má parametry na nejvyšší úrovni, a poté pole přidat do mezipaměti.

Doporučujeme použít tento přístup pouze v případě, že je velikost dat v mezipaměti malá. Další informace viz Zlepšete výkon řešení ER přidáním parametrizovaných zdrojů dat CALCULATED FIELD.

Použít datový zdroj JOIN

Zdroje dat JOIN umožňuje načíst několik připojených záznamů jedním dotazem. K načtení každého připojeného záznamu není nutné použít samostatný dotaz. Například, pokud máte 1 000 řádků a načtete data položky pro každý řádek podle relace, budete mít 1 001 dotazů (= 1 000 + 1). Pokud používáte datový zdroj JOIN, k načtení stejných dat použijete pouze jeden dotaz. Další informace viz Použití zdrojů dat JOIN v mapování modelu ER k získání dat z více aplikačních tabulek.

Místo funkce WHERE použijte funkci FILTER

Funkce FILTER spouští podmínky na serveru SQL Server, zatímco funkce WHERE načte všechna data ze seznamu, jeden záznam po druhém, a použije podmínku pro každý záznam. Například chcete vybrat jeden záznam z 1000 záznamů. Pokud používáte WHERE, bude načteno všech 1 000 záznamů. Pokud však používáte FILTER, načte se přesně jeden záznam. FILTER můžete také použít indexy na straně databáze.

Pomocí shromážděných datových funkcí nebo nahromaděného zdroje dat

Pokud má vaše konfigurace komponentu seskupit podle, která shrnuje dříve načtená data podle zprávy, načte všechna data znovu. Použitím funkcí shromážděných dat umožníte ER shromáždit data během prvního načtení. Další informace naleznete v tématu Konfigurace formátu ER pro počítání a sčítání.

Přepište části konfigurace v X++

ER podporuje volání metod tabulek a tříd, včetně rozšíření. Zvažte přepsání částí mapování modelu v X++, které vám pomohou zlepšit výkon.

ER může využívat data z následujících zdrojů:

  • Třídy (datové zdroje objekt a třída)
  • Tabulky (datové zdroje tabulka a záznamy v tabulce)

Aplikační pozhraní ER (API) také poskytuje způsob, jak odeslat předpočítaná data z kódu volání. Sada aplikací obsahuje řadu příkladů tohoto přístupu.