fundamentals of performance tuning php on ibm i

46
Fundamentals of performance tuning PHP on IBM i Mike Pavlak – Zend, a Rogue Wave company Alan Seiden – Alan Seiden Consulting, Club Seiden July 27, 2016

Upload: zend-by-rogue-wave-software

Post on 15-Jan-2017

513 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Fundamentals of performance tuning PHP on IBM i

Fundamentals of performance tuning PHP on IBM i Mike Pavlak – Zend, a Rogue Wave companyAlan Seiden – Alan Seiden Consulting, Club SeidenJuly 27, 2016

Page 2: Fundamentals of performance tuning PHP on IBM i

2

Agenda

• PHP performance with Mike– Basics– Data cache

• Alan’s awesome stuff– Apache threads– Session locking– Compression– DB2 query optimization– Persistent connections– Unique performance tools of IBM

i• Wrap up

Page 3: Fundamentals of performance tuning PHP on IBM i

PHP performanceBasics

Page 4: Fundamentals of performance tuning PHP on IBM i

4

Don’t panic!• Grab your towel, pocket your babelfish and …• PHP performance is RARELY the culprit• Many factors impact performance

– Hardware• Processor class • Memory

– Operating System level • Currently support 7.1, 7.2, & 7.3

– DB2 Data Access plans• Triangulate

– Is the whole system busy?– Just web workload slowing?

Page 5: Fundamentals of performance tuning PHP on IBM i

5

Some contributors to performance

• Additive workload• Transitional workload• Organic growth• Network infrastructure• Entropy• Get out in front of these before you need

to

Page 6: Fundamentals of performance tuning PHP on IBM i

6

PHP log file• Every time PHP encounters an error (warning & notice)

– Open log file in IFS– Write error– Close log file

• Over time, this file gets BIG!– Have seen in excess of 1.2 GB– How long does it take IFS to open large files? (OS level)

• Log file should be “clipped” periodically• Delete or rename the log file

Page 7: Fundamentals of performance tuning PHP on IBM i

7

Rename PHP log file• Zend Server will create more

– REN OBJ('/usr/local/zendsvr/var/log/php.log') NEWOBJ(phplog20120306.txt)

New log

Page 8: Fundamentals of performance tuning PHP on IBM i

8

Poll #1 + Results

Page 9: Fundamentals of performance tuning PHP on IBM i

11

Bit twiddling 101 …• Consider this VERY carefully, what is the most expensive resource?• Single quotes vs. double quotes• Echo vs. Print• Sprint() instead of “”• Unset variables for memory management• Close database connection if you are done unless pconnect• $row[‘id’] is faster than $row[id];• Static pages (html) are OK!!!• Not everything has to be a Framework

– Fastest to slowest:• Construct• Function• Static method• Object• Framework

Page 10: Fundamentals of performance tuning PHP on IBM i

12

Don’t write PHP like RPG• RPG applications often are built with main file then chains

– SETLL then READE ORDDETAIL• CHAIN PRODUCT• CHAIN INVENT• CHAIN ONPLAN

• Consider a single SQL statement– Join files are more efficient that chains, in most cases– SQL optimizers are genius– Learn good indexing strategy– Go to SQL sessions at conferences– Ask Mike Cain, he’ll tell you!

• Great Redbooks:– Database modernization– RPG and Application Modernization

Page 11: Fundamentals of performance tuning PHP on IBM i

13

Fast CGI• Mechanism for communicating between Apache and PHP• Built in with 10 server jobs at the time of installation• This should conform to concurrent processes• Watch this as more workload is migrated to web

Page 12: Fundamentals of performance tuning PHP on IBM i

14

Fast CGI continued …• Changing this

– is something that should be considered– but not taken lightly (for example system resources)

• File to edit:– /www/zendsvr/conf/fastcgi.conf – SetEnv="PHP_FCGI_CHILDREN=10"

• But don’t forget …– StartProcesses = “2” * PHP_FCGI_CHILDREN = 8 is 16 total

worker jobs– youngiprofessionals.com/wiki/FastCGI – systeminetwork.com/article/other-languages/fastcgi-boosts-ph

p-performance-on-ibm-i-66195

Page 13: Fundamentals of performance tuning PHP on IBM i

PHP performanceData cache

Page 14: Fundamentals of performance tuning PHP on IBM i

16

Data access is powerful• Green screen applications take DB2 access for granted• Traditional application

– Heads down data entry– Occasionally press <F4> for “point and shoot” window– Performance hit ONLY when tapping <F4>

• Web page– AJAX or probably a drop down list– 20 input capable fields where half are drop down lists means

