【发布时间】: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