当該ユーザーがどんな目的で、どのようなクエリを発行しているかも大いに関係してくると思うのですが...
とりあえず当該ユーザーのクライアントとのI/Oを絞りたいだけであれば、MySQL事態の設定ではないですがiptables
で帯域制限をかけることができます。
ただ、当該ユーザーも不必要に高IOのクエリを投げているわけではない(取得したデータを業務で使用している)はずなので、突然通信速度が遅くなったらカチコミに来るでしょう。事前の説明はしっかり必要だと思います。
以下余談。
ユーザの利用方法には口出しはしない方針です。
と書いてありますが、必要に応じてユーザーに口も出せば手も出すのがサーバー管理者の仕事です。
高負荷のクエリを投げてシステム全体に影響を及ぼしているのであれば、部門や会社を挙げて対策を考えるべきです。
先にも書いたように当該ユーザーも嫌がらせで高負荷IOクエリを実行しているわけはないはず。業務で取得したデータを使用したいからクエリを投げているはずです。
どのようなクエリを投げているか(は、スロークエリーログを見ればわかると思います)、実行しているクエリにパフォーマンス的な改善余地がないのか、取得したデータをどのような業務に使用しているか、など詳細をヒアリングし、もっと別の解決方法を模索できないでしょうか。
テーブル全体を取得するようなクエリとのことなのでDWH的な利用をしたいのかもしれません。例えばユーザー側のローカルか所属部門にMySQLサーバを立ててもらい(状況によってはAccessでも良いでしょう)、負荷の低い時間に必要なテーブルをレプリケーションしてあげれば日中の負荷は本サーバ側には向かなくなります。
ストアドプロシージャにしてウェイトをかけながらfetchさせれば時間当たりのIOは減らせるかもしれません。
当該ユーザー当人に直接干渉するのが憚られる場合は、上役を通して政治的にお話し合いをしてもらうのも一つの手です(上司はそのために存在する!)
余談の方が長くなりました。私も何度か負荷が原因でデータベース管理者にカチコミを食らっています。もちろん全敗です。ただただ文句だけ言いに行くのではなく、解決策もある程度考えてあげるのが「良い管理者」なのかなと思います。上記カチコミの際にも相手サーバの管理者にはいろいろとアドバイスをいただきました。ありがたいことです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 12:50 編集
2021/06/11 15:09