best practices for speeding and scaling - oracle.com · client-side java database access 23 jdbc...

41

Upload: lamkiet

Post on 15-Feb-2019

247 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could
Page 2: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

BestPracticesforSpeedingandScalingJavaApplicationsOracleDatabase18

Nirmala Sundarappa,PrincipalProductManagerKuassi Mensah, DirectorofProductManagement,JeanDeLavarene,DirectorofDevelopmentServerTechnologies,October5th,2017

Page 3: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementThefollowingisintended tooutline ourgeneralproductdirection. Itisintended forinformationpurposes only,andmaynotbe incorporatedintoanycontract.Itisnotacommitment todeliver anymaterial,code,orfunctionality,andshouldnotberelieduponinmakingpurchasingdecisions. Thedevelopment, release, andtimingofanyfeaturesorfunctionality described forOracle’sproductsremainsatthesolediscretion ofOracle.

3

Page 4: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ProgramAgenda

What’sNew?

SpeedingUpJavaapplications

ScalingtheJavaworkloads

Questions

1

2

3

4

4

Page 5: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ProgramAgenda

What’sNew?

SpeedingUpJavaapplications

ScalingtheJavaworkloads

Questions

1

2

3

4

5

Page 6: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.

OracleDatabase18c

DB18relatedcapabilitieswillbeupdatedoncetheDatabase18cisreleased.Pleasestaytuned.

6

Page 7: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

DatabaseDevelopment

DatabaseCloudServicesforEnterprise

Exadata CSDatabaseCSExpressCS

Highest availability, scalability andperformance

SMB&Departmental Applications

Enterprise Applications

OracleCloudInfra

CustomeratCloudChoices Exadata CloudMachineCloudMachine

100%compatiblefromentry-leveltothelargestmissioncriticaldataloads

Page 8: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

JavaConnectivitytoDatabaseServicesonCloud

8

• OracleExadata ExpressService(EECS)– TCPSconnectionwithOraclewalletsorJKS

– Needclient_credentials.zipfromserviceconsole

• OracleDatabaseCloudService(DBCS)– TCPconnection– 1521needs tobeunblocked

• OracleDatabaseExadataCloudMachine(ExaCM)– TCPconnection– Everything ispre-setup

• OracleDatabaseCloudInfrastructure(OCI)– TCPconnection– Add1521tosecurity list

Page 9: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ProgramAgenda

What’sNew?

SpeedingUpJavaapplications

ScalingJavaapplications

Questions

2

1

3

4

9

Page 10: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

BestPracticesforSpeedingUpJavaApplications• UseConnectionURLwithconnectiondescriptors• UseUniversalConnectionPool(UCP)• Tuneexcessivehardparsing• Tuneexcessivesoftparsing• Enforceresultsetcaching• UseLOBBestPractices

• UseArrayoperations(Fetch,DML)• UseJavaintheDatabase• UseNetworkcompressionoverWAN• UseMemorymanagementbestpractices• Lightweight ConnectionValidation

10

Page 11: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ConnectionURLwithConnectionDescriptors

11

OracleRACwithADG

alias=(DESCRIPTION=(CONNECT_TIMEOUT=90) (RETRY_COUNT=20)(RETRY_DELAY=3)

(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST=

(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=primary-scan)(PORT=1521)))

(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=secondary-scan)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME =gold-cloud)))

NorelianceonDNS

AutomaticRetries

ALWAYSuseaSERVICEthatisNOTDB/PDBname

Page 12: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ConnectionURL– BestPractices• AlwaysusethelatestversionofJDBCdriverandUCPagainstcurrentorearlierdatabaseversion• Donotmixuptheversionsofjars– Useojdbc8.jar,ucp.jar,andons.jar from12.2.0.1version

• Alwaysreturnconnectionstothepoolforstableconnectionusage,runtimebalancing,andplanneddraining

• ConnectionURLbestpractices– UseoneDESCRIPTIONandmorecancause longdelays– SetLOAD_BALANCE onperADDRESS_LISTtobalanceSCANs– DONOTUSERETRY_COUNT withoutRETRY_DELAY– DOnotuseEasyConnectURL– ithasnoHAcapabilities

12

Page 13: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.

UniversalConnectionPool(UCP)

13

UCPProperties Description

setInitialPoolSize(),setMinPoolSize(),setMaxPoolSize()

Set poolsizebasedondatabaseserverresources(numberofcores)Eg:MaxPoolSize =(rdbms-cores *n)/sum (pools-per-mid-tier)

