Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dynamicpartnerconnections.com Development for performance Oleksandr Katrusha, Program manager

Similar presentations


Presentation on theme: "Dynamicpartnerconnections.com Development for performance Oleksandr Katrusha, Program manager"— Presentation transcript:

1 dynamicpartnerconnections.com Development for performance Oleksandr Katrusha, Program manager olk@celenia.com

2 Quiz When you experienced performance problems, what was the main reason? Database design Hardware performance or setup Poor performing code Other

3 Performance lifecycle Performance tuning is an art Plan Design Develop Test Deploy and maintain Troubleshoot – On Production (system performance) – Application (code performance)

4 Plan For developers to keep in mind: – Number of (concurrent) users, their time zones – Company’s organization and geographical structure – Terminal / EP / Client users – Number of transactions – Amount of data, data increment – Types of operations, bottlenecks – Peak times – Critical operations and performance expectations – Integration scenarios – Main business processes involved

5 Design Heavy operations and deadlocking – Inventory closing – Postings – PriceDisc – Master planning – Settlements – Continuous number sequences Number of dimensions Too big transaction Use sub-ledgers Use aggregated data (reporting) Pre/post process Normalizations

6 Develop Database design – (De)-normalization, especially for big data – Changes to standard tables – Indexes and queries – Caching – Table inheritance Code clarity – Queries and joins – Bulk operations – Aggregate functions – Data types – ttsbegin…ttscommit – …

7 Develop Code clarity – Tier-aware code – CIL usage Cache objects (SysGlobalObjectCache) Batch parallelism http://blogs.msdn.com/b/axperf/archive/2012/02/24/batch-parallelism-in-ax-part-i.aspx UI performance – Do not overload forms and avoid DB calls – Avoid or cache display methods – Be careful with fact boxes

8 Develop – top errors Best practice deviations Nested loops instead of joins Missing, incorrect or redundant index Select fields list not used Heavy operations inside loops Wrong tier Redundant or unnecessary database calls Potential deadlocks

9 Client - server / Index – no index 500K random values records in table Time in sec, # of similar queries Mind context

10 Client - server / Index – no index

11 Develop Use clustered index – Range query – Incremental field Indexes have their cost – Operations asymmetry Only select records that are used (firstonly, firstfast) Only select records that are updated ( if inside while select) Cache tables Most probable checks go first

12 Early checks Validate parameters before running general logic. This will allow skipping unnecessary operations.

13 Exists and inner joins Exists join instead of inner

14 Pop Quiz How many table joins will this statement produce? select DirPartyTable join CustTable where DirPartyTable.recid == CustTable.party “Find all parties who are customers” 1 2 5 8 12

