PeopleSoft for the DBA
Download
Report
Transcript PeopleSoft for the DBA
604: PeopleSoft for the
Oracle DBA
[email protected]
http://www.ubs.com
[email protected]
http://www.go-faster.co.uk
Project Overview
HRMS 7.5
Local Swiss Payroll
PeopleTools 7.59
45000 employees (33000 current)
127Gb Data, 147Gb Total DB size
3-tier clients (200-280 concurrent users)
Web clients (20-40 concurrent users)
Upgrading to HR8 + GP
2
Technical Overview
HP-UX 11 64-bit
Clustered Servers
HP Service Guard
Oracle 8.0.5 -> 8.1.6
Multi-Processor Tuxedo Domains
Windows and Web Clients
3
Hardware Configuration
QA
Development
Production
4
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
5
EMC Storage Arrays
Storage EMC
R1
R2
R3
256 disks
158 disks
84 disks
--------Total 498 disks x 18 GB = 8.7 TB
6
Database Upgrade Path
HOTL
M
PS 7.5 DEVP
I
QUAL
G
PROD
R
EXP8
UPGR8
MIGR
PS 8
DEVP8
QUAL8
ENG?
PLAY
7
DEMO
HOTL
PROD8
ENG?
Challenges
Large HRMS implementation
Lots of customisations
Payroll is a ‘financial’ batch
Oracle bugs
Performance Problems
8
DBA Team
Good Administrative Practice
Performance Tuning
9
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
10
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
11
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
12
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,'YYYY
-MM-DD HH24:MI:SS'),
TO_CHAR(LASTCHANGEDTTM,'YYYY-MM-DD
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
13
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,'YYYY-MM-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-DDHH24.MI.SS."000000"') FROM PSCLOCK
Connect=GP81O81/SYSADM/
14
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)
15
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
So we wrote a trigger
16
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
17
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
select client_info into l_client_info from v$session
where sid = (select sid from v$mystat where rownum = 1);
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;
/
18
Specification of the Data Model
Two Data Dictionaries
Default Indexes
User Specified Indexes
PT8.1: Platform Specific View definition
19
Tools Table -v- DB Catalogue
Table Description
Oracle Table
PeopleTools Table
Data Definition
1 row per table/view
1 row per column
DBA_TABLES
PSRECDEFN
DBA_VIEWS
DBA_TAB_COLUMNS PSRECFIELD
1 row per distinct column name
PSDBFIELD
1 row per view
DBA_VIEWS
PSVIEWTEXT
1 row per synonym
DBA_SYNONYMS
1 row per index
DBA_INDEXES
1 row per indexed column
DBA_IND_COLUMNS PSKEYDEFN
PSINDEXDEFN
Security
1 row per oprid
DBA_USERS
(PeopleTools <=7.x)
Grant for table access
20
DBA_TAB_PRIVS
PSOPRDEFN
Keys & Indexing
Implied from Record Definition
Key
Duplicate
List (not Tools 8)
Alternate Search
Descending
User Specified
Constraints
Suppressing Index build
Sparse Indexing
21
Indexes Implied from Record
Definition
Key
Duplicate
List (not indexed in Tools 8)
Alternate Search
Descending
22
Suppressing Index build
In Application Designer
Tools -> Data Administration -> Indexes ->
Change Record Indexes -> Edit Index
23
User Specified Index
24
Descending Key Index Bug
The following parameter must be added to
the init.ora of an Oracle 8.1.6 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)
25
Constraints
Unique
Implied by Unique Key Indexes
Mandatory/Not Null
Referential Integrity?
There aren’t any!
26
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
27
Space Management
DDL models
Default -v- Override parameters
Feeding back reality
28
DDL Models
System-wide default storage options
29
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
30
Default -v- Override parameters
Overrides in application designer
31
DDL Model
PSDDLMODEL
32
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
Default Parameters
PSDDLDEFPARMS
33
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
Record Parameter Overrides
PSRECDDLPARM
34
Field Name
Type
Length
Attributes
Description
RECNAME
Char
15
Key
Record (Table) Name
PLATFORMID
Nbr
2
Key
Platform ID
SIZINGSET
Nbr
3
Key
Sizing Set
PARMNAME
Char
8
Key
DDL Parameter Name
PARMVALUE
Char
128
DDL Parameter Value
Index Parameter Overrides
PSIDXDDLPARM
35
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
Two Data Dictionaries
Compare
Database Catalogue
USER_TABLES, USER_INDEXES
PeopleTools
PSDDLDEFPARMS, PSRECDDLPARM,
PSIDXDDLPARM
36
Retrofitting Sizing into
PeopleTools 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 bundled with presentation or
available from
http://www.go-faster.co.uk
37
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
38
Global Temporary Tables
New Feature in Oracle 8.1
Reduced Redo Logging
40%-50% I/O reduction
unrecoverable
Definition is persistent
Content is private & transient to session
not suitable for on-line processing
Useful for temporary tables
Local Swiss Payroll
Financial Batches
No High Water Mark issues
Even faster truncate
39
SQL Tracing
Client
Batches (AE, SQR)
Reports (Crystal, nVision, PS/Query)
Tracing with Triggers
Where does the code come from
40
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
41
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);
42
Enabling Client Tracing
43
Typical Trace Output (PT7.x)
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-DDHH24.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
44
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
/
45
Mass Change/AE/SQR
What you see in the code is what you get
All PS programs can be traced
46
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;
/
47
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
48
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
49
Processed Trace Files on Web
3 files per process, .log, .exeela, .fchela
50
51
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);
52
Where does the code come from
(PeopleTools 7.x)?
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
53
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;
/
54
Summary
Identified Sessions
Synchronised sizing information in
dictionaries
Trace individual processes
Identify where the SQL comes from
Performance Tuning
Control index creation without altering
application
Performance Metrics/History
55
Questions?
56
604: PeopleSoft for the
Oracle DBA
[email protected]
http://www.ubs.com
[email protected]
http://www.go-faster.co.uk