Optimizing Oracle Server Performance on LINUX

44
© 2008 Quest Software, Inc. ALL RIGHTS RESERVED. Optimizing Oracle Server Performance on LINUX Tips for Maximizing Toad Productivity OOUG 2009 Columbus, OH July 16 th

description

Optimizing Oracle Server Performance on LINUX. Tips for Maximizing Toad Productivity OOUG 2009 Columbus, OH July 16 th. Agenda. Apply “low hanging fruit” fixes to speed up Oracle performance on Linux We’ll look at both database and operating system level modifications … - PowerPoint PPT Presentation

Transcript of Optimizing Oracle Server Performance on LINUX

Page 1: Optimizing Oracle Server Performance on LINUX

© 2008 Quest Software, Inc. ALL RIGHTS RESERVED.

Optimizing Oracle Server Performance on LINUX

Tips for Maximizing Toad Productivity

OOUG 2009Columbus, OHJuly 16th

Page 2: Optimizing Oracle Server Performance on LINUX

Agenda

• Apply “low hanging fruit” fixes to speed up Oracle

performance on Linux

• We’ll look at both database and operating system

level modifications …

• Goal is simple – how can we maximize Oracle

performance on Linux servers!

Page 3: Optimizing Oracle Server Performance on LINUX

3

Bert Scalzo …Database Expert & Product Architect for Quest Software

Oracle Background:• Worked with Oracle databases for over two decades (starting with version 4)• Work history includes time at both “Oracle Education” and “Oracle Consulting”

Academic Background:• Several Oracle Masters certifications• BS, MS and PhD in Computer Science• MBA (general business)• Several insurance industry designations

Key Interests:• Data Modeling• Database Benchmarking• Database Tuning & Optimization• "Star Schema" Data Warehouses• Oracle on Linux – and specifically: RAC on Linux

Articles for:• Oracle’s Technology Network (OTN)• Oracle Magazine,• Oracle Informant• PC Week (eWeek)

Articles for:• Dell Power Solutions

Magazine• The Linux Journal• www.linux.com• www.orafaq.com

Page 4: Optimizing Oracle Server Performance on LINUX

4

Books by Bert …

Coming in 2009 …

Page 5: Optimizing Oracle Server Performance on LINUX

Couple of Questions (for both our benefit)

• How many people using

– Where using Linux• Production• Development• Personal Education

– Which Linux Distribution• Oracle Enterprise Linux• Redhat Enterprise Server• SUSE Linux Enterprise• Other ???

Page 6: Optimizing Oracle Server Performance on LINUX

LINUX Server Popularity

• IDC – Linux Servers:

– Posted 12th consecutive quarter of double-digit growth– Year-over-year revenue growth of 45.1%– Unit shipments up 32.1%– Revenue exceeded $1.4 billion quarterly (will reach 9.1 billion by

2008)– HP was first with 24.3% market share– IBM was second with 20.3% market share– Customers continue to expand role of Linux servers into an ever

increasing array of workloads in both commercial and technical segments of the market

• Gartner – Linux Servers:

– One of hottest applications for Linux is on RDBMS servers– Linux was the fastest growing platform for RDBMS past year– Enterprises turning to Linux as an alternative for older Unix’s

Page 7: Optimizing Oracle Server Performance on LINUX

LINUX Web Popularity

#1 OS !!!

www.netcraft.com/survey/index-200007.html

In Netcraft’s July 2000 survey of 18,169,498 web sites.

Page 8: Optimizing Oracle Server Performance on LINUX

LINUX Web Popularity

http://survey.netcraft.com/index-200106.html

Page 9: Optimizing Oracle Server Performance on LINUX

LINUX Web Popularity

http://news.netcraft.com/archives/2003/07/index.html

Page 10: Optimizing Oracle Server Performance on LINUX

LINUX Gaining Momentum

Page 11: Optimizing Oracle Server Performance on LINUX

LINUX Gaining Momentumhttp://www.gartner.com/DisplayDocument?ref=g_search&id=414985

Page 12: Optimizing Oracle Server Performance on LINUX

Popularity != Performance

Some plausible reasons for this:

• Relative newness of the LINUX OS in general

• RISC UNIX sys admin unfamiliar with INTEL

• INTEL UNIX sys admin unfamiliar with LINUX

• Windows based sys admin unfamiliar with UNIX

• Oracle, Oracle, Oracle …

Page 13: Optimizing Oracle Server Performance on LINUX

Where Can We Look

