SlideShare a Scribd company logo
1 of 44
ABL Code Performance
Peter Judge
pjudge@progress.com
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.2
$ whoami
pjudge@progress.com
Software Architect*
@ Progress since 2003
Integration-y stuff – Authentication Gateway, HTTP-Out,
Corticon et al
OE Best Practices / OERA / AutoEdge / CCS
4GL since 1996
* Aka programmer who knows PowerPoint
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.3
compile-listing ain’t enough
 Intro
 Network effects: you can only fit so much into a pipe of a given size
 Indexes: it's easier to find things quickly when you know where you left them
 Unnecessary work: it's better to work "smarter"
 Conclusion
Network Effects
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.5
network effects
Shared memory DB connections make programmers look like rock stars
Network (client/server) connections are more like the
morning after – not so pretty
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.6
network effects - basics
MTU
-prefetch*
-Mm
-Mm
-Mm
-Mm
-Mm
-Mm
-Mm
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.7
network effects - basics
 Field lists: fields of record that are sent to the client
 Prefetch: multiple records per message (NO-LOCK queries)
 Network message buffer size (-Mm db startup param)
 MTU (maximum transmission unit): the largest packet size that can be transmitted over
a network not an OpenEdge parameter
FOR EACH Customer FIELDS (Name Balance)
FOR EACH Customer EXCEPT (Comments)
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.8
field lists (1)
for each order where order-num > x:
Type: FOR Statement
Client Sort: N
Scrolling: N
Table: wshop.Order
Indexes: Order-Num
Query Statistics: Bad1 logmgr.p line 23
QueryId: 101299360
DB Blocks accessed:
wshop : 15599
DB Reads:
Table: wshop.Order : 4557
Index: Order.Order-Num : UNAVAILABLE
wshop.Order Table:
4GL Records: 3399
Records from server: 3399
Useful: 3399
Failed: 0
Select By Client: N
16K DB reads
4557 fragments
3399 records
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.9
field lists (2)
for each order fields(order-num) where order-num > x:
Type: FOR Statement
Client Sort: N
Scrolling: N
Table: wshop.Order
Indexes: Order-Num
Query Statistics: Bad1 logmgr.p line 23
QueryId: 101299360
DB Blocks accessed:
wshop : 11333
DB Reads:
Table: wshop.Order : 3400
Index: Order.Order-Num : UNAVAILABLE
wshop.Order Table:
4GL Records: 3399
Records from server: 3399
Useful: 3399
Failed: 0
Select By Client: N
11K DB reads
3400 fragments
3399 records
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.10
network effects - lobs
Thank <insert favourite deity> Progress does NOT send the LOB across the wire unless
you ask for it
 The LOB field is really a separate entity to the record
 The real record only contains a pointer to the LOB
 The LOB may be in another storage area (and should be)
 When you access the LOB, the client requests it from the server
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.11
 Message network buffer size : -Mm
• Database startup parameter
– From 11.6.0+ you only need it on the db server
– Previous needed matching values on client and db server
• ABL clients only
• Ignored for non-network connections
network effects – legacy parameters
32600
350
1024
8192
-Mm (bytes)
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.12
network effects – prefetch parameters
 Used on NO-LOCK queries
• Forward only or scrolling
 10.2B06 + and 11.1+
-prefetchPriority Server defers poll for other requests while filling message
Current suggested value 100 records added before next poll
-prefetchDelay fills first message. By default first message contains one record
In theory this is better. In practice the ms difference is not
significant
-prefetchNumRecs how many records are stuffed in a message
100 records is a good start (default is 16)
-prefetchFactor How full (%-wise) to fill a message.
Aim for 90-100%
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.13
maximum transmission unit (MTU)
 A network parameter set at the NIC level
 Enable on the routing infrastructure
 Default is 1500
 “Jumbo Frames” is typically 9000 bytes
 The advantage lies in the relative size of network header data
• 1500 byte MTU: 1460 byte payload / 1538 byte total = 95% efficient
• 9000 byte MTU: 8960 byte payload / 9038 byte total = 99% efficient
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.14
monitoring server messages
 _ActServer VST
• Key: _server-ID
• Interesting fields: _Server-ByteSent, _ServerMsgSent, _ServerRecSent
• Calculate send size (Bytes sent / messages sent) and compare to –Mm
 Bug: When a record is larger than –Mm, only the first msg is counted
• I.e. if you send a 4K record and –Mm is 1024, only 1 msg and 1024 bytes sent recorded
• Blobs sent in 32,000 byte chunks – each chunk increments msgSent by 1 and byteSent by -
Mm
Indexes
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.16
indexes are fun
 We are going to cover the rules without going into all the dirty details
 There are a number of excellent presentations on index rules
• Mike Lonski’s numerous “Pick an Index” PPTs are my favourites
 Come to PUG Challenge in Manchester NH (USA) in June or Prague CZ in November
to see Mike’s presentation
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.17
but before we get to the rules…
 This only applies to 4GL and not SQL
 Rules are applied in hierarchical order to filter indexes
• This is important: Each rule is applied and the result is one or more remaining indexes
 The first 5 rules only apply to a subset of indexes
• Compiler scans all fields in the query and selects all indexes that have leading components
with those fields
 Field match rules must be contiguous
