2011-07-13 6 views
0

私は複数のMySQLデータベースを持つサーバを持っています。
定期的に、プログラミングエラーやデータエラーのためにデータベースに問題があります。多分暴走的な質問があります。問題が起きる...しかし、その1つのデータベースの問題は、サーバー上のすべてのデータベースを遅くしたりロックしたりして、小さな問題を大きな問題にしてしまう可能性があります。1つのデータベースの問題からサーバ上のmySQLデータベースを保護することはできます

1つのデータベース内にエフェクトを格納し、他のデータベースを円滑に実行させるためにできることはありますか?

+1

発生している問題の種類について詳しく知ることができますか?あなたはデッドロックに陥っていますか?または、mysqlデーモンが起動しませんか?または接続が不足していますか? – Flimzy

+0

接続が不足しています。我々はSelect文を決して終わらせていない。エラーが見つかったときに修正します。私の質問はより構造的です。問題は常に発生するので、私は1つのデータベース内に問題を含める方法を見つけて、サーバー上で実行されている他のアプリケーションには影響しません。これは、MySQlとOracleやSQL Serverなどのエンタープライズデータベースとの違いかもしれません。 – sdfor

答えて

2

明白な解決策の1つは、複数のMySQLインスタンスを実行することです。回避しようとしている特定のエラー条件の正確な性質に応じて、劇的な対策を取ることはできませんが、

Setting Account Resource Limitsをご覧ください。ユーザーごとの最大接続数を設定することは、あなたが直面しているようないくつかの問題を解決するのに役立つかもしれません。

確かに他のデータベースシステムでは、これらのタイプのものに対して安全性を高めることができますが、MySQLがニーズに合わせて設定することはできません。たとえば、PostgreSQLでは、私が仕事で使用する "文のタイムアウト"変数を提供しています。これは、長期実行クエリに対する安全保護のように、クエリの実行時にグローバルな上限を設定します。 (特定のクエリがデフォルトの300秒より長くかかると予想される場合は、接続ごとに簡単にオーバーライドできます)MySQLの場合も同様のオプションはありません。

0

暴走/再帰問合せの問題を完全に埋めるには、そのデータベースを自分のサーバーに移動する必要があります。クエリは、他のデータベースに必要なメモリ/ディスク領域をすべて使い果たしてしまう可能性があります。

+0

ここでのポイントは、問題がいつ発生するのか、そしてそれが起こる25のデータベースのどれがわかるのかということです。 – sdfor

+0

ああ、そうだ。私はあなたのデータベースのうちの1つだけが、あなたが次に分離できる「暴走」のクエリを持っていると仮定しました。私はまだRAMの問題を分離する必要性についての私のコメントによって立っています。同じサーバ上の複数のmysqlインスタンスが同じRAMを共有します。 「暴走」クエリが他のデータベースに影響を与えるほど深刻な問題であれば、複数のインスタンスを別々のVMで実行することをお勧めします。そうすれば、ハードウェアを個々に割り当てることができます。 – adlawson

関連する問題