一段时间以来,我们一直从我们的 mysql 服务器收到“未知列”错误。
错误如下所示:
Unknown column 'JOIN search_table��z[.cc.' in 'field list'
Unknown column '(`IX_cfs$order$make$model`) INNER JOIN search_t' in 'field list'
Unknown column 'eated, cp.stat_sales, cp.stat_views, cp.culture_code' in 'field list'
+ more
最奇怪的部分是我们的 .NET 代码中的哪些方法得到错误是完全随机的。即使在查询中不包含任何报告的错误表的方法,有时也会报告“未知列”错误,其中包含不属于该查询的 SQL 代码...... :-(
我们正在运行 Windows 2008、mysql 5.0.45 和 MySQL 连接器 6.2、.NET 3.5。我们平均每秒 250 个请求,峰值为 750 个请求/秒。MySQL CPU 使用率为 10-50%,内存使用率为 5-6 GB(8 GB 可用)。
这些错误仅在几个月前开始,但已经变得越来越频繁,以至于我们每天从 ELMAH 收到 +500 个错误。我们怀疑这可能是 mysql 服务器压力过大,连接混合(在 mysql 或 .NET 连接池中)。
我们试图在本地和单独的相同服务器设置上重现它,但到目前为止,重新生成错误没有运气,因为它不会发生在所有 sql 查询中,但是重新启动 mysql 服务可以消除一段时间的错误的时间。但是随着我们的用户群和服务器负载以每月 10-15% 的速度增长,错误变得更加频繁。
任何帮助,想法,建议都非常感谢......
附加信息: 我们通过修复所有 SQL 注入尝试的自定义函数运行所有外部参数(查询字符串、表单发布数据、Web 服务参数以及内部参数)。而且我们不使用“动态”SQL,只使用存储过程。
除此之外,最常见的返回“未知列”错误的方法是 .NET 中仅将 int32 作为输入参数的方法,而 MySQL SP 也仅将 int 作为参数。
此外,我们将所有内容都包装在 try-catch-finally 中,我们得到的错误来自我们的错误处理模块(主要是 ELMAH)