数据库
首页 > 数据库> > Rails 3.2.3 mysql错误“max_prepared_stmt_count”

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的&GT显示全局状态,例如’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