What is Tunable:

• Hardware

• Operating System

• Database

• Network

• Application

SQL Tuning Advice – focus on application first, and then database and possibly network.

Linux Tuning Advice – focus on hardware, LINUX and Oracle database configurations.

SQL Tuning

Linux Tuning

Page 14: Optimizing Oracle Server Performance on LINUX

Performance Pyramid

Application

DBMS

OS

Hardware

Network

Page 15: Optimizing Oracle Server Performance on LINUX

Our Main Goal

To squeeze all the blood out of our LINUX turnip …

Page 16: Optimizing Oracle Server Performance on LINUX

Which LINUX DistributionOS Product Status

SLES-9 10gR2 Certified

Red Hat Enterprise AS/ES 4 10gR2 Certified

Red Hat Enterprise AS/ES 3 10gR2 Certified

SLES-9 10g Certified

SLES-8 10g Certified

Red Hat Enterprise Linux AS/ES 4 10g Certified

Red Hat Enterprise Linux AS/ES 3 10g Certified

Red Hat Enterprise Linux AS/ES 2.1 10g Certified

Red Flag DC Server 4.0 (China Only) 10g Certified

Monta Vista Carrier Grade Linux 3.1 (Embedded) 10g Certified

Miracle Linux Standard Edition 2.1 (Japan only) 10g Certified

Asianux 2.0 10g Certified

Asianux 1.0 10g Certified

UnitedLinux 1.0 9.2 Certified

SLES-9 9.2 Certified

SLES-8 9.2 Certified

Red Hat Enterprise Linux AS/ES 4 9.2 Certified

Red Hat Enterprise Linux AS/ES 3 9.2 Certified

Red Hat Enterprise Linux AS/ES 2.1 9.2 Certified

Red Flag DC Server 4.0 (China Only) 9.2 Certified

Monta Vista Carrier Grade Linux 3.0 (Embedded) 9.2 Certified

Miracle Linux Standard Edition 2.1 (Japan only) 9.2 Certified

Asianux 1.0 9.2 Certified

Page 17: Optimizing Oracle Server Performance on LINUX

Which LINUX Distributionhttp://news.netcraft.com/archives/2005/12/05/strong_growth_for_debian.html

Page 18: Optimizing Oracle Server Performance on LINUX

Test Method

TPC benchmark (www.tpc.org)

TPC Benchmark™ C (TPC-C) is an OLTP workload. It is a mixture of read-only and update intensive transactions that simulate the activities found in complex OLTP application environments. It does so by exercising a breadth of system components associated with such environments, which are characterized by:

• The simultaneous execution of multiple transaction types that span a breadth of complexity• On-line and deferred transaction execution modes• Multiple on-line terminal sessions• Moderate system and application execution time• Significant disk input/output• Transaction integrity (ACID properties)• Non-uniform distribution of data access through primary and secondary keys• Databases consisting of many tables with a wide variety of sizes, attributes, and relationships• Contention on data access and update

Excerpt from “TPC BENCHMARK™ C: Standard Specification, Revision 3.5”

Page 19: Optimizing Oracle Server Performance on LINUX

Test Platform

Simulate 200

Users

Page 20: Optimizing Oracle Server Performance on LINUX

Carpenter Needs Tools

Between the hardware, LINUX and Oracle – there are far too many dependent variables for tuning to rely merely on human intuition and experience.

Golden Rule #1: Use OS & DB tuning tools!

Golden Rule #2: Don’t rely on free tools only!

If your customer or management are willing to buy more hardware for better performance, then there is obviously budget for tuning tools – press the issue!

Free is nice – but you often get what you pay for!

Page 21: Optimizing Oracle Server Performance on LINUX

Tools Used

This is not a sales pitch – I’m a DBA (a.k.a techno-nerd)!

Benchmark Factory• Create, populate and index the test database (200 megs)• Simulate 200 concurrent users via a single or many PC’s

LINUX Freebies• Command line utilities: sar, mpstat, iostat, vmstat, linmon, ipcs,

top, free, hdparm, linuxconf, slmon, …• X-Windows utilities: gtop, ktop, xload, xosview, kperfmeter,

gkrellmm, procmeter, gpowertweak, …

Page 22: Optimizing Oracle Server Performance on LINUX

Benchmark Factory - GUI

Page 23: Optimizing Oracle Server Performance on LINUX

Benchmark Factory - Agent

Page 24: Optimizing Oracle Server Performance on LINUX

LINUX cmd toolssar –r

