Best Practices for Performance Part 1.NET and Oracle Database Alex Keh Christian Shay Product Managers Server Technologies September 19, 2016
Program Agenda 1 2 3 4 Optimization Process ODP.NET Performance Part 2 Preview Q+A 3
Optimization Process End to End Oracle.NET performance management 4
Oracle.NET Application Performance Optimization Steps.NET data access tuning Use ODP.NET best practices SQL tuning Use SQL Tuning Advisor in Visual Studio Database tuning under real world conditions Oracle Performance Analyzer in Visual Studio detects issues you have missed May need to modify application based on findings Can be used during testing phase or production
Optimizing ODP.NET Performance ODP.NET 6
General All ODP.NET Objects Close/Dispose all ODP.NET objects explicitly Garbage collector cannot reliably implicitly dispose objects under heavy load May see increasing memory usage Can use Using statement instead Recommended for all ODP.NET objects 7
Connections Use connection pooling Min Pool Size = # connections at steady state or average load Max Pool Size = # connections at maximum capacity Min and Max Pool Size always obeyed over other CP attributes See documentation for connection pooling parameter options ODP.NET performance counters Monitor with Windows Performance Monitor More granularity in monitoring New in ODAC 12c Monitor at app domain, pool, or DB instance level See documentation for details on how to enable Confidential Oracle Internal/Restricted/Highly Restricted 8
Connections New in ODAC 12.2 Connection pool tagging Identify connections with specific settings using tags i.e. American users or French users i.e. gold customers or platinum customers ODP.NET searches pool for matching tag and retrieves that connection to be opened No round trips to set session settings for every new connection Database Resident Connection Pooling (DRCP) Server side connection pool that optimizes memory use Pools "dedicated" servers Confidential Oracle Internal/Restricted/Highly Restricted 9
New.NET Features Upcoming Session OOW session: What s New for.net Developers in Oracle Database Thursday, Sep 22, 1:15 PM Park Central Hotel Concordia Room 10
Connection Management RAC, Data Guard, GoldenGate, and GDS Fast Application Notification (FAN) infrastructure ODP.NET 12c (mostly) uses Oracle Notification Service (ONS) ONS delivers FAN events faster than previous AQ infrastructure Run-time connection load balancing Automated load balancing at connection dispense time Better performance because dispense based on real-time load Set Load Balancing = true in connection string Now the default in ODP.NET 12.2 11
Connection Management High Availability Fast Connection Failover Severed connections and returned connections automatically removed from pool End users no longer receive invalid connections after a failure Works for planned and unplanned outages Set HA Events = true in connection string Now the default in ODP.NET 12.2 For Data Guard switchover ODP.NET ServiceRelocationConnectionTimeout setting pauses incoming connection requests until standby is up End users will not see connection timeout errors 12
More HA Connection Management OOW session: Best Practices for High Availability:.NET and Oracle Database session Thursday, Sep 22, 2:30 PM Park Central Hotel Concordia Room 13
Oracle Client Performance Tips Tuning Options Set Outside ODP.NET Server side connection pooling types Dedicated server Shared server Database Resident Connection Pooling (DRCP) New for ODAC 12.2c Connect time load balancing Connects to least loaded instance/database when pool is created 14
Oracle Client Performance Tips Tuning Options Set Outside ODP.NET Oracle Net Services packet size Optimize connection s Session Data Unit (SDU) size Increase DEFAULT_SDU_SIZE in SQLNET.ORA or SDU in TNSNAMES.ORA If SDU settings between client and server do not match, lower value will be used OOW session: Best Practices for Oracle Database Performance on Windows Monday, Sep 19, 5:30 PM Park Central Hotel Olympic Room 15
Commands Bind Variables Prevents re-parsing of frequently executed statements Works with SQL and PL/SQL statements Improves subsequent command executions Literal value changes forces a re-parse and re-optimization Literal values should become bind variables Executed statements stored in Oracle shared pool Re-parsing and re-optimization uses CPU and requires shared pool locks 16
Commands Statement Caching Retains previously parsed statement in shared pool Prevents repeated parsing in server Caches most recently used statements Works with SQL and PL/SQL statements Best with bind variables Self-tuned cache size on by default No code changes needed 17
Commands Data Retrieval Control how much data is retrieved per DB roundtrip Too much data retrieved excessive client-side memory used Too little data retrieved additional round trips Use OracleCommand.RowSize and OracleDataReader.FetchSize to control result size RowSize populated after statement execution Can be set dynamically at run-time FetchSize can be set as multiple of RowSize 18
D E M O N S T R A T I O N Fetch Size and Row Size
Commands Data Updates Statement batching Use OracleDataAdapter.UpdateBatchSize to batch updates from DataSet Execute multiple commands in one DB roundtrip By using anonymous PL/SQL 20
Commands Mass Data Movement with Arrays PL/SQL associative arrays Pass large amounts of data between.net and DB of the same data type Use parameter array binding Useful if executing the same statement multiple times Bind variables are the same, variable values can be different One execution for each element in the bound array 21
Promotable Transactions Promote local transactions to distributed at run time Better application performance Lower resource usage On by default Requirements Requires Oracle Database 11g (11.1.0.7+) and ODAC 11.1.0.7.20+ Subsequent connections to any other version or database 22
REF Cursors OracleRefCursor class Defers result set retrieval until needed Retrieve data as needed Control data retrieved via FetchSize Fill a DataSet with just a portion of the REF Cursor result Usage Can create REF Cursors as part of an anonymous PL/SQL block Can return REF Cursors from stored procedures Can pass REF Cursors to database as input stored procedure parameters 23
SecureFiles and LOBs Data retrieval options Control amount of data returned with OracleCommand.InitialLOBFetchSize Retrieve a chunk using OracleClob and OracleBlob classes Read method Use Search method to find data to be retrieved Update/Insert/Delete SQL statements acting on LOBs Modify LOB without retrieving the data to the client side Uses LOB locator VARCHAR2, NVARCHAR2, and RAW now support up to 32 KB ODP.NET 12c and Oracle DB 12c enhancement 24
Coming Up in Best Practices Part 2 Thursday, Sep 22, 10:45 a.m. Marriott Marquis - Salon 10/11 25
Oracle.NET Caching Solutions Oracle.NET client-side DB caches Client Result Cache Continuous Query Notification (CQN) TimesTen In-Memory Database 26
Tuning with Oracle Developer Tools For Visual Studio Oracle Performance Analyzer SQL Tuning Advisor
Come See the SQL I mean, Sequel ;-) Coming to an OpenWorld Near You OOW session: Best Practices for Performance Part 2:.NET and Oracle Database Thursday, Sep 22, 10:45 AM Marriott Marquis Hotel - Salon 10/11 Rooms 28
Additional Oracle.NET Resources OTN otn.oracle.com/dotnet Twitter twitter.com/oracledotnet YouTube youtube.com/oracledotnetteam Email alex.keh@oracle.com and christian.shay@oracle.com
Upcoming.NET Sessions Meet the Oracle Programming and Scripting Experts Tuesday 6:15 PM Moscone South - 310 Best Practices for Performance Part 2:.NET and Oracle Database Thursday- 10:45 AM Marriott Marquis - Salon 10/11 PL/SQL Programming for.net Developers: Tips, Tricks, and Debugging Thursday 12:00 PM Marriott Marquis - Salon 10/11 What s New for.net Developers in Oracle Database Thursday 1:15 PM Park Central - Concordia Best Practices for High Availability:.NET and Oracle Database Thursday 1:15 PM Park Central Concordia
Demogrounds Visit Windows experts at the Demogrounds: Oracle Database 12c:.NET Development and Windows Platform Integration Today through Wednesday Moscone South Exhibition Hall, far left by walkway Booth SDB-003
Q&A 32
Safe Harbor Statement The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle. 33
34