• 10 SQL executions run before user even starts on page

Page 15: Fundamentals of performance tuning PHP on IBM i

17

Standard DB2 call• 350+ customer orders

Page 16: Fundamentals of performance tuning PHP on IBM i

18

DB2 call with data cache

Page 17: Fundamentals of performance tuning PHP on IBM i

19

Rules for using data cache• This is a spice, not an main dish• Types of data to cache:

– Frequently accessed, rarely changes• List of states, warehouse codes, customer types …

– Hard to compute numbers• YTD sales 2013, 2014, 2015 (2016 should be calculated,

maybe)• Cache expiration

– Each data element can have it’s own expiration interval– Can expire a specific element programmatically

• Add this to maintenance application (new warehouse code)– Can expire entire cache from admin GUI

Page 18: Fundamentals of performance tuning PHP on IBM i

20

Data cache – pros and cons• Pros

– Reduce load on DB2– Improve application response time– Great for dashboards & data entry

• Cons– Need to track where data elements are cached– Develop a consistent approach to use– May use a little RAM, but manageable– Overuse and lack of knowledge can create a negative

perspective

• White paper “A practical guide to data caching with Zend Server”– zend.com/topics/Zend-Server-Data-Caching-Whitepaper-0106-T-WP-R1-EN.pdf

Page 19: Fundamentals of performance tuning PHP on IBM i

21

Poll #2 + Results

Page 20: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffApache threads

Page 21: Fundamentals of performance tuning PHP on IBM i

24

If you increase fastcgi child jobs …• You may also need more Apache HTTP threads

• Apache’s ThreadsPerChild– /www/zendsvr6/conf/httpd.conf– Default: ThreadsPerChild 40– Increase to number of expected HTTP connections

• PHP requests• CSS• Javascript• AJAX requests

• Speaking of AJAX, see next slides for optimization for heavy AJAX use …

Page 22: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffSession locking

Page 23: Fundamentals of performance tuning PHP on IBM i

26

Reduce session locking• Sessions can keep track of user who is logged in, for example

– Cookie in browser tells PHP which session file to use– session_start() initiates session in PHP

• Opens and locks the file for updating – Located in /tmp by default– Access data via $_SESSION

array

Page 24: Fundamentals of performance tuning PHP on IBM i

27

AJAX requests burden sessions• With AJAX, one page is > 1 request

– Multiple requests (AJAX/JSON) in one page– If PHP sessions used (session_start), all requests from one

browser use same PHP session on back-end

Above see result of numerous PHP requests launched in one page. Note the “waterfall” shape; each waits for the previous to finish.

Page 25: Fundamentals of performance tuning PHP on IBM i

28

Solution to AJAX session locking• As soon as your application finishes writing data to the session,

close it– session_write_close() ends the lock– You can still read $_SESSION array

• Comparison: WITHOUT session_write_close():

WITH session_write_close(): Parallel, faster! e.g. 834ms instead of 1.84ms

Page 26: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffCompression

Page 27: Fundamentals of performance tuning PHP on IBM i

30

More Apache config: mod_deflate• Called gzip or mod_deflate, the same for our purposes

• Compresses, speeds up html, javascript, css, favicons, anything text-based

Page 28: Fundamentals of performance tuning PHP on IBM i

31

Poll #3 + Results

Page 29: Fundamentals of performance tuning PHP on IBM i

33

My compression test• http://your-server:10080/Samples/SQL_access/

DB2_SQL_example.php

• Before compression: 31.0kb; loaded in 250ms • After compression: 4.4kb; loaded in 109ms • That’s 14% of the size and 50% of the time

Page 30: Fundamentals of performance tuning PHP on IBM i

34

Details of deflate/gzip compression• Apache directives (sample)

# Load IBM i's module that performs compression LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM

# Specify content types to compressAddOutputFilterByType DEFLATE application/x-httpd-php application/json text/css application/x-javascript application/javascript text/html

• Tutorial on my blog:– alanseiden.com/2010/08/13/maximize-zend

-server-performance-with-apache-compression/• Apache reference:

– httpd.apache.org/docs/2.0/mod/mod_deflate.html

Page 31: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffDB2 query optimization

Page 32: Fundamentals of performance tuning PHP on IBM i

36

DB2 query optimization• I’ll share a couple of favorite IBM i tools

– Index Advisor– SQL Plan Cache

• See IBM’s book IBM i Database Performance and Query Optimization– ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzajq

/rzajq.pdf

Page 33: Fundamentals of performance tuning PHP on IBM i

37

Index Advisor• Now in web-based Navigator as well as thick client• Recommends indexes across all queries

