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
Download ReportTranscript 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
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