以下命令在运行 Php 5.4 的 Linux MySQL 5.6 服务器中需要 2-3 秒
exec("mysql --host=$db_host --user=$db_user --password=$db_password $db_name < $sql_file");
在具有类似配置的 Windows 上,需要 10-15 秒。 windows机器有更多的内存(16gb)和类似的硬盘。我安装了 MySQL 5.6 并且没有进行任何配置更改。这是在 Windows Server 2012 上。
我可以更改哪些配置来解决此问题?
数据库文件创建了大约 40 个 innodb 表,插入量非常少。
编辑:这是我正在运行的文件:
https://www.dropbox.com/s/uguzgbbnyghok0o/database_14.4.sql?dl=0
更新:在 Windows 8 和 7 上是 3 秒。但在 windows server 2012 上是 15+ 秒。我禁用了 System Center 2012,这没有任何区别。
更新 2:
我还尝试杀死几乎所有服务,除了 mysql 和 IIS,它仍然执行缓慢。 windows server 2012 中是否存在导致速度变慢的问题?
更新 3 我尝试禁用写入缓存缓冲区刷新,现在性能非常好。
我不必在我测试过的其他机器上执行此操作。这是否表明磁盘设置存在瓶颈?
最佳答案
这就是为什么我们称它为 LAMP 堆栈,毫无疑问它为什么如此受欢迎 mysql on windows vs Linux .但这更多地与稳定性和安全性有关。性能方面的差异应该是最小的。虽然 Microsoft 专业人员可以通过启用和禁用服务来为 MySQL 显式优化 Windows Server,但我们更愿意查看您的 my.ini 的配置。 .那么,我们应该考虑哪些因素可能会导致我们在 MySQL 上运行 Windows
由于各种限制和保护措施,Windows 中的服务和策略有时会严重影响性能。
我们还应该考虑 Apache( httpd.conf ) 和 PHP( php.ini ) 配置,因为 MySQL 与它们紧密耦合。
防病毒:在性能基准测试时最好禁用此功能
必须在 my.ini 中考虑这些参数因为这里有 40 个 Innodb 表
innodb_buffer_pool_size , innodb_flush_log_at_trx_commit , query_cache_size , innodb_flush_method , innodb_log_file_size , innodb_file_per_table
例如:如果ib_logfile0的文件大小=524288000,那么 524288000/1048576 = 500,因此 innodb_log_file_size 应该是 500M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
https://dev.mysql.com/doc/refman/5.1/en/innodb-tuning.html
将数据导入 InnoDB 时,请确保 MySQL 没有启用自动提交模式,因为这需要每次插入都将日志刷新到磁盘
SET autocommit=0;
最重要的是 innodb_flush_log_at_trx_commit在这种情况下,它是关于导入数据库的。将此设置为 '2' form '1' (default)hm 可以大大提高性能,特别是在数据导入期间,因为日志缓冲区将在每次事务提交时刷新到 OS 文件缓存
供引用:
https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
https://dba.stackexchange.com/a/72766/60318
http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/
最后,基于此
mysql --host=$db_host --user=$db_user --password=$db_password $db_name < $sql_file
如果 mysqldump (.sql) 文件不在您要导入的同一主机中,则性能会很慢。 考虑将 (.sql) 文件准确复制到需要导入数据库的服务器中,然后尝试不使用 --host 进行导入选项。
关于mysql 5.6 Linux vs windows 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663234/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
是否存在GC.disable会降低性能的情况?只要我使用的是真正的RAM而不是交换内存,就可以这样做吗?我正在使用MRIRuby2.0,据我所知,它是64位的,并且使用的是64位的Ubuntu:ruby2.0.0p0(2013-02-24revision39474)[x86_64-linux]Linux[redacted]3.2.0-43-generic#68-UbuntuSMPWedMay1503:33:33UTC2013x86_64x86_64x86_64GNU/Linux 最佳答案 GC.disable将禁用垃圾回收。像rub