• “Equality” on fields 1 and 3 of the index counts as 1, not 2
Rules continue to be applied until there is at least one index left
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.18
the rules
For the first-pass set of indexes, select one or more from
1. If CONTAINS use word-index
2. Unique index with all components involved in the equality matches
3. Most active equality matches
• Sorta kinda…full matches trump partial matches
• But only if more than 1 field (sometimes)
4. Most active range matches
5. Most active sort matches
If no "good" index is found, select one from
6. The primary index
7. First index alphabetically by name
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.19
order table indexes
Table Records Size Size Count LOBs Size Mean
PUB.Order 727285 63.9M 92 727285 -- -- --
Indexes
Flags Index Name Cnt Field Name
u CustOrder 2 + CustNum + Ordernum
OrderDate 1 + OrderDate
pu OrderNum 1 + Ordernum
OrderStatus 1 + OrderStatus
SalesRep 1 + SalesRep
w SRepW 1 + SalesRep
SRepDate 2 + SalesRep + OrderDate
DateSRep 2 + OrderDate + SalesRep
SDateOstat 2 + ShipDate + OrderStatus
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.20
for each order where
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index
Unique index with all components
involved in the equality matches
Most active equality matches (Full
matches trump partial matches)
Most active range matches
Most active sort matches
The primary index
First index alphabetically by
name
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.21
where salesrep = "BBB"
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index X X X
Unique index with all components
involved in the equality matches X X X
Most active equality matches (Full
matches trump partial matches) 1 / 1 X 1 / 2
Most active range matches
Most active sort matches
The primary index
First index alphabetically by
name
1
3
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.22
where salesrep = "DKP" and orderdate = 09/05/2011
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index X X X X X
Unique index with all components
involved in the equality matches X X X X X
Most active equality matches (Full
matches trump partial matches) X X X 2 / 2 2 / 2
Most active range matches X X
Most active sort matches X X
The primary index X X
First index alphabetically by
name X
2
5
1
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.23
where salesrep = "DKP" and orderdate = 09/05/2011 by salesrep
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index X X X X X
Unique index with all components
involved in the equality matches X X X X X
Most active equality matches (Full
matches trump partial matches) X X X 2 / 2 2 / 2
Most active range matches X X
Most active sort matches X X
The primary index X X
First index alphabetically by
name X
2
5
1
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.24
where salesrep >= "DKP" and orderdate >= 09/05/2011 by salesrep
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index X X X X X
Unique index with all components
involved in the equality matches X X X X X
Most active equality matches (Full
matches trump partial matches) X X X X X
Most active range matches 2 / 2 2 /2
Most active sort matches 1 / 2 X
The primary index
First index alphabetically by
name
2
5
1
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.25
multiple index use
 Where clause includes “AND”
• ALL components of each index are involved in equality matches
• No unique indexes are involved
 Where clause includes “OR”
• Both sides of OR contain at least the lead component of an index
• Either equality or range match
 CAREFUL: return order not guaranteed
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.26
where salesrep = "BBB" and orderStatus = "Shipped"
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index X X X X
Unique index with all components
involved in the equality matches X X X X
Most active equality matches (Full
matches trump partial matches) 1 / 1 1/ 1 X 1 / 2
Most active range matches X X
Most active sort matches X X
The primary index
First index alphabetically by
name
2
4
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.27
gotchas
 Expressions break bracketing
for each order no-lock where month(orderDate) = 1 ...
 BEGINS does NOT break bracketing
• Considered a range bracket
for each order no-lock where salesRep begins "D"
• Uses the order.salesRep index
 Temp-table rules are subtly different
 When in doubt, test and verify
• LOG-MANAGER is your friend
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.28
where month(orderDate) > 6
Index Selection Rule
U
CustOrder OrderDate
PU
OrderNum OrderStatus SalesRep
W
sRepW SRepDate DateSRep SDateOstatCarrier
If “CONTAINS”, use word-index
Unique index with all components
involved in the equality matches
Most active equality matches (Full
matches trump partial matches)
Most active range matches
Most active sort matches
The primary index *
First index alphabetically by
name
0
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.29
test and verify? how !?!
Using the for each order no-lock where salesRep begins "D" example
 VST data (shown here via ProTop)
 Query object handle q:index-information(i)
 LOG-MANAGER
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.30
log-manager
 A terribly underused but awesomely amazing tool
 Allows you to leave debug messages in your code
• No more /* Message here vValue. */
 Create some secret hotkey sequence to activate
• I.e. you can turn it on in production for one user
 Writes detailed info to a log file
assign log-manager:logfile-name = "c:tempwshop.log"
log-manager:logging-level = 3 // There are more levels than you think
log-manager:log-entry-types = "4GLTrace,4GLTrans,QryInfo".
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.31
test and verify with log-manager
 Still using the for each order no-lock where salesRep begins "D" example
