我有一些需要增加WORK_MEM
和TEMP_BUFFERS
. 问题是,一旦我这样做,连接(会话)不会关闭并返回到池中。这意味着额外的内存使用不是暂时的,因为我无法在TEMP_BUFFERS
不破坏会话的情况下改回来。
我想象工作流程是这样的:
conn = ActiveRecord.create_new_connection
conn.execute <<-SQL
SET TEMP_BUFFERS TO '512MB';
-- do some memory intensive
CREATE TEMPORARY TABLE .....;
UPDATE ....;
SQL
conn.close
或者也许有一种方法可以关闭当前连接并让池板条箱创建一个新连接...
似乎new_connection
是一个私有方法,这是我们需要在池中手动创建连接之外的方法,
然后,在检查源代码时,您可以执行以下操作:
connection_specification = ActiveRecord::Base.connection_pool.spec
# i.e.
# connection_specification.adapter_method == 'postgresql_connection'
# connection_specification.config == {:adapter=>"postgresql", :encoding=>"unicode", :pool=>5, :database=>"someapp_development"}
connection = ActiveRecord::Base.send(
connection_specification.adapter_method,
connection_specification.config
)
# DEBUG:
puts connection.active?
# => true
connection.execute <<-SQL
SET TEMP_BUFFERS TO '512MB';
-- do some memory intensive
CREATE TEMPORARY TABLE .....;
UPDATE ....;
SQL
connection.disconnect!
# DEBUG:
puts connection.active?
# => false
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句