No Slide Title

Download Report

Transcript No Slide Title

PeopleSoft for the
Oracle DBA
Session 627
[email protected]
www.go-faster.co.uk
1
Project Overview
 HRMS 7.5
 HRMS 8
 Local Swiss Payroll
 Global Payroll
 PeopleTools 7.59
 PeopleTools 8.15
 45000 employees
(33000 current)
 All Users via PIA
 127Gb Data, 147Gb
Total DB size
 3-tier clients (200-280
concurrent users)
 Web clients (20-40
concurrent users)
2
Technical Overview
 HP-UX 11 64-bit
 Clustered Servers
 HP Service Guard
 Oracle 8.0.5
 Oracle 8.1.7.2
 PT 7.59
 PT 8.15.01
 Windows and Web
Clients
 PeopleSoft Internet
Architecture
3
System Specifications
 Development System
• HP V-Class, Model E 9000/800
CPU:
8
RAM:
12 GB
 Quality Assurance System
• HP V-Class, Model E 9000/800
CPU:
10/10
RAM:
8/8 GB
 Production System
• HP V-Class, Model E 9000/800
CPU:
20/20
RAM:
24/10 GB
4
Challenges
 Large HRMS implementation
 Lots of customisations
 Payroll is a ‘financial’ batch
 Oracle bugs
 Performance Problems
5
DBA Team
 Good Administrative Practice
 Performance Tuning
6
DBA Team
 Good Administrative Practice
 Performance Tuning
• logical structure of the database
• SQL tuning
• I/O and physical structure
• Resource contention
• Bugs
• New Features in Oracle 8.1
• Object Sizing
7
Techniques
 Who is logged in and what are they doing?
 Specification of the data model
 How to SQL_TRACE PeopleSoft
 Where does the code come from?
 Performance Metrics
8
Who is logged in and what are they
doing?
 Definition of ‘database’
 What happens at login
• PT7.5 -v- PT8
 Session Registration