Type: Dynamically Opened Query
PREPARE-STRING: for each order no-lock where salesrep begins 'd'
Prepared at Runtime
Client Sort: N
Scrolling: Y
Table: sports2000.Order
Indexes: SalesRep
Times prepared: 1
Time to prepare (ms): 0
DB Blocks accessed:
sports2000 : 366074
DB Reads:
Table: sports2000.Order : 182913
Index: Order.SalesRep : UNAVAILABLE
Unnecessary work
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.33
unnecessary work
1. Too many calls
2. Too much stuff per call
3. Too many copies of data
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.34
make fewer roundtrips
getLoginLanguages()
getLoginCompanies()
loginWindow.w
run getLoginLanguages()
run getLoginCompanies()
run buildUI().
1 2 3 4 5 6
1
3
2
4
6
5
time elapsed
A
7
7
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.35
make fewer roundtrips
getUiData()
getLoginLanguages()
getLoginCompanies()
loginWindow.w
run getUiData()
run buildUI().
1 2 5 6
1
6
2
B
7
7
5
1 2 3 4 5 6
time elapsed
A 7
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.36
no deep copies
define temp-table ttData ...
run populateData (output table ttData).
run showData (input table ttData).
run getChanges (output table ttData).
run saveChanges (input table ttData).
define temp-table ttData ...
h = buffer ttData:handle.
run populateData (output h).
run showData (input h).
run getChanges (output h).
run saveChanges (input h).
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.37
no deep copies
define temp-table ttData ...
run populateData (output table ttData).
run showData (input table ttData).
run getChanges (output table ttData).
run saveChanges (input table ttData).
define temp-table ttData ...
run populateData (output table ttData by-reference).
run showData (input table ttData by-reference).
run getChanges (output table ttData by-reference).
run saveChanges (input table ttData by-reference).
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.38
finding deep copies: find it
 Make sure you have a problem
• LOG-MANAGER:LOG-ENTRY-TYPES = 'temp-tables'
• Data structure reference counts – datasets, buffers, objects, procedures, etc
define variable hDS as handle no-undo.
define variable iLoop as integer no-undo.
hDS = session:first-dataset.
do while valid-handle(hDS):
assign iCnt = iCnt + 1.
hDS = hDS:next-sibling.
end.
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.39
sidebar: dataset-handles are not really handles
 Yes, you define HANDLE variables to work with them
 But you can pass / call them as datasets
• To a parameter defined as DATASET-HANDLE
• To a parameter defined as DATASET
• To a parameter defined as HANDLE
 Nice thing with DATASET-HANDLE is that if you receive them you can use static code
against them as if you got a 'real' dataset
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.40
dataset-handles are not really handles
procedure fetch_data:
def output param poLotsaData as JsonObject.
def var hDataset as handle.
def var oDataObject as Object.
oDataObject = new CustomerData().
oDataObject:GetData(
output dataset-handle hDataset).
poLotsaData:Read(hDataset).
/* now has a property called dsCustomer */
oDataObject = new EmployeeData().
oDataObject:GetData(
output dataset-handle hDataset).
poLotsaData:Read(hDataset).
/* now has a property called dsCustomer
AND one called dsEmployee */
end procedure.
class CustomerData:
define dataset dsCustomer for ttCustomer, ...
method public void GetData(
output dataset dsCustomer).
end class.
class EmployeeData:
define dataset dsEmployee for ttEmployee,
ttDepartment, ...
method public void GetData(
output dataset dsEmployee).
end class.
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.41
finding deep copies: fix it
 Make value passing of tables/dataset the
exception
• Look for ANY and ALL temp-table, table-
handle, dataset, dataset-handle calls without
BY-REFERENCE
• Know who "owns" the data
 When you have to make a deep copy, clean
up after yourself
 Desperate measures may be needed
run get_data.p (
output dataset-handle hDataset).
finally:
delete object hDataset.
end finally.
run get_data.p (
output dataset-handle hDataset
by-reference).
hDS = session:first-dataset.
do while valid-handle(hDS):
delete object hDS.
hDS = session:first-dataset.
end.
© 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.42
conclusion
 The aim today was to show you areas you can look at for improving the performance of
your application
 From a code perspective, by
• coding appropriately to the indexes you have
• retrieving only data that's appropriate
• not leaving data "lying around"
 From At a design/architecture perspective, by
• appropriately balancing the size and quantity of network requests
 From an infrastructure perspective, by
• making sure that you optimise the data transfers from the DB server
Questions ?
ABL Code Performance Optimization Techniques

More Related Content

What's hot

P6 Services: How to install, configure, tips and troubleshooting
P6 Services: How to install,  configure, tips and  troubleshooting P6 Services: How to install,  configure, tips and  troubleshooting
P6 Services: How to install, configure, tips and troubleshooting p6academy
 
205410 primavera and sap
205410 primavera and sap205410 primavera and sap
205410 primavera and sapp6academy
 
OOW15 - Testing Oracle E-Business Suite Best Practices
OOW15 - Testing Oracle E-Business Suite Best PracticesOOW15 - Testing Oracle E-Business Suite Best Practices
OOW15 - Testing Oracle E-Business Suite Best Practicesvasuballa
 
Customer Case - Oracle B2B Critical Mission Hub
Customer Case - Oracle B2B Critical Mission HubCustomer Case - Oracle B2B Critical Mission Hub
Customer Case - Oracle B2B Critical Mission HubBruno Alves
 
MuleSoft Meetup Valletta 1.0
MuleSoft Meetup Valletta  1.0MuleSoft Meetup Valletta  1.0
MuleSoft Meetup Valletta 1.0Anastasiia Linnas
 
Primavera integration possibilities Technical overview - Oracle Primavera Col...
Primavera integration possibilities Technical overview - Oracle Primavera Col...Primavera integration possibilities Technical overview - Oracle Primavera Col...
Primavera integration possibilities Technical overview - Oracle Primavera Col...p6academy
 
OOW15 - Maintenance Strategies for Oracle E-Business Suite
OOW15 - Maintenance Strategies for Oracle E-Business SuiteOOW15 - Maintenance Strategies for Oracle E-Business Suite
OOW15 - Maintenance Strategies for Oracle E-Business Suitevasuballa
 
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...vasuballa
 
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]vasuballa
 
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...vasuballa
 
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]vasuballa
 