setTimoutCheckInterval(int)setTimeToLiveConnectionTimeout(),setAbandonConnectionTimeout(),setConnectionWaitTimeout(int)setInactiveConnectionTimeout(int)

SettheConnection Timeoutsufficiently highenough tosuitetheapplicationprofile.

setMaxStatements() EnableStatementCaching– BydefaultitisOFF

setFastConnectionFailoverEnabled(),setONSConfiguration()

For HighAvailabilityFeatures.Enabledbydefaultin12.2UCP

Thebestconfiguredconnectionpoolsresultinhigherthroughput

Page 14: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ExcessiveHardStatementParsing?

14

Hardparse:allsteps involvedincreatingaSQLstatement parsetreeMonitorhardparseswithAWR/ADDM

Page 15: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

Tuneexcessivehardparsing• AvoidHardParsingusingPreparedStatement&BindVariables

Insteadof:String query = "SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = " + generateNumber(); prepStmt = connection.prepareStatement(query); resultSet = pstmt.executeQuery();

Changeto:String query = "SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = ?"; prepStmt = connection.prepareStatement(query);prepStmt.setInt(1, generateNumber()); resultSet = pstmt.executeQuery();

Fallback ifapplication cannotbechangedtousebindsinit.ora parameter:CURSOR_SHARING={FORCE|SIMILAR|EXACT}

15

Page 16: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

Tuneexcessivesoftparsing• EnableStatementcaching– oracleDataSource.setImplicitCachingEnabled(true)

• Choosetherightcachesizetobestutilizethememory– connection.setStatementCacheSize(10)– Trytobeclosertothenumberofmostusedstatements– Defaultstatement cachesizeis10

• Fallback ifyoucannotchangetheapplicationtousestatementcaching– session_cached_cursors =50

16

Page 17: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

EnforceresultsetcachingServersideresultsetcaching• Querynotre-executed (untilcacheinvalidated)

Clientsideresult-setcaching• Sharedacrossmultiple connections fromthesameDataSourceinthemiddletier

• Fasteraccess tofrequentlyqueried data• Transparent invalidation throughQueryChangeNotification

• Someofthebenchmarks showed3ximprovement

• Serversideconfiguration(init.ora)toenableResult SetCaching– CLIENT_RESULT_CACHE_SIZE– settoclientresultsetcachesize– CLIENT_RESULT_CACHE_LAG – Specifiesclientresultcachelaginminutes

17

Page 18: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

UseLOBbestpractices• ConvertLOBtoLONGusingdefineColumnType(index,type,size)• TuneSessionDataUnit (SDU)forlargeLOBs,XML,largeResult sets– Max:2MB(12c),64K(11.2),32K(pre-11.2)

– Setonbothserverandclientside(SQLNet.ORA,TNSNAMES.ORAorURL)

– jdbc:oracle:thin:@(DESCRIPTION=(SDU=11280)(ADDRESS=(PROTOCOL=tcp)(HOST=myhost-vip)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename)))

– Improvesperformance,networkutilization,andmemoryconsumption• UsePreFetching forsmallLOBssetLobPrefetchsize()

• DataInterface– StreamlinedmechanismforwritingandreadingtheentireLOBcontentsusingthestandardJDBCmethodsgetString()andsetBytes()

18

Page 19: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

UseSecureFiles LOBs• Largereads/writes– BASICLOBs:internalbuffercopyareexpensive– SECUREFILELOBS:”oracle.net.useZeroCopyIO” or“Vectoredi/omechanism”

• Transparenttoexisting APIs– Usepublic boolean isSecureFile() throws SQLException tocheckwhetherornotyour BLOB or CLOB datausesOracleSecureFile storage

• Compression, encryption,deduplication

19

setupSecureFile()

Blob.getBytes()

Fetch/StreamLOBdatadirectly(bypassinternalbuffer)

ResultSet

Page 20: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ArrayDML/Fetching/Prefetching

• Usearrayoperationsinsteadofsinglerowoperations– SinglerowDMLs/fetches incurexcessive roundtrips– Default fetchsizeis10

• Checkifarraysizeislargeenough• Somedriverssupportprefetchinginsteadofarrayfetching

20

BestPractices

Page 21: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ArrayFetchinginJavaString query = "SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES ”

+" WHERE EMPLOYEE_ID > ? ”+" ORDER BY EMPLOYEE_ID”;

