PowerPoint 演示文稿

Similar documents
Oracle 4

System Global Area, Oracle Background process Oracle, Server Process user process, user process : SQL*PLUS SYSTEM SQL> select name from v$datafile; NA

untitled

ebook 96-16

目錄

ebook10-5

回滚段探究

Microsoft Word - ORA doc

1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005

錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更

FileMaker 15 ODBC 和 JDBC 指南

ebook 132-6

软件概述

(Microsoft Word - 11\244T\246\342\277\337\260l\302\334.doc)

FileMaker 16 ODBC 和 JDBC 指南

PowerPoint 演示文稿

Oracle高级复制冲突解决机制的研究

untitled

RunPC2_.doc

JBuilder Weblogic

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

RUN_PC連載_12_.doc

untitled

untitled

SQL Server SQL Server SQL Mail Windows NT

11 天 山 区 区 环 卫 清 运 队 机 械 工 程 师 4011 C 1 不 限 不 限 机 电 具 有 两 以 工 作 经 12 天 山 区 乌 鲁 木 齐 市 第 15 小 会 计 4012 C 1 不 限 不 限 会 计 财 会 财 电 算 化 临 床 医 预 防 医 公 共 卫 生 与

Flume-ng与Mysql整合开发

Oracle Database 10g: SQL (OCE) 的第一堂課

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

PowerPoint Presentation

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

untitled

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

untitled

untitled

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

els0xu_zh_nf_v8.book Page Wednesday, June, 009 9:5 AM ELS-0/0C.8

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

oracle-Ess-05.pdf

使用SQL Developer

ebook 132-2

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

untitled

untitled

jdbc:hsqldb:hsql: jdbc:hsqldb:hsqls: jdbc:hsqldb:http: jdbc:hsqldb:https: //localhost // :9500 / /dbserver.somedomain.com /an_alias /enrollme

Chapter 2

Oracle9i 的查询优化

ebook 185-6

11.2 overview

一步一步教你搞网站同步镜像!|动易Cms

第6章  数据库技术基础

Windows XP

ebook140-9

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

TopTest_Adminstrator.doc

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

支付宝2011年 IT资产与费用预算

PowerPoint 演示文稿

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al

PPBSalesDB.doc

基于UML建模的管理管理信息系统项目案例导航——VB篇

untitled

目錄... ivv...vii Chapter DETECT

PowerPoint Presentation

运维2010年端午节日封网及值守

PowerPoint 演示文稿

1.ai

untitled

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

User’s Manual

PowerPoint 演示文稿

SiteView技术白皮书

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内

NT 4


1 SQL Server 2005 SQL Server Microsoft Windows Server 2003NTFS NTFS SQL Server 2000 Randy Dyess DBA SQL Server SQL Server DBA SQL Server SQL Se

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

Microsoft Word - template.doc

目 录 编 写 说 明 一 学 校 概 况 二 2015 届 毕 业 生 就 业 状 况 分 析 ( 一 ) 基 本 数 据 ( 二 ) 就 业 落 实 情 况 本 科 生 各 专 业 就 业 率 硕

Microsoft Word - 会议指南


HR之友电子期刊

Microsoft Word - 封面.doc

PowerPoint Presentation

User Group SMTP

Microsoft Word - linux命令及建议.doc

ebook140-8

投影片 1

Bus Hound 5

第4单元 创建数据类型和表

勞動條件檢查執行重點(雲林)_ [相容模式]

醋 水 法 在 水 盆 內 放 入 約 七 分 滿 的 水 與 1/2 到 1 小 杯 的 醋 量, 將 髒 襪 子 浸 泡 一 晚, 隔 天 再 丟 入 洗 衣 機, 就 能 洗 得 相 當 乾 淨 醋 有 殺 菌 除 臭 和 漂 白 功 效, 使 用 過 的 醋 水, 還 可 清 理 地 板,

穨 PDF

Microsoft Word - 完全手冊-課程.doc

第一冊 第四章 分裂與再統一 班級 座號 姓吊

EJB-Programming-4-cn.doc

Microsoft Word - report 4.doc

HR HR

Transcription:

追求 JDBC on Oracle 最佳性能? 如何才好? Maclean Liu