P6 Release 8 Installation Orientation
P6 Release 8 Installation OrientationP6 Release 8 Installation Orientation
P6 Release 8 Installation Orientationp6academy
 
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...vasuballa
 
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]vasuballa
 
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...vasuballa
 
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2vasuballa
 
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....vasuballa
 
Primavera integration possibilities technical overview ppt
Primavera integration possibilities   technical overview pptPrimavera integration possibilities   technical overview ppt
Primavera integration possibilities technical overview pptp6academy
 
What's New In Primavera P6 EPPM 17.1
What's New In Primavera P6 EPPM 17.1What's New In Primavera P6 EPPM 17.1
What's New In Primavera P6 EPPM 17.1p6academy
 
12.1.3 Patch Baseline and Strategy
12.1.3 Patch Baseline and Strategy12.1.3 Patch Baseline and Strategy
12.1.3 Patch Baseline and StrategyDavid Kelly
 

What's hot (20)

P6 Services: How to install, configure, tips and troubleshooting
P6 Services: How to install,  configure, tips and  troubleshooting P6 Services: How to install,  configure, tips and  troubleshooting
P6 Services: How to install, configure, tips and troubleshooting
 
205410 primavera and sap
205410 primavera and sap205410 primavera and sap
205410 primavera and sap
 
OOW15 - Testing Oracle E-Business Suite Best Practices
OOW15 - Testing Oracle E-Business Suite Best PracticesOOW15 - Testing Oracle E-Business Suite Best Practices
OOW15 - Testing Oracle E-Business Suite Best Practices
 
Customer Case - Oracle B2B Critical Mission Hub
Customer Case - Oracle B2B Critical Mission HubCustomer Case - Oracle B2B Critical Mission Hub
Customer Case - Oracle B2B Critical Mission Hub
 
MuleSoft Meetup Valletta 1.0
MuleSoft Meetup Valletta  1.0MuleSoft Meetup Valletta  1.0
MuleSoft Meetup Valletta 1.0
 
Primavera integration possibilities Technical overview - Oracle Primavera Col...
Primavera integration possibilities Technical overview - Oracle Primavera Col...Primavera integration possibilities Technical overview - Oracle Primavera Col...
Primavera integration possibilities Technical overview - Oracle Primavera Col...
 
OOW15 - Maintenance Strategies for Oracle E-Business Suite
OOW15 - Maintenance Strategies for Oracle E-Business SuiteOOW15 - Maintenance Strategies for Oracle E-Business Suite
OOW15 - Maintenance Strategies for Oracle E-Business Suite
 
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
 
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]
OOW16 - Oracle E-Business Suite Integration Best Practices [CON6709]
 
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...
OOW16 - Oracle E-Business Suite: What’s New in Release 12.2 Beyond Online Pat...
 
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]
OOW16 - Getting Optimal Performance from Oracle E-Business Suite [CON6711]
 
P6 Release 8 Installation Orientation
P6 Release 8 Installation OrientationP6 Release 8 Installation Orientation
P6 Release 8 Installation Orientation
 
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...
OOW16 - Ready or Not: Applying Secure Configuration to Oracle E-Business Suit...
 
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]
OOW16 - Testing Oracle E-Business Suite Best Practices [CON6713]
 
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...
OOW16 - Simplified and Touch-Friendly User Interface in Oracle E-Business Sui...
 
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2
OOW15 - Installation, Cloning, and Configuration of Oracle E-Business Suite 12.2
 
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....
OOW16 - Migrating and Managing Customizations for Oracle E-Business Suite 12....
 
Primavera integration possibilities technical overview ppt
Primavera integration possibilities   technical overview pptPrimavera integration possibilities   technical overview ppt
Primavera integration possibilities technical overview ppt
 
What's New In Primavera P6 EPPM 17.1
What's New In Primavera P6 EPPM 17.1What's New In Primavera P6 EPPM 17.1
What's New In Primavera P6 EPPM 17.1
 
12.1.3 Patch Baseline and Strategy
12.1.3 Patch Baseline and Strategy12.1.3 Patch Baseline and Strategy
12.1.3 Patch Baseline and Strategy
 

Similar to ABL Code Performance Optimization Techniques

MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer OverviewOlav Sandstå
 
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...Matt Stubbs
 
Is Revolution R Enterprise Faster than SAS? Benchmarking Results Revealed
Is Revolution R Enterprise Faster than SAS? Benchmarking Results RevealedIs Revolution R Enterprise Faster than SAS? Benchmarking Results Revealed
Is Revolution R Enterprise Faster than SAS? Benchmarking Results RevealedRevolution Analytics
 
Lsmw ppt in SAP ABAP
Lsmw ppt in SAP ABAPLsmw ppt in SAP ABAP
Lsmw ppt in SAP ABAPAabid Khan
 
Scylla Summit 2017: The Upcoming HPC Evolution
Scylla Summit 2017: The Upcoming HPC EvolutionScylla Summit 2017: The Upcoming HPC Evolution
Scylla Summit 2017: The Upcoming HPC EvolutionScyllaDB
 
On Improving Broadcast Joins in Apache Spark SQL
On Improving Broadcast Joins in Apache Spark SQLOn Improving Broadcast Joins in Apache Spark SQL
On Improving Broadcast Joins in Apache Spark SQLDatabricks
 
SkiPHP -- Database Basics for PHP
SkiPHP -- Database Basics for PHP SkiPHP -- Database Basics for PHP
SkiPHP -- Database Basics for PHP Dave Stokes
 