01:00:00 PM kbmemfree kbmemused %memused kbmemshrd kbbuffers kbcached kbswpfree kbswpused %swpused01:10:00 PM 465132 48128 9.37 0 2708 26136 525288 0 0.0001:20:00 PM 463352 49908 9.72 0 2784 26732 525288 0 0.0001:30:00 PM 463356 49904 9.72 0 2784 26736 525288 0 0.0001:40:03 PM 1652 511608 99.67 0 532 18216 447360 77928 14.8301:50:01 PM 1604 511656 99.68 0 768 17228 369024 156264 29.7402:00:00 PM 376852 136408 26.57 0 1120 25692 503344 21944 4.17

Average: 295324 217936 42.46 0 1782 23456 482598 42690 8.12

vmstat

procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 5 0 122308 1588 440 17492 0 124 145 81 906 338 5 5 90 0 1 0 124608 1588 440 16992 0 230 194 97 1114 435 8 6 86 0 3 0 127132 1588 432 17140 0 253 164 155 992 373 11 5 84 0 1 0 128836 1588 440 17344 0 171 172 88 987 394 8 5 87 0 1 0 130428 1592 468 17024 0 159 189 143 1104 426 11 7 82 0 0 0 132052 1596 460 16940 2 164 181 131 1059 407 7 5 87 0 0 0 133240 1600 444 16508 1 120 166 124 1006 394 8 5 87 0 5 0 134920 1588 452 16596 0 168 138 122 870 344 6 7 87 1 2 0 136800 1592 448 16500 12 190 184 104 1074 419 7 7 86 1 0 0 138400 1600 432 16576 0 160 158 128 991 394 9 6 86 0 1 0 139764 1588 468 16516 0 136 183 135 1086 433 9 6 84 1 0 0 140780 1596 456 16680 5 102 126 65 815 332 9 8 83 1 1 0 141984 1588 444 16756 0 120 157 93 957 388 10 9 81 0 3 0 143044 1588 456 16516 0 106 185 137 1097 441 10 9 81 1 2 0 143944 1588 464 16468 0 90 138 115 899 348 12 7 82 1 2 0 144940 1588 464 16320 2 100 179 133 1099 442 8 8 84 1 1 0 146092 1596 468 16588 0 115 147 82 910 367 8 8 84 0 2 0 146820 1588 460 16416 18 73 135 111 882 338 7 7 86 0 5 0 147580 1588 440 16284 2 76 125 84 841 343 8 6 87 0 2 0 148144 1596 444 15776 0 56 134 89 890 361 6 5 89 0 0 0 148652 1588 448 15480 0 51 109 47 767 316 7 6 87

Page 25: Optimizing Oracle Server Performance on LINUX

LINUX gui tools

Page 26: Optimizing Oracle Server Performance on LINUX

Here We Go

Work up “Performance Pyramid”:

• Application (TPC – no mods)• Database• Operating System• Hardware

Other general benchmarking advice:

• Limit to one item per try• OS Low Hanging Fruit 1st• DB Low Hanging Fruit 2nd• Easy items before hard stuff

Page 27: Optimizing Oracle Server Performance on LINUX

DB1 - Initial Database Creation

Database Block Size = 2K

SGA Buffer Cache = 64M

SGA Shared Pool = 64M

SGA Redo Cache = 4M

Redo Log Files = 4M

Tablespaces = Dictionary

Test database created via Oracle’s “Database Configuration Assistant”

Prior to 9i, the tool’s default settings were ridiculously lower than these. A novice DBA or system admin user might use those lower default values and get much worse results!

Page 28: Optimizing Oracle Server Performance on LINUX

DB2 – Increase Buffer Cache & Shared Pool

Database Block Size = 2K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 4M

Redo Log Files = 4M

Tablespaces = Dictionary

Page 29: Optimizing Oracle Server Performance on LINUX

DB3 – Increase Redo Cache & Log Files

Database Block Size = 2K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 16M

Redo Log Files = 16M

Tablespaces = Dictionary

Page 30: Optimizing Oracle Server Performance on LINUX

DB4 – 4K Block Size

Database Block Size = 4K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 16M

Redo Log Files = 16M

Tablespaces = Dictionary

Page 31: Optimizing Oracle Server Performance on LINUX

DB5 – Local Tablespaces

Database Block Size = 4K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 16M

Redo Log Files = 4M

Tablespaces = Local

Page 32: Optimizing Oracle Server Performance on LINUX

DB6 – 8K Block Size