Page 34: Fundamentals of performance tuning PHP on IBM i

38

SQL Plan Cache• See what queries are REALLY running, who’s running them, and

how long they take

Page 35: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffPersistent connections

Page 36: Fundamentals of performance tuning PHP on IBM i

40

Use persistent connections• On IBM i, job initialization takes longest

– Gives us auditing, logging, security– Solution: a pool of pre-initialized jobs

• Pre-started DB2 jobs save time – Generally run in subsystem QSYSWRK, job name QSQSRVR– These prestart jobs can be configured with CHGPJE command

• In PHP, persistent connections reuse initialized jobs– db2_pconnect()– Dramatic speed boost

Page 37: Fundamentals of performance tuning PHP on IBM i

41

db2_pconnect() to connect persistently• db2_pconnect ( string $database , string $username , string

$password [, array $options ] )

• Persistent is much faster than non-persistent– db2_pconnect can reuse connections, reducing the time

needed to connect (after the first time) to almost zero

• More information: – “DB2 and PHP Best Practices on IBM i” at

alanseiden.com/presentations

Page 38: Fundamentals of performance tuning PHP on IBM i

42

DB2 server prestart job configuration• Prestart jobs named QSQSRVR run in QSYSWRK• Or, if remote DRDA, QRWTSRVR in QUSRWRK• Configurable pool of jobs

CHGPJE SBSD(QSYS/QSYSWRK) PGM(QSYS/QSQSRVR) STRJOBS(*YES) INLJOBS(xx) THRESHOLD(xx) ADLJOBS(xx) MAXUSE(xx or *NOMAX)

• Defaults are somewhat low– Initial jobs = 5, threshold = 2, adljobs = 2. Maxuse = 200

(*NOMAX may be better)• More information about QSQSRVR prestart jobs

– mcpressonline.com/tips-techniques/database/techtip-grab-control-of-the-db2-qsqsrvr-jobs.html

Page 39: Fundamentals of performance tuning PHP on IBM i

Alan’s awesome stuffUnique performance tools of IBM i

Page 40: Fundamentals of performance tuning PHP on IBM i

44

IBM i system tools• WRKACTJOB is a good start

• Hover over CPU % and press F16 to sort by CPU• Provides a general view of what’s running• Look at call stacks of “misbehaving” jobs

Page 41: Fundamentals of performance tuning PHP on IBM i

45

Today, go beyond WRKACTJOB

Page 42: Fundamentals of performance tuning PHP on IBM i

46

Performance tools• User-friendly, web-based tools that are either free or low cost

– Performance Data Investigator is free– Job Watcher is low cost

• Performance Tools licensed program (GO LICPGM)– 7.x: 5770PT1

• Install latest level of these group PTFs– 7.1: SF99368 (HTTP Server), SF99572 (Java), SF99701

(Database), SF99145 (Performance Tools)– 7.2: SF99713 (HTTP Server), SF99716 (Java), SF99702

(Database), SF99145 (Performance Tools)– 7.3: SF99722 (HTTP Server), SF99725 (Java), SF99703

(Database)

Page 43: Fundamentals of performance tuning PHP on IBM i

47

Resources for IBM i performance• Dawn May

– Hear Dawn speak at COMMON and other conferences– ibmsystemsmag.blogs.com/i_can/

• Lab Services in Rochester– Many experts there. I’ve worked with Stacy Benfield– ibmsystemsmag.blogs.com/i_can

/2010/08/i-can-benefit-from-ibm-systems-lab-services-and-training.html

• IBM i on Power Performance FAQ– ibm.co/1RdkDn4

Stay tuned for speaker info

Page 44: Fundamentals of performance tuning PHP on IBM i

48

Alan Seiden• Founder of Alan Seiden Consulting and Club Seiden• “Performance guru of PHP on IBM i”• Leader, Zend’s PHP Toolkit for IBM i

• Alan Seiden Consulting is a team of experts available for mentoring/troubleshooting/project advice/development. alanseiden.com, [email protected]

Page 45: Fundamentals of performance tuning PHP on IBM i

49

Zend services• Audit – Find the holes in an application

– Performance– Architecture– Security

• Training – Get better– Smart Start– Online

• Architect Advisor – Professionals on call• Zend Server Plus

– PHP and more!

Page 46: Fundamentals of performance tuning PHP on IBM i

ATTENDBecome a PHP authority.Connect with experts.Register now.

CELEBRATE10 years of PHP on IBM i.Join us for the party!

SPONSORSpotlight your best in enterprise [email protected]

Visit zendcon.com