Software techniques
Software techniquesSoftware techniques
Software techniquessafiantaseer
 
Benchmarking Apache Druid
Benchmarking Apache Druid Benchmarking Apache Druid
Benchmarking Apache Druid Matt Sarrel
 
Benchmarking Apache Druid
Benchmarking Apache DruidBenchmarking Apache Druid
Benchmarking Apache DruidImply
 
Fast Access to Your Data - Avro, JSON, ORC, and Parquet
Fast Access to Your Data - Avro, JSON, ORC, and ParquetFast Access to Your Data - Avro, JSON, ORC, and Parquet
Fast Access to Your Data - Avro, JSON, ORC, and ParquetOwen O'Malley
 
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010ivan provalov
 
BigData @ comScore
BigData @ comScoreBigData @ comScore
BigData @ comScoreeaiti
 
MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer OverviewOlav Sandstå
 
Lightning Talk: Get Even More Value from MongoDB Applications
Lightning Talk: Get Even More Value from MongoDB ApplicationsLightning Talk: Get Even More Value from MongoDB Applications
Lightning Talk: Get Even More Value from MongoDB ApplicationsMongoDB
 
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)Konstantinos Zagoris
 
Spark-Zeppelin-ML on HWX
Spark-Zeppelin-ML on HWXSpark-Zeppelin-ML on HWX
Spark-Zeppelin-ML on HWXKirk Haslbeck
 
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDave Stokes
 
Confoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsConfoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsDave Stokes
 

Similar to ABL Code Performance Optimization Techniques (20)

MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer Overview
 
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...
Big Data LDN 2017: Matching and De-duping Big Data in the Cloud – in Minutes ...
 
Is Revolution R Enterprise Faster than SAS? Benchmarking Results Revealed
Is Revolution R Enterprise Faster than SAS? Benchmarking Results RevealedIs Revolution R Enterprise Faster than SAS? Benchmarking Results Revealed
Is Revolution R Enterprise Faster than SAS? Benchmarking Results Revealed
 
Lsmw ppt in SAP ABAP
Lsmw ppt in SAP ABAPLsmw ppt in SAP ABAP
Lsmw ppt in SAP ABAP
 
Scylla Summit 2017: The Upcoming HPC Evolution
Scylla Summit 2017: The Upcoming HPC EvolutionScylla Summit 2017: The Upcoming HPC Evolution
Scylla Summit 2017: The Upcoming HPC Evolution
 
On Improving Broadcast Joins in Apache Spark SQL
On Improving Broadcast Joins in Apache Spark SQLOn Improving Broadcast Joins in Apache Spark SQL
On Improving Broadcast Joins in Apache Spark SQL
 
Mdb dn 2016_05_index_tuning
Mdb dn 2016_05_index_tuningMdb dn 2016_05_index_tuning
Mdb dn 2016_05_index_tuning
 
SkiPHP -- Database Basics for PHP
SkiPHP -- Database Basics for PHP SkiPHP -- Database Basics for PHP
SkiPHP -- Database Basics for PHP
 
Software techniques
Software techniquesSoftware techniques
Software techniques
 
Benchmarking Apache Druid
Benchmarking Apache Druid Benchmarking Apache Druid
Benchmarking Apache Druid
 
Benchmarking Apache Druid
Benchmarking Apache DruidBenchmarking Apache Druid
Benchmarking Apache Druid
 
Fast Access to Your Data - Avro, JSON, ORC, and Parquet
Fast Access to Your Data - Avro, JSON, ORC, and ParquetFast Access to Your Data - Avro, JSON, ORC, and Parquet
Fast Access to Your Data - Avro, JSON, ORC, and Parquet
 
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010
Michigan Information Retrieval Enthusiasts Group Meetup - August 19, 2010
 
BigData @ comScore
BigData @ comScoreBigData @ comScore
BigData @ comScore
 
MySQL Optimizer Overview
MySQL Optimizer OverviewMySQL Optimizer Overview
MySQL Optimizer Overview
 
Lightning Talk: Get Even More Value from MongoDB Applications
Lightning Talk: Get Even More Value from MongoDB ApplicationsLightning Talk: Get Even More Value from MongoDB Applications
Lightning Talk: Get Even More Value from MongoDB Applications
 
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)
ICFHR 2014 Competition on Handwritten KeyWord Spotting (H-KWS 2014)
 
Spark-Zeppelin-ML on HWX
Spark-Zeppelin-ML on HWXSpark-Zeppelin-ML on HWX
Spark-Zeppelin-ML on HWX
 
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and HistogramsDutch PHP Conference 2021 - MySQL Indexes and Histograms
Dutch PHP Conference 2021 - MySQL Indexes and Histograms
 
Confoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & HistogramsConfoo 2021 - MySQL Indexes & Histograms
Confoo 2021 - MySQL Indexes & Histograms
 

More from Alen Leit

