0

しばらくの間、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 コードで "unknown column" エラーを報告することがあります... :-(

Windows 2008、mysql 5.0.45、および MySQL コネクタ 6.2、.NET 3.5 を実行しています。平均 250 リクエスト/秒で、ピークは 750 リクエスト/秒です。MySQL の CPU 使用率は 10 ~ 50% で、メモリ使用率は 5 ~ 6 GB (8 GB 利用可能) です。

エラーはほんの数か月前に始まりましたが、ますます頻繁になり、ELMAH から 1 日あたり +500 件のエラーが発生しています。これは、mysql サーバーに負荷がかかっているか、接続が混同されている (mysql または .NET 接続プールのいずれかで) 可能性があるのではないかと考えています。

ローカルおよび別の同一のサーバー設定で再現しようとしましたが、すべての sql クエリで発生するわけではないため、これまでのところエラーを再生成することはできませんでしたが、mysql サービスを再起動すると、一定期間エラーが解消されます時間の。しかし、ユーザーベースとサーバーの負荷が 1 か月あたり 10 ~ 15% 増加するにつれて、エラーがより頻繁に発生するようになりました。

どんな助け、アイデア、アドバイスも大歓迎です...

追加情報: SQL インジェクションの試みをすべて修正するカスタム関数を使用して、すべての外部パラメーター (QueryString、フォーム ポスト データ、Web サービス パラメーター、および内部パラメーター) を実行しています。また、「動的」SQL は使用せず、ストアド プロシージャのみを使用します。

これに加えて、「不明な列」エラーを返す最も頻繁なメソッドは、入力パラメーターとして int32 のみを受け取る .NET のメソッドであり、MySQL SP もパラメーターとして int のみを受け取ります。

また、すべてを try-catch-finally でラップしており、取得しているエラーはエラー処理モジュール (主に ELMAH) からのものです。

4

1 に答える 1

0

破損したクエリ文字列が mySQL に渡されているようです。

.Net アプリケーションが原因であることはほぼ間違いありません。

提案:

  1. クエリを作成しているコードをもう一度見てください。

  2. 運が良ければ、実際の SQL を簡単に分離できます

  3. いずれにせよ、関連するコード (クエリを作成する場所、クエリを作成する場所、最後に結果にアクセスする場所) が try/catch ブロックでラップされていることを確認してください。

    未処理の例外によって、予想される制御パスのフローから外れて、データが破損する可能性があると推測しています。

于 2012-05-27T20:24:32.253 に答える