2012-05-27 6 views
0

В течение некоторого времени мы получаем ошибку «неизвестного столбца» на нашем сервере mysql.Странная 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, который получает ошибки. Даже методы, которые не включают в себя какие-либо из сообщений об ошибках в запросе, иногда сообщают об ошибке «unkown column» с кодом SQL внутри, который не принадлежит этому запросу ... :-(

Мы работаем с окнами 2008 , mysql 5.0.45 и MySQL 6.2, .NET 3.5. У нас есть 250 запросов в секунду с пиками 750 запросов в секунду. Потребление процессора MySQL составляет 10-50%, а использование памяти - 5-6 ГБ (8 ГБ Доступно)

Ошибки начались всего несколько месяцев назад, но стали все чаще и чаще, до тех пор, пока мы не получим +500 ошибок в день от ELMAH. Мы подозреваем, что это может быть что-то с подчеркнутым mysql сервер, смешивание соединений (либо в mysql, либо в пуле соединений .NET).

Мы попытались воспроизвести его локально и на отдельной идентичной настройке сервера, но до сих пор не удавалось повторно генерировать ошибки, поскольку это не происходит для всех запросов sql, однако перезапуск службы mysql исключает ошибку в течение определенного периода времени. Но по мере того, как наша загрузка пользовательской базы и сервера увеличивается на 10-15% в месяц, ошибка становится более частым.

Любая помощь, идеи, советы очень высоко ценится ...

Дополнительная информация: Мы бежим все внешние paramters (QueryString, Форма отправки данных, параметров WebService, а также внутренние параметры) thrue которая исправляет все попытки внедрения SQL. И мы не используем «динамический» SQL, используются только хранимые процедуры.

Кроме того, наиболее часто используемый метод, возвращающий ошибку «неизвестного столбца», представляет собой метод в .NET, который принимает только входной параметр int32, а MySQL SP также принимает только параметр int.

Также мы обернуть все в примерочных всеобъемлющая, наконец, и ошибка мы получаем от наших модулей обработки ошибок (в первую очередь Elmah)

+1

"thrue пользовательская функция, которая исправляет все попытки внедрения SQL". что именно делает эта функция? И почему это необходимо в первую очередь - есть ли у .NET нет надлежащих методов санитарии? (Пользовательские функции очень часто являются виновниками, когда данные перепутаны.) –

+0

Пользовательская функция, которую мы передаем «небезопасным» данным, удаляет ненужные теги HTML, заменяет определенные символы, такие как «», с их значениями сущности html. Мы используем эту функцию более 8 лет и имеем более новые проблемы с ней. Но ошибки mysql также находятся в 99% случаев, возвращаемых простыми вызовами SP, которые принимают только входные параметры и делают простые выборки. возвращенные ошибки выглядят так, как будто они из совершенно разных SQL-запросов. Также факт, что ошибка «неизвестный столбец», а затем код SQL вместо имени столбца, смущает нас большим временем. – Obiwan

ответ

0

Это выглядит как коррумпированного строки запроса является получение передается MYSQL.

Ваше приложение .Net почти наверняка является виновником.

SUGGESTIONS:

  1. снова взглянуть на код, который делает запросы.

  2. Если вам повезет, вы можете легко изолировать фактический SQL

  3. Любое любом случае, убедитесь, что соответствующий код: где вы создаете запрос, а затем, когда вы делаете запрос, и, наконец, где вы получаете доступ к результату - завершается в блок try/catch.

    Я предполагаю, что какое-то необработанное исключение может вывести вас из потока управляющего пути, который вы ожидаете принять, что приведет к повреждению данных.

+0

Спасибо за ввод, см. мою дополнительную информацию комментарий – Obiwan

Смежные вопросы