15 Answer SELECT T1.NAME,T1.LANGUAGEID,T1.NAMEALIAS,T1.PARTYNUMBER,T1.INSTANCERELATIONTYPE,T1.KNOWNAS,T1.MODIFIEDDATETIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.CREATEDBY,T1.RECVERSION,T1.RELA TIONTYPE,T1.RECID,T2.DUNSNUMBER,T2.PHONETICNAME,T2.DUNSNUMBERRECID,T2.RECVERSION,T2.RELATIONTYPE,T2.RECID,T3.INITIALS,T3.CHILDRENNAMES,T3.BIRTHDATE,T3.MARITALSTATUS,T3.ANNIVER SARYDATE,T3.HOBBIES,T3.GENDER,T3.NAMESEQUENCE,T3.PHONETICFIRSTNAME,T3.PHONETICMIDDLENAME,T3.PHONETICLASTNAME,T3.PERSONALTITLE,T3.PERSONALSUFFIX,T3.PROFESSIONALTITLE,T3.PROF ESSIONALSUFFIX,T3.BIRTHMONTH,T3.BIRTHDAY,T3.BIRTHYEAR,T3.ANNIVERSARYMONTH,T3.ANNIVERSARYDAY,T3.ANNIVERSARYYEAR,T3.COMMUNICATORSIGNIN,T3.RECVERSION,T3.RELATIONTYPE,T3.RECID,T 4.ORGANIZATIONTYPE,T4.RECVERSION,T4.RELATIONTYPE,T4.RECID,T5.NUMBEROFEMPLOYEES,T5.ORGNUMBER,T5.ABC,T5.RECVERSION,T5.RELATIONTYPE,T5.RECID,T6.BUSINESSACTIVITY_SA,T6.BUSINESSACTI VITYDESC_SA,T6.FILENUMBER_SA,T6.COMPANYNAFCODE,T6.BUSINESSNUMBER_CA,T6.SOFTWAREIDENTIFICATIONCODE_CA,T6.BANK,T6.GIRO,T6.REGNUM,T6.COREGNUM,T6.VATNUM,T6.IMPORTVATNUM,T 6.UPSNUM,T6.TAX1099REGNUM,T6.NAMECONTROL,T6.TCC,T6.KEY_,T6.DVRID,T6.INTRASTATCODE,T6.GIROCONTRACT,T6.GIROCONTRACTACCOUNT,T6.BRANCHID,T6.VATNUMBRANCHID,T6.IMPORTVATNUM BRANCHID,T6.ACTIVITYCODE,T6.CONVERSIONDATE,T6.ADDRFORMAT,T6.COMPANYREGCOMFR,T6.PACKMATERIALFEELICENSENUM,T6.PAYMROUTINGDNB,T6.PAYMTRADERNUMBER,T6.ISSUINGSIGNATURE,T6. SIACODE,T6.BANKCENTRALBANKPURPOSECODE,T6.BANKCENTRALBANKPURPOSETEXT,T6.DBA,T6.FOREIGNENTITYINDICATOR,T6.COMBINEDFEDSTATEFILER,T6.LASTFILINGINDICATOR,T6.VALIDATE1099ONENTR Y,T6.LEGALFORMFR,T6.SHIPPINGCALENDARID,T6.ENTERPRISENUMBER,T6.BRANCHNUMBER,T6.CUSTOMSCUSTOMERNUMBER_FI,T6.CUSTOMSLICENSENUMBER_FI,T6.DATAAREA,T6.PLANNINGCOMPANY,T6.T AXREPRESENTATIVE,T6.ORGID,T6.BANKACCTUSEDFOR1099,T6.PAYMINSTRUCTION1,T6.PAYMINSTRUCTION2,T6.PAYMINSTRUCTION3,T6.PAYMINSTRUCTION4,T6.COMPANYTYPE_MX,T6.RFC_MX,T6.CURP_MX, T6.STATEINSCRIPTION_MX,T6.LEGALREPRESENTATIVENAME_MX,T6.LEGALREPRESENTATIVERFC_MX,T6.LEGALREPRESENTATIVECURP_MX,T6.FICREDITORID_DK,T6.ISCONSOLIDATIONCOMPANY,T6.ISELIMINATI ONCOMPANY,T6.RECVERSION,T6.RELATIONTYPE,T6.RECID,T7.TEAMMEMBERSHIPCRITERION,T7.DESCRIPTION,T7.ISACTIVE,T7.TEAMADMINISTRATOR,T7.RECVERSION,T7.RELATIONTYPE,T7.RECID,T8.OMOPERAT INGUNITTYPE,T8.HCMWORKER,T8.OMOPERATINGUNITNUMBER,T8.RECVERSION,T8.RELATIONTYPE,T8.RECID,T9.ACCOUNTNUM,T9.INVOICEACCOUNT,T9.CUSTGROUP,T9.LINEDISC,T9.PAYMTERMID,T9.CASHDIS C,T9.CURRENCY,T9.INTERCOMPANYAUTOCREATEORDERS,T9.SALESGROUP,T9.BLOCKED,T9.ONETIMECUSTOMER,T9.ACCOUNTSTATEMENT,T9.CREDITMAX,T9.MANDATORYCREDITLIMIT,T9.VENDACCOUNT,T9.P RICEGROUP,T9.MULTILINEDISC,T9.ENDDISC,T9.VATNUM,T9.INVENTLOCATION,T9.DLVTERM,T9.DLVMODE,T9.MARKUPGROUP,T9.CLEARINGPERIOD,T9.FREIGHTZONE,T9.CREDITRATING,T9.TAXGROUP,T9.STATIS TICSGROUP,T9.PAYMMODE,T9.COMMISSIONGROUP,T9.BANKACCOUNT,T9.PAYMSCHED,T9.CONTACTPERSONID,T9.INVOICEADDRESS,T9.OURACCOUNTNUM,T9.SALESPOOLID,T9.INCLTAX,T9.CUSTITEMGROUPI D,T9.NUMBERSEQUENCEGROUP,T9.PAYMDAYID,T9.LINEOFBUSINESSID,T9.DESTINATIONCODEID,T9.GIROTYPE,T9.SUPPITEMGROUPID,T9.GIROTYPEINTERESTNOTE,T9.TAXLICENSENUM,T9.WEBSALESORDERDISP LAY,T9.PAYMSPEC,T9.BANKCENTRALBANKPURPOSETEXT,T9.BANKCENTRALBANKPURPOSECODE,T9.INTERCOMPANYALLOWINDIRECTCREATION,T9.PACKMATERIALFEELICENSENUM,T9.TAXBORDERNUMBER_FI,T 9.EINVOICEEANNUM,T9.FISCALCODE,T9.DLVREASON,T9.FORECASTDMPINCLUDE,T9.GIROTYPECOLLECTIONLETTER,T9.SALESCALENDARID,T9.CUSTCLASSIFICATIONID,T9.INTERCOMPANYDIRECTDELIVERY,T9.ENTE RPRISENUMBER,T9.SHIPCARRIERACCOUNT,T9.GIROTYPEPROJINVOICE,T9.INVENTSITEID,T9.ORDERENTRYDEADLINEGROUPID,T9.SHIPCARRIERID,T9.SHIPCARRIERFUELSURCHARGE,T9.SHIPCARRIERBLINDSHIPME NT,T9.SHIPCARRIERACCOUNTCODE,T9.PROJPRICEGROUP,T9.GIROTYPEFREETEXTINVOICE,T9.SYNCENTITYID,T9.SYNCVERSION,T9.SALESDISTRICTID,T9.SEGMENTID,T9.SUBSEGMENTID,T9.RFIDITEMTAGGING,T9.R FIDCASETAGGING,T9.RFIDPALLETTAGGING,T9.COMPANYCHAINID,T9.COMPANYIDSIRET,T9.PARTY,T9.IDENTIFICATIONNUMBER,T9.PARTYCOUNTRY,T9.PARTYSTATE,T9.ORGID,T9.PAYMIDTYPE,T9.FACTORINGACC OUNT,T9.DEFAULTDIMENSION,T9.CUSTEXCLUDECOLLECTIONFEE,T9.CUSTEXCLUDEINTERESTCHARGES,T9.COMPANYNAFCODE,T9.BANKCUSTPAYMIDTABLE,T9.GIROTYPEACCOUNTSTATEMENT,T9.COMPANYTYP E_MX,T9.STATEINSCRIPTION_MX,T9.CURP_MX,T9.RFC_MX,T9.MAINCONTACTWORKER,T9.CREDITCARDADDRESSVERIFICATION,T9.CREDITCARDCVC,T9.CREDITCARDADDRESSVERIFICATIONVOID,T9.CREDITCARD ADDRESSVERIFICATIONLEVEL,T9.PBACUSTGROUPID,T9.TAXWITHHOLDCALCULATE_TH,T9.TAXWITHHOLDGROUP_TH,T9.MODIFIEDDATETIME,T9.MODIFIEDBY,T9.CREATEDDATETIME,T9.RECVERSION,T9.RECID,T 1.MEMO,T9.MEMO FROM DIRPARTYTABLE T1 LEFT OUTER JOIN DIRORGANIZATIONBASE T2 ON (T1.RECID=T2.RECID) LEFT OUTER JOIN DIRPERSON T3 ON (T1.RECID=T3.RECID) LEFT OUTER JOIN OMINTERNALORGANIZATION T4 ON (T2.RECID=T4.RECID) LEFT OUTER JOIN DIRORGANIZATION T5 ON (T2.RECID=T5.RECID) LEFT OUTER JOIN COMPANYINFO T6 ON (T4.RECID=T6.RECID) LEFT OUTER JOIN OMTEAM T7 ON (T4.RECID=T7.RECID) LEFT OUTER JOIN OMOPERATINGUNIT T8 ON (T4.RECID=T8.RECID) CROSS JOIN CUSTTABLE T9 WHERE ((T9.DATAAREAID=?) AND (T9.PARTY=T1.RECID))