Database Block Size = 8K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 16M

Redo Log Files = 16M

Tablespaces = Local

Be careful – for example on RAC setupchoosing larger block size may causeinterconnect overload / hot-spots

Page 33: Optimizing Oracle Server Performance on LINUX

DB7 – IO Slaves + Increase Redo Log Files

Database Block Size = 8K

SGA Buffer Cache = 128M

SGA Shared Pool = 128M

SGA Redo Cache = 16M

Redo Log Files = 64M

Tablespaces = Local

INIT.ORAsession_cached_cursors=2db_block_lru_latches=8dbwr_io_slaves=4lgwr_io_slaves=4

Page 34: Optimizing Oracle Server Performance on LINUX

Oracle Modification Results

DB1 DB2 DB3 DB4 DB5 DB6 DB7 DB Finalload time 49.41 48.57 41.39 17.35 15.07 11.42 10.48 10.48

% Improved -1.73% -17.35% -138.56% -15.13% -31.96% -8.97% -371.47%trans/sec 8.15 9.15 10.09 10.18 10.43 10.68 10.72 10.72

% Improved 10.88% 9.33% 0.89% 2.36% 2.42% 0.32% 23.93%

Page 35: Optimizing Oracle Server Performance on LINUX

OS1 – IPC + Monolithic Kernel

Kernel = 2.2.14-5smp

Linuxconf = monolithic

Shared memory/usr/src/linux-2.2.16/include/asm/shmparam.h#define SHMMAX 0x13000000

Semaphors/usr/src/linux-2.2.16/include/linux/sem.h#define SEMMNI 100#define SEMMSL 512#define SEMMNS (SEMMNI*SEMMSL)#define SEMOPM 100#define SEMVMX 32767

Monolithic Kernel - If you compile everything into the kernel to exactly match your hardware and thus make minimal use of modules.

Page 36: Optimizing Oracle Server Performance on LINUX

OS2 – Newer Minor Kernel Update

Kernel = 2.2.16-3smp

Linuxconf = monolithic

Shared memory/usr/src/linux-2.2.16/include/asm/shmparam.h#define SHMMAX 0x13000000

Semaphors/usr/src/linux-2.2.16/include/linux/sem.h#define SEMMNI 100#define SEMMSL 512#define SEMMNS (SEMMNI*SEMMSL)#define SEMOPM 100#define SEMVMX 32767

Page 37: Optimizing Oracle Server Performance on LINUX

OS3 – Newer Major Kernel Update

Kernel = 2.4.1smp

Linuxconf = monolithic

Shared memory/usr/src/linux-2.4.00/include/linux/shm.h#define SHMMAX 0x13000000

Semaphors/usr/src/linux-2.4.00/include/linux/sem.h#define SEMMNI 128#define SEMMSL 512#define SEMMNS (SEMMNI*SEMMSL)#define SEMOPM 128#define SEMVMX 32767

Edit /etc/sysctl.conf

kernel.shmmax = 2147483647kernel.sem = 250 32000 100 128 The sem values are:

•SEMMSL•SEMMNS•SEMOPM•SEMMNI

To set w/out a reboot on Redhat:

sysctl -p

Page 38: Optimizing Oracle Server Performance on LINUX

OS4 – Newer Minor Kernel Update After Major

Kernel = 2.4.17smp

Linuxconf = monolithic

Shared memory/usr/src/linux-2.4.00/include/linux/shm.h#define SHMMAX 0x13000000

Semaphors/usr/src/linux-2.4.00/include/linux/sem.h#define SEMMNI 128#define SEMMSL 512#define SEMMNS (SEMMNI*SEMMSL)#define SEMOPM 128#define SEMVMX 32767

Edit /etc/sysctl.conf

kernel.shmmax = 2147483647kernel.sem = 250 32000 100 128 The sem values are:

•SEMMSL•SEMMNS•SEMOPM•SEMMNI

To set w/out a reboot on Redhat:

sysctl -p

Page 39: Optimizing Oracle Server Performance on LINUX

OS5 – noatime file attribute

The ext2 file system normally records when a filewas last modified and last accessed. We don’t needto know access time for Oracle files as backgroundprograms open and access the files until shutdown.

chattr +A file_name

chattr –R +A directory_name

Edit /etc/fstab

