Title: Inside EMC Documentum
1Inside EMC Documentum
2Who am I?
- Independent Consultant
- 8 years working with Documentum
- Specialise in performance analysis and tuning
- Inside Documentum blog
- http//robineast.wordpress.com
- Xense Profiler Documentum Performance Profiler
- http//www.xense.co.uk/xense_profiler_start.htm
3Overview
- Key Architectural Changes in D6
- DFC and DMCL
- DFC Tracing in D6
- Performance Tuning with DFC trace
4Key Architectural Changes in D6
- Native DMCL replaced with Java DMCL
- Documentum Foundation Services (DFS)
- Write-caching in BOCS
- Loads more
5A Short History of the DMCL (1)
6A Short History of the DMCL (2)
7D6 - DFC
8A Short History of the DMCL (3)
9DFC Tracing in D6
- DMCL Tracing
- Simple Invocation
- Flat structure
- Analysis tools available
- Problems with tracing in Multi-Threaded
environments
- DFC Trace
- Many different parameters
- Stack structure
- Few tools available
- Improved tracing facilities in Multi-Threaded
environments
10Trace Invocation - Parameters
- DMCL had 2 parameters (trace_level and
trace_file) - DFC has 24 parameters
- dfc.tracing.enabletrue
- turns on tracing and is the only required
parameter - dfc.tracing.user_name_filter
- Target a specific user
- dfc.tracing.mode
- compact or standard
- dfc.tracing.include_rpc_count and
dfc.tracing.include_rpcs - dfc.tracing.dir (tracing location)
- use different directories for different
applications - Other tracing parameters are listed in the
Content Server Administration Guide
11Trace Invocation How-To
- Enter DFC tracing parameters into dfc.properties
file - DFC runtime will pick up the new parameters
automatically - Old methods
- DA API
- WDK api tester
- http//lthostgtltportgt/ltappgt/wdk/traceDMCL.jsp
- Resource Management in DA
- Dont forget to switch off tracing afterwards!
12DFC Trace example
- 7011.547 0.000 N/A
http-8080-Processor25 com.documentum.com.DfClien
tX_at_18c022c.getQuery() gt com.documentum.fc.client
.IDfQuery_at_1dd1a31 - 7011.547 0.000 N/A
http-8080-Processor25 com.documentum.fc.client.D
fQuery_at_1dd1a31.setDQL("select state_name,type_over
ride_id from dm_policy where r_object_id
'0000000000000000' ") gt ltvoidgt - 7011.547 0.000 ltdmadmingt
http-8080-Processor25 com.documentum.fc.client.D
fAdminSessionManager_at_1d66aa9.getSession("d6test2")
gt com.documentum.fc.client.IDfSession_at_e29127 - 7011.547 0.000 ltdmadmingt
http-8080-Processor25 com.documentum.fc.client.i
mpl.session.SessionHandle_at_e29127.getSessionId()
gt "s1" - 7011.547 0.000 ltdmadmingt
http-8080-Processor25 com.documentum.fc.client.i
mpl.session.SessionManager_at_1d66aa9.release(com.doc
umentum.fc.client.impl.session.StrongSessionHandle
_at_e29127) gt ltvoidgt
13DFC Trace Example (cont.)
- 7011.547 1.325 ltdmadmingt
http-8080-Processor25 com.documentum.fc.client.D
fQuery_at_1dd1a31.execute(com.documentum.fc.client.im
pl.session.StrongSessionHandle_at_6f14d6,0) gt
com.documentum.fc.client.IDfCollection_at_a7a434 - 7012.872 0.000 ltdmadmingt
http-8080-Processor25 com.documentum.fc.clie
nt.impl.collection.CollectionHandle_at_a7a434.next()
gt false - 7012.872 0.000 ltdmadmingt
http-8080-Processor25 com.documentum.fc.clie
nt.impl.collection.CollectionHandle_at_a7a434.close()
gt ltvoidgt
14Measuring Performance
When you can measure what you are speaking about,
and express it in numbers, you know something
about it but when you cannot measure it, when
you cannot express it in numbers, your knowledge
is of a meager and unsatisfactory kind it may be
the beginning of knowledge, but you have
scarcely, in your thoughts, advanced to the state
of science. Lord Kelvin
15Analysing DFC Trace
- Even simple tracing scenarios usually produce
large trace files - Analysis tools needed
- EMC Documentum provided tools
- Xense DFC analysis scripts
- http//www.xense.co.uk/dfc_profiler_start.htm
- Build you own
16Xense DFC Trace Analysis Example 1
Duration Secs DFC Call Call Details
67.790 com.documentum.fc.client.DfQuery_at_1c2f20c.execute select distinct r_object_id, media_type, object_name, r_object_type, publication_name, description, language_translated, document_id from bus_docs where any location in ('GHR014', 'GHR014', 'GHR000') and r_current_state'2'
67.650 com.documentum.fc.client.DfQuery_at_1cdc507.execute select distinct r_object_id, media_type, object_name, r_object_type, publication_name, description, language_translated, document_id from bus_docs where any location in ('GHR014', 'GHR014', 'GHR01416', 'GHR000') and r_current_state'2'
67.618 com.documentum.fc.client.DfQuery_at_1c2e31d.execute select distinct r_object_id, media_type, object_name, r_object_type, publication_name, description, language_translated, document_id from bus_docs where any location in ('GHR014', 'GHR01444', 'GHR0145', 'GHR0146', 'GHR000') and r_current_state'2'
67.603 com.documentum.fc.client.DfQuery_at_5422acd.execute select distinct r_object_id, media_type, object_name, r_object_type, publication_name, description, language_translated, document_id from bus_docs where any location in ('GHR014', 'GHR014', 'GHR01416', 'GHR01426') and r_current_state'2'
67.368 com.documentum.fc.client.DfQuery_at_1b248c8.execute select distinct r_object_id, media_type, object_name, r_object_type, publication_name, description, language_translated, document_id from bus_docs where any location in ('GHR014', 'GHR0145', 'GHR0146', 'GHR000') and r_current_state'2'
17Xense DFC Trace Analysis Example 2
Duration Secs DFC Call Call Details
0.273 com.documentum.fc.client.impl.session.SessionHandle_at_14b9eeb.getFolderByPath() /dmadmin
0.234 com.documentum.fc.client.DfAdminSessionManager_at_1d66aa9.getSession()
0.184 com.documentum.fc.client.DfQuery_at_1c2e31d.execute() select r_object_id, r_version_label, i_position from dm_sysobject (all) where i_chronicle_id (0903303480001116)
0.116 com.documentum.fc.client.impl.collection.CollectionHandle_at_1a13047.next() select r_object_id, r_version_label, i_position from dm_sysobject (all) where i_chronicle_id (0903303480001116)
0.107 com.documentum.fc.client.impl.collection.CollectionHandle_at_1a13047.next() select r_object_id, r_version_label, i_position from dm_sysobject (all) where i_chronicle_id (0903303480001116)
18Example 2 - continued
Duration Secs Rows Query
61.233 30,123 select r_object_id, r_version_label, i_position from dm_sysobject (all) where i_chronicle_id 0903303480001116
0.234 22 select r_object_id, object_name, title, keywords, authors, r_object_type from dm_document where folder(/Business/Florida/Key2)
0.184 1 select child_id from dm_relation where parent_id 0903303480001116 and child_id in (select r_object_id from custom_templates where templ_type contract_docs)
0.116 2 select r_object_id, r_version_label, i_position from custom_templates where i_chronicle_id 0903303480000c9e
0.107 1 select r_folder_path from dm_folder where folder(/Business/Florida/Key2, descend)
19Xense DFC Trace Analysis Example 3
Total Duration Frequency Average Duration DFC Call
7.033 1502 0.005 com.documentum.fc.client.DfQuery.execute
5.015 500 0.010 com.documentum.fc.client.DfPersistentObject.fetch
3.123 1502 0.002 com.documentum.fc.client.impl.collection.CollectionHandle.next
0.236 21 0.011 com.documentum.fc.client.impl.session.SessionHandle.getObject
0.172 1 0.172 com.documentum.fc.client.impl.session.SessionHandle.getFolderByPath
0.109 12 0.009 com.documentum.fc.client.impl.session.SessionHandle.getTypeDescription
0.079 129 0.001 com.documentum.fc.client.impl.session.SessionHandle.getType
0.079 205 0.000 com.documentum.fc.client.impl.collection.CollectionHandle.next
0.047 1983 0.000 com.documentum.fc.client.DfAdminSessionManager.getSession
0.031 1 0.031 com.documentum.fc.client.DfSysObject.getFormat
0.016 12 0.001 com.documentum.fc.client.impl.validation.Validator.getValueAssistance
0.015 1984 0.000 com.documentum.fc.client.impl.session.SessionManager.release
0.015 94 0.000 com.documentum.fc.client.impl.session.SessionHandle.getLoginUserName
0.000 3989 n/a All Other Functions
20Xense DFC Trace Analysis Example 4
Total Duration Frequency Average Duration DFC Call
1.290 1 1.290 com.documentum.operations.DfDeleteOperation.execute
0.128 1 0.128 com.documentum.fc.client.DfClient.newSessionManager
0.125 32 0.004 com.documentum.fc.client.DfSessionManager.getSession
0.102 1 0.102 com.documentum.com.DfClientX.getDeleteOperation
0.092 20 0.001 com.documentum.operations.DfDeleteOperation.add
0.055 23 0.000 com.documentum.fc.client.DfSession.getObject
0.000 2123 n/a All Other Functions
21Performance Patterns
- Pattern 1 single long-running DFC calls
- Tuning to target these calls
- Pattern 2 long-running query
- Not just IDfQuery.execute!
- Tune the query
- Pattern 3 high frequency of DFC calls
- Reduce or eliminate repeated DFC calls or queries
- Pattern 4 look elsewhere!
22Summary
- Understand the Key Changes
- DMCL trace is dead
- Performance tuning with DFC trace
- Profile your performance
- Performance Analysis Tools and Performance
Patterns
23Presentations will be available on the Momentum
Monaco Website