• 2-tier client
• Application Server
• Other Batches
9
What happens when you connect to
PeopleTools 7.x?
Connect=H75D/PS/
EXECUTE :1 := SQLCQR_LOGINCHECK(:2)
SELECT OWNERID FROM PS.PSDBOWNER WHERE DBNAME = ‘H75D’
SELECT OWNERID,TOOLSREL,TO_CHAR(LASTREFRESHDTTM,'YYYYMM-DD HH24:MI:SS'), TO_CHAR(LASTCHANGEDTTM,'YYYY-MMDD HH24:MI:SS'), SECURITY_OPTION FROM SYSADM.PSLOCK
SELECT VERSION, OPRTYPE, OPERPSWD, ACCESSID, ACCESSPSWD
FROM SYSADM.PSOPRDEFN WHERE OPRID = ‘PS’
Connect=H75D/SYSADM/
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD
HH24.MI.SS."000000"') FROM PSCLOCK
SELECT VERSION FROM PSLOCK
10
What happens when you connect to
PeopleTools 8.1?
Connect=GP81O81/PEOPLE/
SELECT OWNERID FROM PS.PSDBOWNER WHERE DBNAME = 'GP81O81'
SELECT OWNERID, TOOLSREL, TO_CHAR(LASTREFRESHDTTM,'YYYYMM-DD HH24:MI:SS'), TO_CHAR(LASTCHANGEDTTM,'YYYY-MM-DD
HH24:MI:SS') FROM SYSADM.PSSTATUS
SELECT VERSION, OPERPSWD, ENCRYPTED, SYMBOLICID, ACCTLOCK
FROM SYSADM.PSOPRDEFN WHERE OPRID = 'PS'
SELECT ACCESSID, ACCESSPSWD, ENCRYPTED FROM
SYSADM.PSACCESSPRFL WHERE SYMBOLICID = 'SYSADM1'
Connect=GP81O81/SYSADM/
SET type=2012 program=pstools.exe
SET type=2 OprId=PS
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD-HH24.MI.SS."000000"')
FROM PSCLOCK
Connect=GP81O81/SYSADM/
11
Session Registration
 Problem: Everybody connects to the
database as ‘sysadm’.
 Oracle provides a PL/SQL package
• DBMS_APPLICATION_INFO writes string to
sys.v$session.client_info
<Operator ID>,<OS user name>,<machine
name>,<domain ID>,<program name>
 above is PT8.1 string
• eg.
PS,david,GO-FASTER-1,PT81,PSSAMSRV.EXE,
• PeopleSoft uses this package from 7.53 (Cobol
from 7.54)
12
Session Registration
 Windows Client in 2-tier registers by
default (7.53)
 Application Server configuration parameter
EnableDBMonitoring=1
 Cobol (from 7.54)
 Not used with SQR
(from 8.1x) prcsapi.src
13
Session Registration Trigger
 When a process is started by the process
scheduler it updates its own status
• from 6 (initiated)
• to 7(processing)
• see this from process monitor
• so, place a trigger on this transition
• works with Cobol and SQR
• does not work with PS/Query-Crystal, nVision,
DBAgents
 because their status is updated by different
application server process - PSSAMSRV
14
Session Registration Trigger
 Prepends Process Instance to client_info
create or replace trigger psprcsrqst_register
before update of runstatus on psprcsrqst for each row
when (new.runstatus = 7 and old.runstatus != 7
and not new.prcstype IN('Crystal','PSJob','Database
Agent','nVision-ReportBook'))
declare
l_client_info varchar2(64);
begin
sys.dbms_appplication_info.read_client_info(l_client_info);
l_client_info:=SUBSTR(TO_CHAR(:new.prcsinstance)||','||
l_client_info,1,64);
sys.dbms_application_info.set_client_info(l_client_info);
exception when others then null;
end;
/
15
Specification of the Data Model
 Two Data Dictionaries
 Default Indexes
 User Specified Indexes
 PT8.1: Platform Specific View definition
16
Tools Table -v- DB Catalogue
T ab le D e scrip tio n
O racle T ab le
P e o p le T o o ls T ab le
1 ro w p e r tab le /v ie w
D BA_TABLES
D B A _ V IE W S
PSRECDEFN
1 ro w p e r co lu m n
D BA_TAB_CO LU M N S
P S R E C F IE L D
D a ta D e fin itio n
1 ro w p e r d is tin c t co lu m n n am e
P S D B F IE L D
1 ro w p e r v ie w
D B A _ V IE W S
P S V IE W T E X T
1 ro w p e r sy n o n y m
DBA_SYNONYM S
1 ro w p e r in d e x
D B A _ IN D E X E S
P S IN D E X D E F N
1 ro w p e r in d e x e d co lu m n
D B A _ IN D _ C O L U M N S
PSKEYDEFN
DBA_USERS
PSO PRDEFN
S e cu rity
1 ro w p e r o p rid
(P e o p le T o o ls < = 7 .x )
G ran t fo r ta b le acce ss
D B A _ T A B _ P R IV S
17
Keys & Indexing
 Implied from Record Definition
• Key
• Duplicate
• List (not Tools 8)
• Alternate Search
• Descending
 User Specified
 Constraints
 Suppressing Index build
 Sparse Indexing
18
Indexes Implied from Record Definition
 Key
• Duplicate
 List (not indexed in Tools 8)
 Alternate Search
 Descending
19
Suppressing Index build
 In Application Designer
• Tools -> Data Administration -> Indexes ->
Change Record Indexes -> Edit Index
20
User Specified Index
21
Descending Key Index Bug
 The following parameter must be added to
the init.ora of an Oracle 8.1.x instance
 BEFORE you build descending key indexes.
EVENT='10612 trace name context forever,
level 1’
_ignore_desc_in_index = TRUE
 This takes care of several bugs found
related to DESC INDEXES (errant
ORA-3113s)
22
Constraints
 Unique
• Implied by Unique Key Indexes
 Mandatory/Not Null
 Referential Integrity?
• There aren’t any!
23
Temporary Tablespaces
 Create tablespace ‘ORATEMP’
 Alter tablespace TEMPORARY
• can only contain temporary segment
• cannot contain any other object
• no redo logging
• alter temporary tablespace for all users
 Don’t do this to PSTEMP
24
Space Management
 DDL models
 Default -v- Override parameters
 Feeding back reality
25
DDL Models
 System-wide default storage options
26
Parameters
 PeopleSoft Parameters
• Square Brackets
 TBNAME, TBCOLLIST, IDXNAME, IDXCOLLIST,
TBSPCNAME
 User Parameters
• ** delimited
 Delivered (Oracle) INIT, NEXT, MAXEXT, PCT,
INDEXSPC, BITMAP
 Other possibilites
 COMPRESS, PREFIX LENGTH, PCTFREE, PCTUSED,
NOLOGGING, BUFFER POOL
27
Default -v- Override parameters
 Overrides in application designer
28
DDL Model
 PSDDLMODEL
Field Name
Type
Length
Attributes
Description
STATEMENT_TYPE
Nbr
1
Key
Statement Type
1 = Table
2 = Index
3 = Unique Index
4 = Tablespace
PLATFORMID
Nbr
2
Key
Platform ID
0 = SQLBase
1 = DB2
2 = Oracle
3 = Informix
4 = DB2/Unix
5 = ALLBASE
6 = Sybase
7 = Microsoft
8 = DB2/400
SIZING_SET
Nbr
3
Key
Sizing Set
PARMCOUNT
Nbr
3
Parameter Count
MODEL_STATEMENT
Long
0
Model SQL Statement
29
Default Parameters
 PSDDLDEFPARMS
Field Name
Type
Length
Attributes
Description
STATEMENT_TYPE
Nbr
1
Key
Statement Type
PLATFORMID
Nbr
2
Key
Platfor m ID
SIZING_SET
Nbr
3
Key
Sizing Set
PARMNAME
Char
8
Key
DDL Parameter Name
PARMVALUE
Char
128
DDL Parameter Value
30
Record Parameter Overrides
 PSRECDDLPARM
Field Name
Type
Length
Attributes
Description
RECNAME
Char
15
Key
Record (Table) Name
PLATFORMID
Nbr
2
Key
Platfor m ID
SIZINGSET
Nbr
3
Key
Sizing Set
PARMNAME
Char
8
Key
DDL Parameter Name
PARMVALUE
Char
128
DDL Parameter Value
31
Index Parameter Overrides
 PSIDXDDLPARM
Field Name
Type
Length
Attributes
Description
RECNAME
Char
15
Key
Record (Table) Name
INDEXID
Char
1
Key
Index Identifier
_ = Primary key index
# = List columns index
0-9 = Alternate search
key indexes
A-Z = User specified
indexes
PLATFORMID
Nbr
2
Key
Platfor m ID
SIZINGSET
Nbr
3
Key
Sizing Set
PARMNAME
Char
8
Key
DDL Parameter Name
PARMVALUE
Char
128
DDL Parameter Value
32
Two Data Dictionaries
 Compare
• Database Catalogue
 USER_TABLES, USER_INDEXES
• PeopleTools
 PSDDLDEFPARMS, PSRECDDLPARM,
PSIDXDDLPARM
33
Retrofitting Sizing into PeopleTools 7.5x
Data Dictionary
 NOT SUPPORTED BY PEOPLESOFT
• Possible to copy the sizing information in
USER_TABLES and USER_INDEXES back into
the Tools tables
 Why is this useful?
• An object is rebuilt during an upgrade
• Sizing information is preserved
 scripts available from
• http://www.go-faster.co.uk
34
Retrofitting Sizing into PeopleTools 8.1x
Data Dictionary
 NOW SUPPORTED BY PEOPLESOFT
• settables.sqr
• setindex.sqr
 copies database data dictionary value back into
PeopleSoft Data Dictionary
• issues on Oracle
 Global Temporary tables have NULL storage
options
 resulting in 0 values in PeopleSoft
35
Limitations of the DDL Model
 The following object cannot be created by
the DDL Model
• Index Organised Tables
• Partitions
• Global Temporary Tables
• Clusters
 Maintained manually by the DBA outside of
PeopleTools
• Structure of column list still inside PeopleTools
36
Tablespaces with Uniform Extent Size
 Attribute of Locally Managed Tablespaces
from Oracle 8.1
 Possible in prior versions if rely on
tablespace default storage option
 Every segment same size.
 Every free space also same size
 Space allocation algorithm will naturally
use up spaces at bottom of tablespace
 Less fragmentation
 No need to coalesce tablespace
37
Global Temporary Tables
 New Feature in Oracle 8.1
 Definition is persistent
 Content is private & transient to session
• not suitable for on-line processing due to multithreaded nature of application server
 Reduced Redo Logging
• unrecoverable
• significant I/O reduction
 min overhead 80 bytes/row
 No Permanent Tablespace space overhead
• physically exist in temporary tablespace.
38
Uses for temporary tables
 It is better to design a process not to
temporarily store large amounts of data in
the database in a permanent object in the
first place.
 Local Swiss Payroll
 Financial Batches
 Global Payroll
• Application engine & Cobol make extensive use
of temporary working tables.
 No High Water Mark issues
• table created fresh for every session/transaction
39
What is Partitioning?
 Logically,
• a partitioned table is a still a single table
 Physically,
• each partition is a separate table.
• in a range partitioned table, the partition in
which a row is placed is determined by the
value of one or more columns.
 Local Index
• is partitioned on the same logical basis as the
table.
40
How should Partitioning used in GP?
 Largest Result tables range each
partitioned on EMPLID to match GP
streaming
• 1 stream : 1 partition
• Thus each stream references one partition in each result
table.
• Only 1 interested transaction per block
• Indexes ‘locally’ partitioned
 Partitioning really designed for DSS
systems. Only efficient for large tables.
• GP_RSLT_ACUM, GP_RSLT_ERN_DED,
• GP_RSLT_PIN, GP_RSLT_PI_DATA
• GP_PYE_PRC_STAT, GP_PYE_SEG_STAT
41
SQL Tracing
 Client
 Batches (AE, SQR)
 Reports (Crystal, nVision, PS/Query)
 Tracing with Triggers
 Where does the code come from
42
SQL Optimisation
 SQL_TRACE = TRUE;
 Embed command
 Trigger on processes via process scheduler
• PSPRCSRQST
 Set trace in session
• 2-tier client is multithreaded
• Small Private Application server
43
SQL_TRACE = TRUE;
 Initialisation Parameter
TIMED_STATISTICS = TRUE
 In current session
ALTER SESSION SET SQL_TRACE=TRUE;
 In another session
EXECUTE
sys.dbms_system.set_sql_trace_in_session
(<sid>,<serial#>,TRUE);
44
Enabling Client Tracing
45
Typical Trace Output
1-2285
0.861 Cur#1 RC=0 Dur=0.000 COM Stmt=SELECT
VERSION, FIELDVALUE, TO_CHAR(EFFDT,'YYYY-MM-DD'),
EFF_STATUS, XLATLONGNAME, XLATSHORTNAME,
TO_CHAR(LASTUPDDTTM,'YYYY-MM-DD-HH24.MI.SS."000000"'),
LASTUPDOPRID, FIELDNAME, LANGUAGE_CD, EFFDT FROM XLATTABLE
WHERE FIELDNAME = :1 AND LANGUAGE_CD = :2 ORDER BY
FIELDNAME, LANGUAGE_CD, FIELDVALUE, EFFDT
1-2286
0.000 Cur#1 RC=0 Dur=0.000 Bind-1 type=2
length=6 value=ACTION
1-2287
0.000 Cur#1 RC=0 Dur=0.000 Bind-2 type=2
length=3 value=ENG
1-2288
0.111 Cur#1 RC=0 Dur=0.000 COM Stmt=SELECT
VERSION FROM PSLOCK
46
SQLCLEANUP.EXE
SELECT VERSION,
FIELDVALUE,
TO_CHAR( EFFDT,
'YYYY-MM-DD' ),
EFF_STATUS,
XLATLONGNAME,
XLATSHORTNAME,
TO_CHAR( LASTUPDDTTM,
'YYYY-MM-DD-HH24.MI.SS."000000"' ),
LASTUPDOPRID,
FIELDNAME,
LANGUAGE_CD,
EFFDT
FROM XLATTABLE
WHERE FIELDNAME = :1
AND LANGUAGE_CD = :2
ORDER BY FIELDNAME, LANGUAGE_CD, FIELDVALUE, EFFDT
\
ACTION,ENG
/
47
Application Engine / SQR
 What you see in the code is what you get
• All PS programs can be traced
48
Trigger for via process scheduler
 PSPRCSRQST
create or replace trigger sysadm.set_trace
before update of runstatus on sysadm.psprcsrqst
for each row
when (new.runstatus = 7 and old.runstatus != 7
and NOT new.prcstype IN('Crystal','PSJob',
'Database Agent','nVision-ReportBook') and ...)
)
begin
sys.dbms_session.set_sql_trace(true);
end;
/
49
How developers can enable
SQL_TRACE
 Check the box
 Only the next execution of this process is
traced
• then the box will be unchecked
 Log of traced executions
50
Then what happens?
 SQL trace is enabled by a trigger
 When the process terminates, the trace file
is processed with TKPROF
 Two additional files produced
• i) statements sorted by elapsed execution time
• ii) statements sorted by elapsed fetch time
 Top 10 Statements only
 Execution plans
51
52
Set trace in session
 2-tier client is multithreaded
 Small Private Application server
• EXECUTE sys.dbms_system.set_sql_trace_in_session
(<sid>,<serial#>,TRUE);
53
Where does the code come from?
 Application Engine
• no bind variables - literal values
 PS/Query
• table aliases A, B, C, A1, B1 …
 Panel Processor
• mostly upper case SQL
 PeopleCode (scroll functions)
• upper case select and from clause
• lower case where clause with litteral values
 SQR
• mixed case with bind variable :1, :2 …
• three character table aliases
54
Performance Metrics
 Process Scheduler Table - PSPRCSRQST
 Trigger to capture history into an archive table
CREATE OR REPLACE TRIGGER SYSADM.psprcsrqst_archive
before delete on SYSADM.psprcsrqst
for each row
begin
insert into SYSADM.ps_prcsrqstarch
(PRCSINSTANCE
, ...
) values
(:new.PRCSINSTANCE
, ...
);
EXCEPTION WHEN OTHERS THEN NULL;
end;
/
55
Summary
 Identified Sessions
 Synchronised sizing information in
dictionaries
 Global Temporary Tables
 Partitioned Tables
 Trace individual processes
 Identify where the SQL comes from
 Performance Tuning
 Control index creation without altering
application
 Performance Metrics/History
56
Questions?
57
And there’s more
 Configuring Global Payroll for Optimal
Performance
 Session 527
• Wednesday 10.30 - 11.30
 Round Table Discussion session 626
• Wednesday 15.30 - 16.30
• Discuss some areas in more detail.
58
PeopleSoft for the
Oracle DBA
Session 627
[email protected]
www.go-faster.co.uk
59