Performance 尝试跟踪rails 2.3上mysql2的性能问题

Performance 尝试跟踪rails 2.3上mysql2的性能问题,performance,memory-leaks,ruby-1.9.2,ruby-on-rails-2,mysql2,Performance,Memory Leaks,Ruby 1.9.2,Ruby On Rails 2,Mysql2,我在使用ruby的mysql2适配器查询MySQL时遇到了一个奇怪的问题。我使用的是ruby-1.9.2-p290和mysql2-0.2.18.gem(因为mysql2>=0.3与Rails 2.3.14有问题,我必须这样做)。除了我在DB上执行的一个特定查询之外,它工作得很好-查询返回的结果很好,但是处理结果所花费的时间不合理(与从ruby 1.8升级之前使用的旧的ruby mysqlgem相比)。代码的要点如下所示: require 'mysql2' client = My

我在使用ruby的
mysql2
适配器查询MySQL时遇到了一个奇怪的问题。我使用的是
ruby-1.9.2-p290
mysql2-0.2.18.gem
(因为
mysql2>=0.3
与Rails 2.3.14有问题,我必须这样做)。除了我在DB上执行的一个特定查询之外,它工作得很好-查询返回的结果很好,但是处理结果所花费的时间不合理(与从ruby 1.8升级之前使用的旧的
ruby mysql
gem相比)。代码的要点如下所示:

    require 'mysql2'

    client = Mysql2::Client.new({ 
        :host     => 'localhost',
        :username => 'minda',
        :password => 'sikriT',
        :database => 'testdb' 
    })

    # pretty elaborate query, utilizing
    # several joines and returning about
    # ~200,000 rows
    sql = "SELECT * FROM ..."

    # returns in reasonable time
    results = client.query(sql, :cast => false)

    # this takes about 3 minutes...
    # before the switch to 1.9/mysql2, this took
    # about 10 sec (which was reasonable,
    # considering I did some fairly 
            # processing inside the block)
    results.each do |row|
        # do nothing here!
    end
我已经把代码翻了个底朝天,eventuall注释掉了块中的所有内容,但看不出是什么导致了性能瓶颈

我应该注意到,在这个特定的程序中,我使用相同的连接执行了很多查询,而这是Suffucate的唯一位置——可能是由于结果集很大。我直接在DB服务器上运行了这个查询,没有发生什么特别的事情。我还注意到,只有在Rails的脚本/控制台上下文中运行这个程序时,或者从Rails应用程序内部调用它时,才会发生这种情况。当我在一个简单的IRB实例中运行上述代码时(没有rails开销),它运行得很好——这让我相信这可能是内存/GC问题


奇怪的是,
mysql2
(特别是,
mysql2::Result
)会被大型查询阻塞(客户机使用QuadCore和8GB RAM运行)。如何解决这个问题有什么想法吗?谢谢。

经过大量挖掘,发现这是由我在
环境.rb中的编码设置引起的,我在那里:

Encoding.default_internal = 'UTF-8'
显然,
Mysql2
正在重新编码结果集中的所有字符串,这显然消耗了大量资源(对于大型结果集)


注释这一行解决了这个问题。

如果我正确地阅读了您的问题,那么它实际上并没有阻塞查询,而是在块内部。对吗?如果是这样的话,mysql就不是问题。这是正确的,我的意思是。但是,它在对
Mysql2::Result
进行操作的块中显示了这种行为。所以我不知道如何更好地表达这一点。