【问题标题】:ruby OCI8 slow initializationruby OCI8 缓慢初始化
【发布时间】:2014-11-18 03:45:29
【问题描述】:

我正在为基于 Oracle 数据库的产品开发 API,我尝试使用 ruby​​-oci8 gem,但遇到了一个奇怪的问题 - OCI8.new 非常慢,连接需要 1,2-1,5 秒到数据库。

例如:

~ mmulev$ irb
2.1.1 :001 > require 'oci8'
 => true 
2.1.1 :002 > def test
2.1.1 :003?>   t0 = Time.now
2.1.1 :004?>   OCI8.new('SCHEMA', 'STRONG_PASS', '//db_host:port/service_name')
2.1.1 :005?>   Time.now - t0
2.1.1 :006?>   end
 => :test 
2.1.1 :007 > test
 => 1.217809 
2.1.1 :008 >

php (oci_new_connect) 中同样的事情需要大约 0,1-0,2 秒来建立连接并返回处理程序。

除了连接池还有其他解决方案吗?

附: ruby API 代码由 method_profiler 和 Benchmark、oracle v - 11g 分析

【问题讨论】:

  • 您是否为 PHP 使用完全相同的连接字符串?您的客户端上是否有多个 ORACLE_HOMEs?
  • 当然,使用n-tier 设计并从 ruby​​(或 php)连接到您的中间层。当然,您的中间层可能需要一个连接池来连接到具有良好性能的数据库。
  • @frank-schmitt,连接字符串相同,ORACLE_HOME只有一个
  • 使用武力。使用 strace,你会看到它挂在哪里。
  • FWIW,这是不可重现的。使用OCI8.new('user', 'pass', '//localhost:1521/xe') 连接到 Docker 容器中的本地 XE 实例耗时 0.015 秒。

标签: ruby oracle oracle11g oci8


【解决方案1】:

你也可以使用这个 gem 连接到 oracle

https://github.com/rsim/oracle-enhanced

确保您已正确安装 oracle,您可以通过以下链接安装它:How to install ruby-oci8?

【讨论】:

  • 这如何回答这个问题?该 gem 似乎是 ruby​​-oci8 的 ActiveRecord 包装器 - 使用它怎么能比普通的 ruby​​-oci8 更快?
  • 使用 oracle-enhanced gem,您可以轻松配置您的 rails 应用程序并查询数据库。如果数据库读/写变慢,那么您可能必须索引某些字段或数据库的其他一些问题:)
  • 对不起,但这与问题完全无关。 OP 根本没有提到 Rails (Ruby != Rails),创建索引肯定不会加速登录到数据库。
  • ?该问题不包含 RailsREST 这两个词,因此恕我直言,这个答案仍然无关紧要。但当然是 YMMV。
猜你喜欢
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 2012-10-31
  • 2011-02-24
  • 2023-01-19
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多