我有一个带有 MyISAM 表的 MySQL 数据库,该表有 400 万行。我大约每周用大约 2000 行更新此表。更新后,我会像这样更改表格:
ALTER TABLE x ORDER BY PK DESC
我按主键字段降序排列表格。这在我的开发机器(3GB 内存的 Windows)上没有给我带来任何问题。我已经在生产 Linux 服务器上成功尝试了 3 次(使用 512MB RAM - 每次都在大约 6 分钟内获得结果排序表),上次我尝试它时我不得不在大约 30 分钟后停止查询并重建来自备份的数据库。
512MB 的服务器可以处理如此大的表上的 alter 语句吗?我读到创建了一个临时表来执行 ALTER TABLE 命令。
问题:这个alter命令能安全运行吗?改表的预计时间应该是什么时候?
最佳答案
正如我刚刚读到的,ALTER TABLE ... ORDER BY ... 查询对于在某些情况下提高性能很有用。我很惊讶 PK 指数对此没有帮助。但是,来自 the MySQL docs ,似乎 InnoDB 确实使用了索引。然而 InnoDB 往往比 MyISAM 慢。也就是说,使用 InnoDB 你不需要重新排序表,但你会失去 MyISAM 的惊人速度。它仍然值得一试。
按照您解释问题的方式,似乎加载到内存中的数据太多(甚至可能正在进行交换?)。您可以通过监视内存使用情况轻松检查。很难说,因为我不太了解 MySQL。
另一方面,我认为您的问题出在一个非常不同的地方:您正在使用一台只有 512 兆 RAM 的机器作为数据库服务器,并且有一个包含超过 4Mio 行的表......并且您正在执行一个非常该机器上整个表的内存密集型操作。看来 512Megs 还远远不够。
我在这里看到一个更基本的问题:您在与生产环境截然不同的环境中进行开发(并且很可能还进行测试)。您正在解释的问题类型是可以预料的。您的开发机器的内存是生产机器的六倍。我相信我可以有把握地说,处理器也快得多。在这种情况下,我建议您创建一个模仿您的生产站点的虚拟机。这样您就可以在不中断生产站点的情况下轻松测试您的项目。
关于非常大的表上的 MySQL ALTER TABLE - 运行它安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359097/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'