1 / 61

Oracle 与 .NET : 性能与部署最佳实践

Oracle 与 .NET : 性能与部署最佳实践. Christian Shay Oracle 首席产品经理. 议题. 优化流程 优化 ODP.NET 性能 连接 数据检索和更新 ODP.NET 数据类型 缓存 ODP.NET 部署. 议题. 从 Visual Studio 中优化 Oracle 数据库性能 SQL Tuning Advisor Oracle Performance Analyzer. Oracle 的 .NET 产品. Oracle Developer Tools for Visual Studio

alima
Download Presentation

Oracle 与 .NET : 性能与部署最佳实践

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle 与 .NET:性能与部署最佳实践 Christian ShayOracle 首席产品经理

  2. 议题 • 优化流程 • 优化 ODP.NET 性能 • 连接 • 数据检索和更新 • ODP.NET 数据类型 • 缓存 • ODP.NET 部署

  3. 议题 • 从 Visual Studio 中优化 Oracle 数据库性能 • SQL Tuning Advisor • Oracle Performance Analyzer

  4. Oracle 的 .NET 产品 • Oracle Developer Tools for Visual Studio • 是 Visual Studio 2012、2010、2008 一个紧密集成的“插件” • Oracle Data Provider for .NET (ODP.NET) • 符合 ADO.NET 的数据提供程序 • 对 Oracle 数据库进行原生访问 • 利用高级 Oracle 数据库特性 • RAC、性能、安全性、数据类型、XML 等 • 两者都可从以下网址免费下载: • http://otn.oracle.com/dotnet/

  5. 优化流程

  6. Oracle .NET 应用程序性能 — 优化步骤 • .NET 数据访问调优 • 使用 ODP.NET 最佳实践 • SQL 调优 • 在 Visual Studio 中使用 SQL Tuning Advisor • 实际情况下的数据库调优 • Visual Studio 中的 Oracle Performance Analyzer 可检测到您漏掉的问题 • 可能需要根据发现的问题修改应用程序 • 在测试阶段或生产环境中均可使用

  7. 优化 ODP.NET 性能

  8. 连接 • 连接池 (CP) • 默认情况下,OracleConnection包含连接池 • 使用 Windows 性能监视器监视和调优它们 • 显式关闭/清除连接(及所有对象) • 无需依赖垃圾收集器 • 该建议适合于所有 ODP.NET 对象

  9. 监视连接 • ODP.NET 性能计数器 • 通过 ODP.NET 11.1.0.6.20 或更高版本提供 • 使用 Windows 性能监视器进行监视 • ODP.NET 跟踪

  10. 连接管理 — 集群和备用数据库 • RAC 自动连接负载平衡 • Load Balancing = true • RAC 和 Data Guard 自动转移“坏”连接 • HA Events = true

  11. 命令 — 绑定变量 • 防止重新解析频繁执行的语句 • 与SQL 和 PL/SQL 语句一起使用 • 改善后续的命令执行 • 文字型数值更改会强制执行重新解析和重新优化 • 文字型数值应该变为绑定变量 • 已执行的语句存储在 Oracle 共享池中 • 重新解析和重新优化将耗用CPU 并需要共享池锁

  12. 命令 — 语句缓存 • 在共享池中保留以前已解析的语句 • 游标在客户端保持打开状态以实现更加快速的重用 • 无需在服务器上执行额外的查找 • 元数据保留在客户端 • 缓存最近使用的语句 • 与SQL 和 PL/SQL 语句一起使用 • 与绑定变量一起使用的效果最好 • 自调优的缓存大小 — 默认情况下启用 • 无需更改代码

  13. 命令 — 数据检索 • 控制每次数据库往返所检索的数据量 • 检索太多数据会导致使用过多的客户端内存 • 检索太少数据会导致数据库往返增多 • 使用OracleCommand.RowSize 和 OracleDataReader.FetchSize控制结果的大小 • 在语句执行后填充RowSize • 在运行时动态设置 • 可以将FetchSize设置为RowSize的倍数

  14. 演示 FetchSize和RowSize

  15. 命令 — 语句批处理 • 使用OracleDataAdapter.UpdateBatchSize批量处理来自DataSet的更新 • 在一次数据库往返中执行多个命令 • 使用匿名 PL/SQL • 对不同的语句或类似的语句很有用

  16. 命令 — 使用数组进行大规模数据移动 • PL/SQL 关联数组 • 在 .NET 和数据库之间传递大量具有相同数据类型的数据 • 使用参数数组绑定 • 如果多次执行相同的语句,该方法很有用 • 绑定变量相同,变量值可以不同 • 对绑定数组中的每个元素执行一次 • 切记:PL/SQL 关联数组和参数数组绑定是两个不同的概念

  17. 可提升的事务 • 运行时将本地事务提升为分布式事务 • 提高应用程序性能 • 较低资源使用 • 默认情况下启用 • 要求 • 首先连接至 Oracle Database 11g (11.1) 或更高版本 • 随后连接至任何其他版本或数据库

  18. ODP.NET 数据类型 • 避免不必要的数据类型转换 • .NET 与 ODP.NET 类型 • OracleDataReader类型访问器 • OracleParameter.DbType 与 OracleParameter.OracleDbType • 可以选择将 Oracle 数据类型存储在DataSet 中 • OracleDataAdapter.ReturnProviderSpecificTypes = true • 在 ADO.NET 2.0 中提供

  19. REF 游标 • 根据需要检索数据 • 通过FetchSize控制检索的数据 • 仅用 REF 游标结果的一部分填充DataSet • 对检索哪些 REF 游标数据及如何检索进行显式控制 • 将结果集检索延迟至需要时进行 • 将 REF Crusors作为输入存储过程参数返回 • OracleRefCursor 类

  20. SecureFiles 与 LOB • 数据检索选项 • 用 LOB 定位器延迟检索(默认) • 使用OracleCommand.InitialLOBFetchSize立即检索数据 • 使用 Read 方法检索部分数据 • 使用 Search 方法查找要检索的数据

  21. SecureFiles 与 LOB • 更新/插入/删除 • 无需将数据检索到客户端即可修改 LOB • 使用 LOB 定位器 • 在 Oracle Database 11g 中使用 SecureFile 数据类型

  22. Oracle .NET 缓存解决方案 • Oracle .NET 数据库缓存 • 客户端结果缓存 • 连续查询通知 (CQN) • TimesTen 内存数据库 • 在服务器更改时自动更新/警告客户端缓存 • 每个缓存满足各自独立的缓存要求

  23. Oracle 客户端结果缓存 • 自动更新查询结果集的缓存 • 优点 • 易于使用 • 无需更改代码 • 持续生成快照 • 无需用户干预即可刷新缓存 • 更高的可伸缩性和性能 • 从客户端而不是从服务器检索数据 • 没有额外的数据库往返

  24. Oracle 客户端结果缓存更新 • 1. 在数据更改时,客户端收到有关后续数据库往返(或最大延迟)的更改通知 • 在现有客户端数据库往返上搭载失效通知 • 对缓存结果尚无更改 • 2. 缓存等待下次执行以刷新结果 • 不发起独立的数据库往返 • 没有不必要的数据库流量 • 缓存条目不超时 • 使用最近最少使用的算法

  25. Oracle 连续查询通知 (CQN) • 易于使用自动化缓存且具有更强的编程控制 • 也称为数据库更改通知 • 相比客户端结果缓存的优点 • 更好地控制缓存行为 • 多个用户访问相同的结果时会怎么样? • 仅需要部分缓存数据时会怎么样? • 应将查询缓存多长时间? • 刷新缓存时是否要执行额外逻辑?

  26. 数据更改 应用程序 Execute() OracleCommand 数据字典 表 通知请求 添加相关性 OnChange OracleDependency 通知 队列 Invalidate() 监听器

  27. Oracle TimesTen 内存数据库 • 功能齐全的关系数据库 • 与 Oracle 兼容的 SQL 和 PL/SQL,具有 ODP.NET • 持久性与持久保存 • 具有 ACID 属性的事务 • 实现持久性的各种灵活选项 • 卓越性能 • 即时响应、高吞吐量、可嵌入 内存优化的关系数据库

  28. ODP.NET 部署

  29. ODP.NET 未受控驱动程序 受控 数据库 未受控 ODP.NET 未受控 DLL ODP.NET Oracle.DataAccess.dll NET OCI Oracle

  30. ODP.NET 完全受控 数据库 受控 ODP.NET Oracle.ManagedDataAccess.dll Oracle

  31. 受控 ODP.NET • 完全受控的提供程序 • 组合件 • Oracle.ManagedDataAccess.dll • 无需其他 Oracle 客户端文件 • 除非使用分布式事务 • 命名空间 • Oracle.ManagedDataAccess.Client • Oracle.ManagedDataAccess.Types

  32. 分布式事务 • 需要额外的受控 DLL(目前) • Oracle.ManagedDataAccessDTC.dll • 如果不使用分布式事务,则无需部署额外的 DLL • 没有直接引用 DLL • 隐式加载 • 具有相同名称的两个版本:32 位和 x64 • 仍须匹配 32 位或 64 位 COM 调用

  33. 受控 ODP.NET 网络配置 • 方案 1:单配置文件部署 • .NET 配置文件包含 TNS 和 sqlnet.ora 设置 • 即 Machine.config、web.config、app.config • 方案 2:多文件配置 • .NET 配置文件 • Tnsnames.ora 和 sqlnet.ora • 工作目录下配置文件或 ORA 文件中的 TNS_ADMIN • 方案 3:无配置文件 • 在数据源属性中存储连接信息

  34. 受控 ODP.NET 网络配置 • .NET 配置文件中的数据源别名。 • .NET 配置文件中“TNS_ADMIN”所指定位置的 tnsnames.ora 文件中的数据源别名。 • 与 .exe 位于相同目录下的 tnsnames.ora 文件中的数据源别名。 • 位于 %TNS_ADMIN% 下的 tnsnames.ora 文件中的数据源别名 • 位于 %ORACLE_HOME%\network\admin 下的 tnsnames.ora 文件中的数据源别名 优先顺序

  35. 演示 部署受控 ODP.NET

  36. ODP.NET 未受控驱动程序 受控 数据库 未受控 ODP.NET 未受控 DLL ODP.NET Oracle.DataAccess.dll NET OCI Oracle

  37. .NET 部署平台目标 • 选择“x86”或“x64” • 取决于平台目标 • 确保 ODP.NET 版本支持该平台 • 不要使用“AnyCPU”(默认) • “AnyCPU”指示组合件在当前 CPU 上本地运行 • x86 或 x64 • 可能安装了非计划的 ODP.NET 平台版本 未受控 ODP.NET

  38. 部署:即时客户端 (IC) 优点 • 对安装过程实施控制 • Xcopy • 对安装过程实施细粒度控制 • 非常适合于大规模部署或 ISV 打包 • OUI — 非常适合于小规模部署 • 与标准安装相比,安装大小较小 • Xcopy 安装 — 占用空间最小 • OUI 安装 — 占用空间小 未受控 ODP.NET

  39. 在 .NET 中管理多个 Oracle 主目录 • 适用于 ODP.NET 10.2.0.4 和更高版本的解决方案 • ODP.NET 读取 .NET 配置文件来查找未受控的 Oracle DLL • 即使使用了相同的 ODP.NET 受控版本,每个应用程序也都可以使用不同的 Oracle 客户端 DLL 未受控 ODP.NET

  40. 在 .NET 中管理多个 Oracle 主目录 • DLL 搜索顺序 • 1. 当前应用程序目录 • 2. 应用程序配置或web.config • 3. Machine.config • 4. Windows 注册表 • HKLM\Software\Oracle\ODP.NET\<版本>\DllPath • 5. Windows 系统PATH设置 未受控 ODP.NET

  41. 从 Visual Studio 中优化 Oracle 数据库性能

  42. Visual Studio 中的性能调优— SQL Tuning Advisor • 设计新的 SQL 语句时使用 • 对查询窗口中的即席 SQL 语句进行调优 • 对 Oracle Performance Analyzer 发现的瓶颈 SQL 进行调优 • 当 SQL 运行负载性能低下时使用

  43. SQL Tuning Advisor • 要求 • ADVISOR 权限 • 针对 Oracle Diagnostic Pack 的 Oracle 数据库许可证 • 针对 Oracle Tuning Pack 包的 Oracle 数据库许可证 • 如何运行: • Oracle 查询窗口中的“Tune SQL”按钮 • Oracle Performance Monitor —“Tune SQL”按钮

  44. SQL Tuning Advisor • “Implement Findings”按钮 • 自动解决某些发现类型的问题 • “View Report”按钮 • 查看有关如何解决问题的更详细信息

  45. 演示 SQL Tuning Advisor

  46. Visual Studio 中的性能调优 —Oracle Performance Analyzer • 检测运行负载时应用程序使用数据库存在的性能问题 • 要求 • SYSDBA • 针对 Oracle Diagnostic Pack 的 Oracle 数据库许可证 • 可在测试过程中使用 • 也可用于生产应用程序

  47. Oracle Performance Analyzer

  48. Oracle Performance Analyzer • 易于使用 • 运行您的应用程序 • 输入要分析的时间量 • 按“Start”启动计时器 • 需要足够的“databasetime”以获得结果 • 查看结果和操作 • 实施所建议的操作

  49. AWR 和 ADDM • 内置于 Oracle Database 10g • 自动负载信息库 (AWR) • 由statspack演变而来 • 内置资料库 • 定期捕捉性能统计信息 • 自动数据库诊断监控器 (ADDM) • 系统地分析捕获到的 AWR 统计信息 • 生成建议

More Related