Rails 3.2.3 mysql错误“max_prepared_stmt_count”
作者:互联网
我在带有mysql数据库服务器的虚拟主机上运行使用apache2 / passenger部署的Rails 3.2.3应用程序.在很多流量到达网站后我收到了这个错误:
ActiveRecord::StatementInvalid (Mysql::Error: Can't create more than
max_prepared_stmt_count statements (current value: 16382)
我认为它与流量有关,但如果是这样,我必须找到解决方法.以前有人有这个错误吗?我无法弄清楚如何阻止它.
这是我在mysql中看到的:
MySQL的>显示全局状态,例如’com_stmt%’;
| Com_stmt_close | 1720319
| Com_stmt_execute | 2094137 |
| Com_stmt_fetch | 0 |
| Com_stmt_prepare | 1768924 |
| Com_stmt_reprepare | 0 |
| Com_stmt_reset | 0 |
| Com_stmt_send_long_data | 0 |
————————- ———
我正在运行resque gem.
解决方法:
好的,我暂时在这里试着回答.我使用femtoRgon的提示来检查状态.然后我将这两行添加到我的database.yml文件中
pool: 30
prepared_statements: false
我重新启动了mysql.现在让应用程序运行一段时间后,我看到了这个:
mysql> show global status like 'com_stmt%';
| Com_stmt_close | 189017 |
| Com_stmt_execute | 189017 |
| Com_stmt_fetch | 0 |
| Com_stmt_prepare | 189017 |
| Com_stmt_reprepare | 0 |
| Com_stmt_reset | 0 |
| Com_stmt_send_long_data | 0 |
在任何地方都没有差异…加上我用来看到这个:
Ecard Load (0.1ms) SELECT `ecards`.* FROM `ecards` WHERE `ecards`.`id` = ? LIMIT 1 [["id", "34"]]
我现在看到了这个:
Ecard Load (0.4ms) SELECT `ecards`.* FROM `ecards` WHERE `ecards`.`id` = 34 LIMIT 1
我认为这表明我不再使用预备语句了?会喜欢任何想法 – 我想我必须继续监控,看看情况如何……
标签:mysql,ruby-on-rails-3-2 来源: https://codeday.me/bug/20190629/1330033.html