pstmt = connection.prepareStatement(query);pstmt.setInt(1, generateNumber());pstmt.setFetchSize(20);rs = pstmt.executeQuery();ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();while (rs.next()) {for(int i = 1; i <= columnCount; ++i)

System.out.println(rsmd.getColumnName(i) +”+rsmd.getColumnTypeName(i) +"]: "+rs.getString(i));

}

Page 22: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ArrayDMLinJavaString dml = "UPDATE EMPLOYEES SET SALARY = ?”

+" WHERE EMPLOYEE_ID = ?”;pstmt = connection.prepareStatement(dml);for(int i = 0; i < NUM_ROWS_TO_INSERT; ++i) {

int empId = getEmployeeId(employeeIdList);pstmt.setInt(1, getNewSalary(empId));pstmt.setInt(2, empId);pstmt.addBatch();

}

pstmt.sendBatch();

Page 23: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

Client-sideJavaDatabaseAccess

23

JDBCSQL

SQL

SQL

•Multiple NetworkexchangeforprocessingeachSQLstatements

• Could leadtohighlatency in WANorCloudenvironments

Page 24: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

JavaintheDatabase

24

JDBC(internal)SQL

SQL

SQLSQL

• Onecall fortheentireprocedure

• Lownetworklatencyin WANorCloudenvironments

• CanbeconsumedbySQL,PL/SQLoranyclient

Page 25: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

NetworkCompressionOverWANMixedData

25

• Query:Select *fromTable;

• Data:Five columns50bytes perrow1million rows

• ArraySize:5000

• ConnectionProperty:oracle.net.networkCompression=”on”

• ReducesthesizeofSDUtransmittedacrossthenetwork 0

10

20

30

40

50

60

70

580 100 50 10

Tim

e (s

ec)

Bandwidth (Mbps)

OFFLOWHIGH

Page 26: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

MemoryManagementTips• Memoryissueiscausedduetothebuffersusedtostorequeryresults–MoredynamicbuffermechanismandreturnbufferstothecachewhentheResultSetisclosed

– CREATE TABLE TAB(IDNUMBER(10), NAMEVARCHAR2(40),DOBDATE)ResultSet r=stmt.executeQuery(“SELECT ID,NAME,DOBFROMTAB”);

• Managethememoryusedbybuffers– FormQueries carefully(Retrievecolumnsexplicitlyandavoidselect*fromemployees)– Setthefetchsize carefully(avoidsettinghighersetFectchSize(10000))

• UsePreparedStatements andenableImplicitStatementCaches• ControlthememoryheapofJVMusing–Xmx or–Xms

26

Page 27: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ProgramAgenda

What’sNew?

SpeedingUpJavaApplications

ScalingJavaApplications

Questions

3

1

2

4

27

Page 28: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ScalingJavaApplications• UsingServerSideConnectionPool(DRCP)• HorizontallyScalingJavaWorkload• UsingRuntimeLoadBalancing(RLB)

28

Page 29: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.| 29

Page 30: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

UsingServersideconnectionPool(DRCP)• DRCPistheserversideconnectionpoolsharedacrossmanymid-tiers• EnablingDRCPontheserverside– dbms_connection_pool.start_pool();

• ChangetheconnectionURLtoenableDRCP– Eg:,jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename))(SERVER=POOLED)))”;

• DRCPTagging– Associateaconnectiontoamid-tierwithaparticulartagnametoretrieveaspecificsessioneasily.–Enableusingthepropertyoracle.jdbc.UseDRCPMultipletag = true

30

Page 31: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

HorizontalScalingJavaWorkloads

31

SHARD A SHARDB SHARD C

SharedConnection

Pool

SingleUnsharded Database

Page 32: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ScalingJavaapplications• SessionbasedShardingviaShardingKey• ShardingAPIs– JDBC/UCP• UCPasaShardDirector

32

Page 33: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

CoordinatorDB

ApplicationTier

RoutingTier

DatabaseTier

33

Session-BasedRoutingviaShardingKey

ShardingKey: Apartitioning keyforasharded table.- E.g:custid- shard keyused forpartitioning thetable‘customers’.

SuperShardingKey:Required incaseofcomposite sharding.

ShardDirector:Looksupsharding keyandredirectstorightshardcontainingthedata.

ApplicationServer

ShardDirector

Page 34: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

Sharding APIs:JDBC/UCP

// Sharding Key is a compound key of 2 sub-keysOracleShardingKey shardingKey =