Aurea Software successful integration case study - Patient Travels (patient p...
Aurea Software successful integration case study - Patient Travels (patient p...Aurea Software successful integration case study - Patient Travels (patient p...
Aurea Software successful integration case study - Patient Travels (patient p...Alen Leit
 
Welcome to PUG Baltic Annual Conference 2017
Welcome to PUG Baltic Annual Conference 2017Welcome to PUG Baltic Annual Conference 2017
Welcome to PUG Baltic Annual Conference 2017Alen Leit
 
Progress software developers course - PUG Baltic Annual Conference 2017
Progress software developers course - PUG Baltic Annual Conference 2017Progress software developers course - PUG Baltic Annual Conference 2017
Progress software developers course - PUG Baltic Annual Conference 2017Alen Leit
 
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...Alen Leit
 
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...Alen Leit
 
Mine pasientreiser Success story - How Patient Travels delivered patient port...
Mine pasientreiser Success story - How Patient Travels delivered patient port...Mine pasientreiser Success story - How Patient Travels delivered patient port...
Mine pasientreiser Success story - How Patient Travels delivered patient port...Alen Leit
 
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017Alen Leit
 
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017Alen Leit
 

More from Alen Leit (8)

Aurea Software successful integration case study - Patient Travels (patient p...
Aurea Software successful integration case study - Patient Travels (patient p...Aurea Software successful integration case study - Patient Travels (patient p...
Aurea Software successful integration case study - Patient Travels (patient p...
 
Welcome to PUG Baltic Annual Conference 2017
Welcome to PUG Baltic Annual Conference 2017Welcome to PUG Baltic Annual Conference 2017
Welcome to PUG Baltic Annual Conference 2017
 
Progress software developers course - PUG Baltic Annual Conference 2017
Progress software developers course - PUG Baltic Annual Conference 2017Progress software developers course - PUG Baltic Annual Conference 2017
Progress software developers course - PUG Baltic Annual Conference 2017
 
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...
Laerdal Medical experience with Aurea products - Aurea & Helmes Nordic Semina...
 
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...
Aurea Enterprise Road map (cloud, microservies etc) - Aurea & Helmes Nordic S...
 
Mine pasientreiser Success story - How Patient Travels delivered patient port...
Mine pasientreiser Success story - How Patient Travels delivered patient port...Mine pasientreiser Success story - How Patient Travels delivered patient port...
Mine pasientreiser Success story - How Patient Travels delivered patient port...
 
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017
Aurea PRIME overview - Aurea & Helmes Nordic Seminar 2017
 
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017
Creating value with Aurea CRM - Aurea & Helmes Nordic Seminar 2017
 

Recently uploaded

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Recently uploaded (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

ABL Code Performance Optimization Techniques

  • 1. ABL Code Performance Peter Judge pjudge@progress.com
  • 2. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.2 $ whoami pjudge@progress.com Software Architect* @ Progress since 2003 Integration-y stuff – Authentication Gateway, HTTP-Out, Corticon et al OE Best Practices / OERA / AutoEdge / CCS 4GL since 1996 * Aka programmer who knows PowerPoint
  • 3. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.3 compile-listing ain’t enough  Intro  Network effects: you can only fit so much into a pipe of a given size  Indexes: it's easier to find things quickly when you know where you left them  Unnecessary work: it's better to work "smarter"  Conclusion
  • 5. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.5 network effects Shared memory DB connections make programmers look like rock stars Network (client/server) connections are more like the morning after – not so pretty
  • 6. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.6 network effects - basics MTU -prefetch* -Mm -Mm -Mm -Mm -Mm -Mm -Mm
  • 7. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.7 network effects - basics  Field lists: fields of record that are sent to the client  Prefetch: multiple records per message (NO-LOCK queries)  Network message buffer size (-Mm db startup param)  MTU (maximum transmission unit): the largest packet size that can be transmitted over a network not an OpenEdge parameter FOR EACH Customer FIELDS (Name Balance) FOR EACH Customer EXCEPT (Comments)
  • 8. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.8 field lists (1) for each order where order-num > x: Type: FOR Statement Client Sort: N Scrolling: N Table: wshop.Order Indexes: Order-Num Query Statistics: Bad1 logmgr.p line 23 QueryId: 101299360 DB Blocks accessed: wshop : 15599 DB Reads: Table: wshop.Order : 4557 Index: Order.Order-Num : UNAVAILABLE wshop.Order Table: 4GL Records: 3399 Records from server: 3399 Useful: 3399 Failed: 0 Select By Client: N 16K DB reads 4557 fragments 3399 records
  • 9. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.9 field lists (2) for each order fields(order-num) where order-num > x: Type: FOR Statement Client Sort: N Scrolling: N Table: wshop.Order Indexes: Order-Num Query Statistics: Bad1 logmgr.p line 23 QueryId: 101299360 DB Blocks accessed: wshop : 11333 DB Reads: Table: wshop.Order : 3400 Index: Order.Order-Num : UNAVAILABLE wshop.Order Table: 4GL Records: 3399 Records from server: 3399 Useful: 3399 Failed: 0 Select By Client: N 11K DB reads 3400 fragments 3399 records
  • 10. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.10 network effects - lobs Thank <insert favourite deity> Progress does NOT send the LOB across the wire unless you ask for it  The LOB field is really a separate entity to the record  The real record only contains a pointer to the LOB  The LOB may be in another storage area (and should be)  When you access the LOB, the client requests it from the server
  • 11. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.11  Message network buffer size : -Mm • Database startup parameter – From 11.6.0+ you only need it on the db server – Previous needed matching values on client and db server • ABL clients only • Ignored for non-network connections network effects – legacy parameters 32600 350 1024 8192 -Mm (bytes)
  • 12. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.12 network effects – prefetch parameters  Used on NO-LOCK queries • Forward only or scrolling  10.2B06 + and 11.1+ -prefetchPriority Server defers poll for other requests while filling message Current suggested value 100 records added before next poll -prefetchDelay fills first message. By default first message contains one record In theory this is better. In practice the ms difference is not significant -prefetchNumRecs how many records are stuffed in a message 100 records is a good start (default is 16) -prefetchFactor How full (%-wise) to fill a message. Aim for 90-100%
  • 13. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.13 maximum transmission unit (MTU)  A network parameter set at the NIC level  Enable on the routing infrastructure  Default is 1500  “Jumbo Frames” is typically 9000 bytes  The advantage lies in the relative size of network header data • 1500 byte MTU: 1460 byte payload / 1538 byte total = 95% efficient • 9000 byte MTU: 8960 byte payload / 9038 byte total = 99% efficient
  • 14. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.14 monitoring server messages  _ActServer VST • Key: _server-ID • Interesting fields: _Server-ByteSent, _ServerMsgSent, _ServerRecSent • Calculate send size (Bytes sent / messages sent) and compare to –Mm  Bug: When a record is larger than –Mm, only the first msg is counted • I.e. if you send a 4K record and –Mm is 1024, only 1 msg and 1024 bytes sent recorded • Blobs sent in 32,000 byte chunks – each chunk increments msgSent by 1 and byteSent by - Mm
  • 16. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.16 indexes are fun  We are going to cover the rules without going into all the dirty details  There are a number of excellent presentations on index rules • Mike Lonski’s numerous “Pick an Index” PPTs are my favourites  Come to PUG Challenge in Manchester NH (USA) in June or Prague CZ in November to see Mike’s presentation
  • 17. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.17 but before we get to the rules…  This only applies to 4GL and not SQL  Rules are applied in hierarchical order to filter indexes • This is important: Each rule is applied and the result is one or more remaining indexes  The first 5 rules only apply to a subset of indexes • Compiler scans all fields in the query and selects all indexes that have leading components with those fields  Field match rules must be contiguous • “Equality” on fields 1 and 3 of the index counts as 1, not 2 Rules continue to be applied until there is at least one index left
  • 18. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.18 the rules For the first-pass set of indexes, select one or more from 1. If CONTAINS use word-index 2. Unique index with all components involved in the equality matches 3. Most active equality matches • Sorta kinda…full matches trump partial matches • But only if more than 1 field (sometimes) 4. Most active range matches 5. Most active sort matches If no "good" index is found, select one from 6. The primary index 7. First index alphabetically by name
  • 19. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.19 order table indexes Table Records Size Size Count LOBs Size Mean PUB.Order 727285 63.9M 92 727285 -- -- -- Indexes Flags Index Name Cnt Field Name u CustOrder 2 + CustNum + Ordernum OrderDate 1 + OrderDate pu OrderNum 1 + Ordernum OrderStatus 1 + OrderStatus SalesRep 1 + SalesRep w SRepW 1 + SalesRep SRepDate 2 + SalesRep + OrderDate DateSRep 2 + OrderDate + SalesRep SDateOstat 2 + ShipDate + OrderStatus
  • 20. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.20 for each order where Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index Unique index with all components involved in the equality matches Most active equality matches (Full matches trump partial matches) Most active range matches Most active sort matches The primary index First index alphabetically by name
  • 21. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.21 where salesrep = "BBB" Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index X X X Unique index with all components involved in the equality matches X X X Most active equality matches (Full matches trump partial matches) 1 / 1 X 1 / 2 Most active range matches Most active sort matches The primary index First index alphabetically by name 1 3
  • 22. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.22 where salesrep = "DKP" and orderdate = 09/05/2011 Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index X X X X X Unique index with all components involved in the equality matches X X X X X Most active equality matches (Full matches trump partial matches) X X X 2 / 2 2 / 2 Most active range matches X X Most active sort matches X X The primary index X X First index alphabetically by name X 2 5 1
  • 23. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.23 where salesrep = "DKP" and orderdate = 09/05/2011 by salesrep Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index X X X X X Unique index with all components involved in the equality matches X X X X X Most active equality matches (Full matches trump partial matches) X X X 2 / 2 2 / 2 Most active range matches X X Most active sort matches X X The primary index X X First index alphabetically by name X 2 5 1
  • 24. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.24 where salesrep >= "DKP" and orderdate >= 09/05/2011 by salesrep Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index X X X X X Unique index with all components involved in the equality matches X X X X X Most active equality matches (Full matches trump partial matches) X X X X X Most active range matches 2 / 2 2 /2 Most active sort matches 1 / 2 X The primary index First index alphabetically by name 2 5 1
  • 25. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.25 multiple index use  Where clause includes “AND” • ALL components of each index are involved in equality matches • No unique indexes are involved  Where clause includes “OR” • Both sides of OR contain at least the lead component of an index • Either equality or range match  CAREFUL: return order not guaranteed
  • 26. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.26 where salesrep = "BBB" and orderStatus = "Shipped" Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index X X X X Unique index with all components involved in the equality matches X X X X Most active equality matches (Full matches trump partial matches) 1 / 1 1/ 1 X 1 / 2 Most active range matches X X Most active sort matches X X The primary index First index alphabetically by name 2 4
  • 27. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.27 gotchas  Expressions break bracketing for each order no-lock where month(orderDate) = 1 ...  BEGINS does NOT break bracketing • Considered a range bracket for each order no-lock where salesRep begins "D" • Uses the order.salesRep index  Temp-table rules are subtly different  When in doubt, test and verify • LOG-MANAGER is your friend
  • 28. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.28 where month(orderDate) > 6 Index Selection Rule U CustOrder OrderDate PU OrderNum OrderStatus SalesRep W sRepW SRepDate DateSRep SDateOstatCarrier If “CONTAINS”, use word-index Unique index with all components involved in the equality matches Most active equality matches (Full matches trump partial matches) Most active range matches Most active sort matches The primary index * First index alphabetically by name 0
  • 29. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.29 test and verify? how !?! Using the for each order no-lock where salesRep begins "D" example  VST data (shown here via ProTop)  Query object handle q:index-information(i)  LOG-MANAGER
  • 30. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.30 log-manager  A terribly underused but awesomely amazing tool  Allows you to leave debug messages in your code • No more /* Message here vValue. */  Create some secret hotkey sequence to activate • I.e. you can turn it on in production for one user  Writes detailed info to a log file assign log-manager:logfile-name = "c:tempwshop.log" log-manager:logging-level = 3 // There are more levels than you think log-manager:log-entry-types = "4GLTrace,4GLTrans,QryInfo".
  • 31. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.31 test and verify with log-manager  Still using the for each order no-lock where salesRep begins "D" example Type: Dynamically Opened Query PREPARE-STRING: for each order no-lock where salesrep begins 'd' Prepared at Runtime Client Sort: N Scrolling: Y Table: sports2000.Order Indexes: SalesRep Times prepared: 1 Time to prepare (ms): 0 DB Blocks accessed: sports2000 : 366074 DB Reads: Table: sports2000.Order : 182913 Index: Order.SalesRep : UNAVAILABLE
  • 33. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.33 unnecessary work 1. Too many calls 2. Too much stuff per call 3. Too many copies of data
  • 34. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.34 make fewer roundtrips getLoginLanguages() getLoginCompanies() loginWindow.w run getLoginLanguages() run getLoginCompanies() run buildUI(). 1 2 3 4 5 6 1 3 2 4 6 5 time elapsed A 7 7
  • 35. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.35 make fewer roundtrips getUiData() getLoginLanguages() getLoginCompanies() loginWindow.w run getUiData() run buildUI(). 1 2 5 6 1 6 2 B 7 7 5 1 2 3 4 5 6 time elapsed A 7
  • 36. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.36 no deep copies define temp-table ttData ... run populateData (output table ttData). run showData (input table ttData). run getChanges (output table ttData). run saveChanges (input table ttData). define temp-table ttData ... h = buffer ttData:handle. run populateData (output h). run showData (input h). run getChanges (output h). run saveChanges (input h).
  • 37. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.37 no deep copies define temp-table ttData ... run populateData (output table ttData). run showData (input table ttData). run getChanges (output table ttData). run saveChanges (input table ttData). define temp-table ttData ... run populateData (output table ttData by-reference). run showData (input table ttData by-reference). run getChanges (output table ttData by-reference). run saveChanges (input table ttData by-reference).
  • 38. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.38 finding deep copies: find it  Make sure you have a problem • LOG-MANAGER:LOG-ENTRY-TYPES = 'temp-tables' • Data structure reference counts – datasets, buffers, objects, procedures, etc define variable hDS as handle no-undo. define variable iLoop as integer no-undo. hDS = session:first-dataset. do while valid-handle(hDS): assign iCnt = iCnt + 1. hDS = hDS:next-sibling. end.
  • 39. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.39 sidebar: dataset-handles are not really handles  Yes, you define HANDLE variables to work with them  But you can pass / call them as datasets • To a parameter defined as DATASET-HANDLE • To a parameter defined as DATASET • To a parameter defined as HANDLE  Nice thing with DATASET-HANDLE is that if you receive them you can use static code against them as if you got a 'real' dataset
  • 40. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.40 dataset-handles are not really handles procedure fetch_data: def output param poLotsaData as JsonObject. def var hDataset as handle. def var oDataObject as Object. oDataObject = new CustomerData(). oDataObject:GetData( output dataset-handle hDataset). poLotsaData:Read(hDataset). /* now has a property called dsCustomer */ oDataObject = new EmployeeData(). oDataObject:GetData( output dataset-handle hDataset). poLotsaData:Read(hDataset). /* now has a property called dsCustomer AND one called dsEmployee */ end procedure. class CustomerData: define dataset dsCustomer for ttCustomer, ... method public void GetData( output dataset dsCustomer). end class. class EmployeeData: define dataset dsEmployee for ttEmployee, ttDepartment, ... method public void GetData( output dataset dsEmployee). end class.
  • 41. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.41 finding deep copies: fix it  Make value passing of tables/dataset the exception • Look for ANY and ALL temp-table, table- handle, dataset, dataset-handle calls without BY-REFERENCE • Know who "owns" the data  When you have to make a deep copy, clean up after yourself  Desperate measures may be needed run get_data.p ( output dataset-handle hDataset). finally: delete object hDataset. end finally. run get_data.p ( output dataset-handle hDataset by-reference). hDS = session:first-dataset. do while valid-handle(hDS): delete object hDS. hDS = session:first-dataset. end.
  • 42. © 2016 Progress Software Corporation and/or its subsidiaries or affiliates. All rights reserved.42 conclusion  The aim today was to show you areas you can look at for improving the performance of your application  From a code perspective, by • coding appropriately to the indexes you have • retrieving only data that's appropriate • not leaving data "lying around"  From At a design/architecture perspective, by • appropriately balancing the size and quantity of network requests  From an infrastructure perspective, by • making sure that you optimise the data transfers from the DB server