古希腊的 Delphi( 世界中心 ), 屹立着 Parnassus Mount( 诗檀山 ), 山上有一座阿波罗神庙, 庙中住着女祭司 (Oracle)

兴一利 不如 除一害

Jdbc 性能案例 1: 问题 for (i = 0; i < 1000000; i++) { conn = ds.getconnection(userid, password); pstmt = conn.preparestatement("select name FROM employees WHERE id = " + i); rset = pstmt.executequery(); } conn.close(); 循环内获得 connection 并解析执行,connection 非缓存的解析在 Oracle 中都很昂贵

Jdbc 性能案例 1: 结果 响应时间 : 150ms 吞吐量 : 300tps CPU 方面 Sys 和 User 都很高

Jdbc1 性能案例 1: 对策 conn = ds.getconnection(userid, password); for (i = 0; i < 1000000; i++) { pstmt = conn.preparestatement("select name FROM employees WHERE id = " + i); rset = pstmt.executequery(); } conn.close(); 只建立必要的 connection 到数据库

Jdbc1 性能案例 1: 改良后 响应时间 : 20ms 吞吐量 : 3,000tps latch: shared pool 此时的瓶颈凸显在解析 (parse) 并发争用上

Jdbc 性能案例 1: 原因 conn = ds.getconnection(userid, password); for (i = 0; i < 1000000; i++) { { pstmt = conn.preparestatement("select name FROM employees WHERE id = " + i); rset = pstmt.executequery(); } conn.close(); 每次执行都使用拼凑的 SQL 语句, 未启用绑定变量, 默认情况下每次均硬解析 hard parse

Jdbc 性能案例 1: 进一步对策 conn = ds.getconnection(userid, password); for (i = 0; i < 1000000; i++) { { pstmt = conn.preparestatement("select name FROM employees WHERE id =?"); pstmt.setint(1, i); rset = pstmt.executequery(); } conn.close(); 使用绑定变量, 避免每次执行都硬解析

Jdbc1 性能案例 1: 再改良后 响应时间 : 1ms 吞吐量 : 25,000tps 并发争用减少 CPU 被充分使用

Jdbc1 性能案例 1: 正确使用 PrepareStatement PrepareStatement SQL 语句解析 Bind 变量绑定 Execute SQL 语句执行 For { PrepareStatement Bind Execute } PrepareStatement For { Bind Execute }

Jdbc1 性能案例 1: 进一步对策 conn = ds.getconnection(userid, password); pstmt = conn.preparestatement("select name FROM employees WHERE id =?"); for (i = 0; i < 1000000; i++) { { pstmt.setint(1, i); rset = pstmt.executequery(); } conn.close(); 预解析, 只解析一次 For preparestatement, http://www.oracle.com/technetwork/testcontent/jdbcch5-131209.pdf

Jdbc1 性能案例 1: 再再改良后 响应时间 : 1ms 吞吐量 : 34,000tps 吞吐量进一步提高

Jdbc1 性能案例 1: 再改良后

Jdbc1 性能案例 2: 永远不够的 open_cursor ORA-1000 报错 maximum open cursors exceeded 达到 session 最大游标数 故障发生业务停滞 大量 SQL*Net break/reset to client 等待事件 OPEN_CURSOR 参数已经很大了, 都到 10000 了, 开发人员要求 DBA 进一步加大该参数到 30000

Jdbc1 性能案例 2: 原因 try { rset = pstmt.executequery(); rset.close(); pstmt.close(); } catch (SQLException e) { e.printstacktrace(); } 代码里是写了关闭游标, 但存在还没执行就跑到异常处理里去的可能

Jdbc1 性能案例 2: 对策 try { rset = pstmt.executequery(); rset.close(); } catch (SQLException e) { e.printstacktrace(); } finally { if (pstmt!= null) try {pstmt.close();} catch (SQLException e) {...} } Finally 中调用关闭游标, TRY 块结束后总会执行

Jdbc1 性能案例 3: 永远不够的 processes 吞吐量接近于零 负载也接近于零 CPU 使用率也接近于零 告警日志中出现 ORA-00020 错误? 吞吐量暴跌, 应用会话无法连接数据库? 开发人员要求 DBA 进一步加到 processes 参数?

Jdbc1 性能案例 3: 原因 try { rset = pstmt.executequery(); rset.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printstacktrace(); } 代码里是写了关闭 connection, 但存在还没执行就跑到异常处理里去的可能

Jdbc1 性能案例 3: 对策 try { rset = pstmt.executequery(); rset.close(); } catch (SQLException e) { e.printstacktrace(); } finally { } Finally 中调用关闭 connection, TRY 块结束后总会执行 if (pstmt!= null) try {pstmt.close();} catch (SQLException e) {...} if (conn!= null) try {conn.close();} catch (SQLException e) {...}

Jdbc1 性能案例 4 莫名出现大量锁等待 没有任何告警, 但所有应用全部超时? 大量 session 处于锁等待挂起状态 开发人员要求 DBA 去 kill 锁数据的 session?

Jdbc1 性能案例 4: 原因 try { rset = pstmt.executeupdate(); conn.commit(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printstacktrace(); } 代码中写了 commit, 但没考虑异常处理 可能的 session leak

Jdbc1 性能案例 4: 对策 try { 当出现异常就 rollback 释放锁 rset = pstmt.executupdate(); conn.commit(); } catch (SQLException e) { if (conn!= null ) try {conn.rollback();} catch (SQLException e) {...} e.printstacktrace(); } finally { if (pstmt!= null) try {pstmt.close();} catch (SQLException e) {...} if (conn!= null) try {conn.close();} catch (SQLException e) {...} }

Other tips:set AutoCommit Off 关闭自动 commit, 在应用真正需要的时候 commit, 即维护了必要的事务又减少了 log file sync 等待 Connection.setAutoCommit(false);

Other tips: 批量 Insert DriverManager.registerDriver(new oracle.jdbc.driver.oracledriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:oci8:@","scott","tiger"); PreparedStatement ps = conn.preparestatement ("insert into dept values (?,?,?)"); //Change batch size for this statement to 3 ((OraclePreparedStatement)ps).setExecuteBatch (3); ps.setint (1, 23); ps.setstring (2, "Sales"); ps.setstring (3, "USA"); ps.executeupdate (); //JDBC queues this for later execution ps.setint (1, 24); ps.setstring (2, "Blue Sky"); ps.setstring (3, "Montana"); ps.executeupdate (); //JDBC queues this for later execution ps.setint (1, 25); ps.setstring (2, "Applications"); ps.setstring (3, "India"); ps.executeupdate (); //The queue size equals the batch value of 3 //JDBC sends the requests to the // database ps.setint (1, 26); ps.setstring (2, "HR"); ps.setstring (3, "Mongolia"); ps.executeupdate (); //JDBC queues this for later execution ((OraclePreparedStatement)ps).sendBatch (); //JDBC sends the queued request..

Other tips:prefetch Rows DriverManager.registerDriver(new oracle.jdbc.driver.oracledriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:oci8:@","scott","tiger"); //Set the default row prefetch setting for this connection ((OracleConnection)conn).setDefaultRowPrefetch (7); /* The following statement gets the default row prefetch value for the connection, that is, 7. */ Statement stmt = conn.createstatement (); /* Subsequent statements look the same, regardless of the row prefetch value. Only execution time changes. */ ResultSet rset = stmt.executequery ("select ename from emp"); System.out.println ( rset.next () ); while( rset.next () ) System.out.println ( rset.getstring (1) ); //Override the default row prefetch setting for this statement ( (OracleStatement)stmt ).setrowprefetch (2); rset = stmt.executequery ("select ename from emp"); System.out.println ( rset.next () ); while( rset.next () ) System.out.println ( rset.getstring (1) );

Oracle Database 11g R2 JDBC BasicFiles LOB Pre-Fetch Faster Lob Data Fetching by performing all operations on server in a single single roundtrip setlobprefetchsize() select name, bio from LOB_tab 1. Parse 2. Execute 3. Fetch metadata 4. Fetch LOB data

Oracle Database 11g R2 Zero-Copy SecureFiles LOB Faster SecureFiles operations by bypassing server-side buffer copy setupsecurefile() Blob.getBytes() 1. Fetch LOB data (bypass internal buffer)

JDBC Lob Pre-Fetch Performance Performance benchmark fetches CLOBs of sizes 1K to 50K with PREFETCH enabled and PREFETCH disabled, against BASICFILE LOBs and SECUREFILE LOBs.

www.parnassusdata.com 400-690-3643 Thank You