dataSource.createShardingKeyBuilder() .subkey("Customer_EMAIL", oracle.jdbc.OracleType.VARCHAR2)

.subkey("1234", oracle.jdbc.OracleTypes.NUMBER)

.build();

// Super Sharding Key with only one sub-key

OracleShardingKey superShardingKey =dataSource.createShardingKeyBuilder()

.subkey("Customer_Location_US”,oracle.jdbc.OracleType.VARCHAR2)

.build();

34

BuildingSharding KeyandSuperSharding Key

Page 35: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

OracleJDBCDriver

35

OracleUniversalConnectionPool(UCP)

JDBC/UCPconnectionwithaShardingKey

OracleDataSource ods = new OracleDataSource();

// Set connection properties

ods.setURL(DB_URL);ods.setUser("hr");ods.setPassword("****");// Get an Oracle JDBC connection for a shard

Connection conn = ods.createConnectionBuilder()

.shardingKey(shardingKey)

.superShardingKey(superShardingKey)

.build();

PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();// Set Connection Pool propertiespds.setURL(DB_URL);pds.setUser("hr"); pds.setPassword("****");pds.setInitialPoolSize(10);pds.setMinPoolSize(20);pds.setMaxPoolSize(30);// Get an UCP connection for a shard

Connection conn = pds.createConnectionBuilder()

.shardingKey(shardingKey)

.superShardingKey (superShardingKey)

.build();

Page 36: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

GetconnectionShardkey=35

UCPLearningShardTopology§ During pool initialization (orwhen thepool connects tonewer

instances) theshard topology iscollected from various shard tocreateaShardRouting Table

UCP

Shard 1

1-- 10 Chunk 1 Shard 1

Shard 2

Shard 3

Shard 4

GSMlistener

Shard KeysRange ChunkName Shards

1-- 10 Chunk 1 Shard 1

10 -- 20 Chunk 2 Shard 21-- 10 Chunk 1 Shard 1

10 -- 20 Chunk 2 Shard 2

20 -- 30 Chunk 3 Shard 3

1-- 10 Chunk 1 Shard 1

10 -- 20 Chunk 2 Shard 2

20 -- 30 Chunk 3 Shard 3

30 -- 40 Chunk 4 Shard 4

GetconnectionShardkey=5GetconnectionShardkey=15

GetconnectionShardkey=25

36

Page 37: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

UCPasaShardDirector• Once therequired topology iscollected byUCP, connectionrequests canbedirectly serviced bythepool without goingthrough theshard director.

• Basedontheshard keys provided intheconnection request, UCPcanlookup thecorresponding shard onwhich keys existandpooled connections totheshard canbeefficiently reused.

UCP

Shard 1

Shard KeysRange ChunkName Shards

1-- 10 Chunk 1 Shard 1

10 -- 20 Chunk 2 Shard 2

20 -- 30 Chunk 3 Shard 3

30– 40 Chunk 4 Shard 4

Shard 2

Shard 3

Shard 4

GSMListener

GetconnectionShardkey=16Getconnection

Shardkey=38

37

Page 38: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

RuntimeLoadBalancing• LeverageLoadBalancingAdvisory– UsedtobalancetheworkacrosstheRACinstances. – Determine the instancethatoffersthebestperformance– Establish connections basedontheadvisory

• UCPusesRACLoadBalancingAdvisoryanddistributestheloadequallyamongtheinstances.• ServicegoalsmustbesettoSERVICE_TIMEorTHROUGHPUT– srvctl modifyservice-db <db_name> -service<service_name> -rlbgoalSERVICE_TIME -clbgoal SHORT

– srvctl modifyservice-db <db_name> -service <service_name> -rlbgoalTHROUGHPUT -clbgoal SHORT

38

Page 39: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

ProgramAgendawithHighlight

What’sNew?

SpeedingUpJavaApplications

ScalingJavaApplications

Questions4

1

2

3

39

Page 40: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could

Copyright©2017, Oracleand/oritsaffiliates.Allrightsreserved.|

Whitepapersandotherresources• Performance,Scalability,andHigh-AvailabilitywithJDBCandUCPinOracleDatabase12cReleas1(12.2.0.1)• GithubCodesampleslocation• JDBC/UCPBlogsite• JDBC&UCPDownloadpage• JDBC&UCPLandingpageforotherresources

40

Page 41: Best Practices for Speeding and Scaling - oracle.com · Client-side Java Database Access 23 JDBC SQL SQL SQL • Multiple Network exchange for processing each SQL statements • Could