Upload
zend-by-rogue-wave-software
View
507
Download
0
Embed Size (px)
Citation preview
Fundamentals of performance tuning PHP on IBM i Mike Pavlak – Zend, a Rogue Wave companyAlan Seiden – Alan Seiden Consulting, Club SeidenJuly 27, 2016
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
PHP performanceBasics
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?
5
Some contributors to performance
• Additive workload• Transitional workload• Organic growth• Network infrastructure• Entropy• Get out in front of these before you need
to
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
7
Rename PHP log file• Zend Server will create more
– REN OBJ('/usr/local/zendsvr/var/log/php.log') NEWOBJ(phplog20120306.txt)
New log
8
Poll #1 + Results
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
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
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
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
PHP performanceData cache
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
17
Standard DB2 call• 350+ customer orders
18
DB2 call with data cache
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
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
21
Poll #2 + Results
Alan’s awesome stuffApache threads
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 …
Alan’s awesome stuffSession locking
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
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.
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
Alan’s awesome stuffCompression
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
31
Poll #3 + Results
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
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
Alan’s awesome stuffDB2 query optimization
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
37
Index Advisor• Now in web-based Navigator as well as thick client• Recommends indexes across all queries
38
SQL Plan Cache• See what queries are REALLY running, who’s running them, and
how long they take
Alan’s awesome stuffPersistent connections
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
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
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
Alan’s awesome stuffUnique performance tools of 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
45
Today, go beyond WRKACTJOB
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)
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
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]
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!
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