gpt4 book ai didi

ruby-on-rails - rails : rake db:migrate *very* slow on Oracle

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:40 24 4
gpt4 key购买 nike

我将 Rails 与 oracleenhanced 适配器结合使用,为遗留应用程序创建新接口(interface)。

数据库迁移工作成功,但在 rake 完成之前需要花费非常长的时间。数据库更改发生得非常快(1 或 2 秒),但 db/schema.db 转储需要一个多小时才能完成。 (请参阅下面的示例迁移。)

这是一个相对较大的模式(大约 150 个表),但我确信转储每个表描述不应该花这么长时间。

有没有办法通过只获取最后一个 schema.db 并将迁移中指定的更改应用到它来加快速度?或者我可以完全跳过这个模式转储吗?

我知道这个 schema.db 用于每次从头开始创建测试数据库,但在这种情况下,表触发器中有大量数据库逻辑未包含在schema.rb 无论如何,所以抽样测试在任何情况下对我们都没有好处。 (这是一个完全不同的问题,我需要在其他时候解决。)

dgs@dgs-laptop:~/rails/voyager$ time rake db:migrate(in /home/dgs/rails/voyager)== 20090227012452 AddModuleActionAndControllerNames: migrating ================-- add_column(:modules, :action_name, :text)   -> 0.9619s   -> 0 rows-- add_column(:modules, :controller_name, :text)   -> 0.1680s   -> 0 rows== 20090227012452 AddModuleActionAndControllerNames: migrated (1.1304s) =======real    87m12.961suser    0m12.949ssys 0m2.128s

最佳答案

在所有迁移应用到数据库之后,rake db:migrate 调用 db:schema:dump 任务从当前数据库模式生成 schema.rb 文件。

db:schema:dump 调用适配器的“tables”方法来获取所有表的列表,然后为每个表调用“indexes”方法和“columns”方法。您可以在 activerecord-oracle_enhanced-adapter gem 的 oracle_enhanced_adapter.rb 文件中找到这些方法中使用的 SQL SELECT 语句。基本上它确实从 ALL% 或 USER% 数据字典表中进行选择以查找所有信息。

最初,当我将原始 Oracle 适配器与具有许多不同模式的数据库一起使用时,我遇到了问题(因为性能可能会受到数据库中表总数的影响 - 而不仅仅是在您的模式中),因此我做了一些优化在 Oracle 增强适配器中。最好找出您的情况下哪些方法很慢(我怀疑它可能是为每个表执行的“索引”或“列”方法)。

调试此问题的一种方法是将一些调试消息放入 oracle_enhanced_adapter.rb 文件中,以便您可以确定哪些方法调用花费了如此长时间。

关于ruby-on-rails - rails : rake db:migrate *very* slow on Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com