/dev/sda6 / ext2 defaults,noatime 1 1/dev/sda1 /boot ext2 defaults,noatime 1 2/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0/dev/md0 /u01 ext2 defaults,noatime 1 2/dev/fd0 /mnt/floppy auto noauto,owner 0 0none /proc proc defaults,noatime 0 0none /dev/pts devpts gid=5,mode=620 0 0/dev/sda5 swap swap defaults,noatime 0 0

Actually, this can be done on Windows server as well!

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem

NtfsDisableLastAccessUpdate=1

Page 40: Optimizing Oracle Server Performance on LINUX

OS6 – bdflush rate for VM

The bdflush file is closely related to the operation of the virtual memory (VM) subsystem of the Linux kernel and also has a little influence on disk usage.

Default = "40 500 64 256 500 3000 500 1884 2"

Redhat 6.1

echo “100 1200 128 512 15 500 1884 2” > /proc/sys/vm/bdflush

Redhat 6.2 (edit /etc/sysctl.conf)

vm.bdflush = 100 1200 128 512 15 5000 500 1884 2

Restart daemon

/etc/rc.d/init.d/network restart

1st parm is max # of dirty buffers in cache. Higher = delayed disk writes.

2nd parm is max # of dirty buffers per write. Higher = delayed, bursty I/O.

3rd parm is # of buffers added to list of free buffers by refill_freelist.

4th parm refill_freelist comes across more than nref_dirt dirty buffers, it will wake up bdflush.

5th parm is max time Linux waits before writing dirty buffers to disk for data blocks.

6th parm is max time Linux waits before writing dirty buffers to disk for file system metadata.

Page 41: Optimizing Oracle Server Performance on LINUX

OS7 – Ext3 File System

Ext3 is a journaling file system based upon ext2 – benefits include:

• both backward and forward compatible with ext2• easy to change from ext2 to ext3 and gain the benefits without reformatting• does not require a file system check even after an unclean system shutdown• recovery time does not depend on the size of the file system or the number of files• provide stronger guarantees about data integrity in case of an unclean system shutdown• faster (higher throughput) than ext2 as ext3's journaling optimizes hard drive head motion

Create Load Create TotalDatabase Tables Indexes Time

EXT2 348 295 234 877EXT3 228 158 122 508Reiser 378 297 537 1,212IBM JFS 351 277 231 859RAW 396 290 225 911RAW X 2 396 240 263 899

TPC-C

Page 42: Optimizing Oracle Server Performance on LINUX

LINUX Modification Results

DB1 DB Final OS1 OS2 OS3 OS4 OS5 OS6 OS7 OS Final Totalload time 49.41 10.48 9.54 9.40 8.32 8.20 5.58 4.43 3.80 3.80 3.80

% Improved -371.47% -9.85% -1.49% -12.98% -1.46% -46.95% -25.96% -16.58% -151.05% -1200.26%trans/sec 8.15 10.72 11.51 11.52 12.82 12.90 13.88 14.99 20.51 20.51 20.51

% Improved 23.93% 6.90% 0.10% 10.09% 0.66% 7.09% 7.37% 26.92% 43.88% 60.25%

Page 43: Optimizing Oracle Server Performance on LINUX

Some Final ThoughtsIDE Drives

• Default IDE settings stink – they must be changed and generally yield 500% improvement!!!• Test speed via hdparm –Tt /dev/hda• Tune spped via hdparm –X66 –d1 –u1 –m16 –c3 /dev/hda

MTS• Problematic under LINUX, more than a few TAR’s registered with Oracle technical support

Hardware RAID• LINUX driver support generally tier 2 and often provided by someone other than the vendor

4K File System• mke2fs –b 4096 mount_point• LINUX default file system block size = 1K, but max is 4K• Typical improvement of 5% for each increase (i.e. 5% for 1k–>2k and 5% for 2k–>4k)

PGCC Compiler• www.goof.com/pcg • PGCC is a version of the GNU C compiler (gcc) with special optimizations for Pentium CPU• The 30% improvement achieved by the Intel engineers is rare in the real world (don’t bank on it)• Typical improvement of 5% using intermediate optimization level like -O3 and no fine-tuning• Recompile kernel – only small improvement since Oracle makes few calls to LINUX kernel• Recompile glibc – bigger improvement possible, but headache unless already know process

Page 44: Optimizing Oracle Server Performance on LINUX

Presenters:Bert Scalzo: [email protected]

Questions and Answers …

Note: these slides should be available on OOUG web site, but we’ll also make sure to post them on our company’s web site:

www.toadworld.com/Experts/BertScalzosToadFanaticism/tabid/318/Default.aspx

Thank You