16 Pop Quiz How many table joins will this statement produce? “Find all parties who are customers” select recid from DirPartyTable exists join CustTable where DirPartyTable.recid == CustTable.party

17 Answer SELECT T1.RECID,T1.INSTANCERELATIONTYPE FROM DIRPARTYTABLE T1 WHERE EXISTS (SELECT 'x' FROM CUSTTABLE T2 WHERE ((T2.DATAAREAID=?) AND (T1.RECID=T2.PARTY)))

18 Pop Quiz select recid from DirPartyTable exists join CustTable where DirPartyTable.recid == CustTable.party Table inheritance Joins Fields list

19 Develop Use fast types and formats – Excel vs CSV – Containers vs sets vs temp tables… Keep big data in mind (usage time vs development time) Use aggregate functions

20 Pop Quiz Which data type provides the fastest writes / reads? Container Set List Map Array Temporary table – InMemory – TempDB

21 Data types - inserts

22

23 Calculate avg. of 1M integers

24

25

26 Test Identify target values Realistic data and environment Real access rights Critical tasks Special tools

27 Real performance cases SQL RAM issue Select field list – almost 10 times faster! Inner join vs outer join – 2-3 times faster! Setup was read for each of 1M loop execution - traceparser Bulk operations design – generate IDs yourself Fields justification No access to MI image Deadlock on FTI clustered index – batch parallelism

28 Lessons learned An art of continuous fight for performance Keep it in mind throughout all the system lifecycle Development tips Database design is very important Data types Review your code to keep it clear and nice

29 Next sessions survey Options for the next sessions: Performance tools (Traceparser, DynamicsPerf,…) Development research (Joins, indexes, queries, data types,…)

30 Questions?


Download ppt "Dynamicpartnerconnections.com Development for performance Oleksandr Katrusha, Program manager"

Similar presentations


Ads by Google