この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 33231|答える: 6

[出典] MySQLは高並行状況での高いCPU使用率を分析します

[リンクをコピー]
掲載地 2017/09/05 20:23:59 | | | |


最近、何らかの理由でウェブサイト訪問数が急増し、数字から同時接続数が1,200件を超えていることがわかります

サーバー構成が非常に低く、1コアと2Gメモリしか使えませんし、多くの人がいるとウェブサイトへのアクセスが非常に遅いためです


確認にはトップコマンドを使っていますが、mysqlは多くのCPUとメモリを消費し、他のプロセスはphp-fpmがCPUとメモリを多く占有していますが、それほど多くはありません

mysqlが正常に動作している場合、PHPのSQL文が問題を発見し、rootユーザーがmysql管理にアクセスするということです
mySQL -u root -p
パスワードを入力し、次のコマンドを入力してください




このコマンドを使うと、データベースが常に where 条件付きで削除操作を実行していることがわかります。



このテーブルpre_k_spider、プラグインがインストールされたことで発生すると思われるスパイダーアクセスを記録したテーブルです

テーブルpre_k_spider 10万件以上のレコードがあり、クエリは33秒かかります



このテーブルを決定的に空にし、その後管理バックグラウンドに移動して該当するプラグインを閉じて通常の状態に戻してください!









先の:アリババクラウドクラウドマーケットプレイス検証コード認識サービス
次に:my.cnf 設定ファイルを閲覧するには mysql 5.6.21
 地主| 掲載地 2017/09/06 9:32:56 |


今日、ウェブサイトは再び行き詰まり、多くの睡眠時間が見つかっています

睡眠の原因:

1 クライアントプログラムは終了前に mysql_close() を呼び出しませんでした。

2 クライアントはwait_timeout秒からinteractive_timeout秒以上もサーバーにリクエストを出さずに睡眠状態を保っていた。

3 クライアントプログラムはデータ転送の途中で突然終了しました

同じ期間のスリーププロセス数が多すぎ、他の状態の接続総数がmax_connection値を超えると、MySQLはルートユーザー以外のリクエストを処理できず、どのリクエストとも接続を確立できず、直接ハングします

解決策:

1. まず、プログラムがpconnectメソッドを使用しているか確認し、次にページ実行前にmysql_close()が呼び出されているかを確認します。 pconnect方法ではなく、mysql_connectを使うようにしましょう。 プログラムが実行されると、mysql_closeは明示的に呼び出されるべきです

2. my.cnfにwait_timeoutとinteractive_timeoutを追加し、値を小さく設定します。デフォルトではwait_timeout値は8時間ですが、1時間または30分に変更できます。 こうすることでMySQLは死んだ接続をより早く停止できます。 接続数の総数がmax_connection値を超えないようにしましょう。

wait_timeout大きすぎるとMySQL内の多くのSLEEPプロセスが時間内に解放され、システムパフォーマンスが低下しますが、設定が小さすぎると「MySQLが消えた」といった問題が発生することがあります。

max_connection値を高く設定してください。ただし、接続が多いほどサーバーに負担がかかるため、これは明らかに適切ではありません。 実際、そうしたつながりは冗長であり、できるだけ早く殺すのが最善の策です。

3. システムのSQLクエリを段階的に分析し、遅すぎるSQLを見つけて最適化する



1)interactive_timeout:
パラメータの意味:サーバーがインタラクティブ接続をオフにする前にアクティビティを待つ秒数。 インタラクティブクライアントとは、mysql_real_connect()のCLIENT_INTERACTIVEオプションを使用するクライアントとして定義されます。
パラメータデフォルト:28800秒(8時間)

(2)wait_timeout:
パラメータの意味:サーバーが非インタラクティブな接続を閉じるまでに活動を待つ秒数。
スレッドが開始されると、セッションのwait_timeout値はクライアントタイプ(mysql_real_connect()の接続オプションCLIENT_INTERACTIVE定義)に応じてグローバルなwait_timeoutまたはグローバルinteractive_timeout値に基づいて初期化されます。
パラメータデフォルト:28800秒(8時間)

MySQLサーバーがサポートできる最大接続数には上限があり、各接続は確立されメモリを消費するため、クライアントは接続後に切断して占有中のメモリを解放し、対応する操作を処理させることが期待されます。 もしあなたのMySQLサーバーに多数のアイドル接続がある場合、無駄にメモリを消費するだけでなく、接続が増え続けて開かれ続けると、最終的にはMySQLサーバーの最大接続数に達し、「接続が多すぎる」というエラーが報告されます。 wait_timeoutの値設定はシステムの動作に応じて判断されるべきです。 システムが一定期間稼働した後、show processlistコマンドを使って現在のシステムの接続状況を確認できます。もし多くの接続されたプロセスがスリープ状態にある場合は、パラメータ設定が大きすぎているという意味であり、適切な調整で小さな調整が可能です。


SQLコマンド:



この修正方法はmysqlサービスを再起動すると無効になりますですので、これら2つのプロパティはmysql設定ファイルで設定するのが最善です。

Linuxでmy.cnfファイルを修正してください:




掲載地 2017/09/06 11:15:15 |
マスタースレーブサーバーを手に入れなければなりません
 地主| 掲載地 2017/09/06 11:15:49 |
Vrcharyは2017年9月6日 11:15に投稿しました
マスタースレーブサーバーを手に入れなければなりません

サーバー設定の理由 構成が低い   
 地主| 掲載地 2017/09/06 13:47:56 |
「mysql-bin.000001」が大量のスペースを占有する問題を解決しました
http://www.itsvse.com/thread-2694-1-1.html
(出典:建築家)

MySQLをポートでインストールした後、しばらくして/varの容量が不足していることに気づき、mysql-bin.000001、mysql-bin.000002などのファイルがスペースを占有していることを確認しました。では、これらのファイルは何のためのものですか? これはデータベースの操作ログで、例えばUPDATEテーブルやDELETE Dataなどです。文がデータと一致していなくても、このコマンドはログファイルに保存され、各文の実行時間も記録されます。

これは主に以下の2つの目的のために行われます。
1: データ復旧
もしデータベースに問題があり、以前にバックアップがある場合は、ログファイルを見てどのコマンドが原因かを調べ、損失を回復する方法を探すことができます。
2: マスター・スレーブサーバー間のデータの同期
プライマリサーバー上のすべての操作はログに記録され、スレーブサーバーは両者の同期を確認できます。

ログを閉じて


 地主| 掲載地 2017/10/09 14:33:30 |
mysqldはWindowsをCPU占有しすぎています



解決策:SQL文の最適化
掲載地 2021/12/30 23:15:36 |
支持しましょう!!!!!!!!!!!!!!!!
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com