背景日常の使用において、MySQL で個別または大量の接続が蓄積されることが時々あります。このような場合、通常は、kill コマンドを使用してこれらの蓄積された接続を強制的に強制終了し、接続数とデータベース サーバーの CPU リソースをできるだけ早く解放することを検討します。 問題の説明実際に kill コマンドを使用すると、接続はすぐには終了せず、プロセス リストにはまだ表示されますが、表示されるコマンドは一般的なクエリや実行ではなく、Killed になります。例えば: mysql> プロセスリストを表示します。 +----+------+--------------------+---------+--------+------+--------------+--------------------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+------+--------------------+---------+--------+------+--------------+--------------------------------+ | 31 | root | 192.168.1.10:50410 | sbtest | クエリ | 0 | 開始 | プロセスリストを表示 | | 32 | root | 192.168.1.10:50412 | sbtest | クエリ | 62 | ユーザー sleep | select sleep(3600) from sbtest1 | | 35 | root | 192.168.1.10:51252 | sbtest | 強制終了 | 47 | データ送信中 | select sleep(100) from sbtest1 | | 36 | root | 192.168.1.10:51304 | sbtest | クエリ | 20 | データを送信中 | select sleep(3600) from sbtest1 | +----+------+--------------------+---------+--------+------+--------------+--------------------------------+ 原因分析疑問がある場合は、まず公式ドキュメントを参照してください。以下は公式ドキュメントからの抜粋です。
公式ドキュメントの最初の段落には、kill のメカニズムが明確に記載されています。接続されたスレッドに対してスレッド レベルの kill マークが設定され、次の「マーク検出」まで有効になりません。これは、次の「マーク検出」が間に合わなかった場合、問題で説明した現象が発生する可能性があることも意味します。 公式ドキュメントには、いくつかのシナリオがリストされています。公式の説明に基づいた、よくある問題のシナリオをいくつか示します。
シミュレーションするここでは、パラメータ innodb_thread_concurrency を使用して、SQL ステートメントの通常の実行をブロックするシナリオをシミュレートします。 InnoDB 内で許可されるスレッドの最大数を定義します。値 0 (デフォルト) は、無制限の同時実行 (制限なし) として解釈されます。この変数は、高同時実行システムでのパフォーマンス チューニングを目的としています。 公式ドキュメントによると、このパラメータが低い値に設定されている場合、制限を超える InnoDB クエリはブロックされます。したがって、このシミュレーションでは、このパラメータは非常に低い値に設定されました。 mysql> '%innodb_thread_concurrency%' のような変数を表示します。 +---------------------------+-------+ | 変数名 | 値 | +---------------------------+-------+ | innodb_thread_concurrency | 1 | +---------------------------+-------+ セット内の 1 行 (0.00 秒) 次に、2 つのデータベース接続 (セッション 1 とセッション 2) を開き、それぞれで セッション 1: mysql> sbtest.sbtest1 から sleep(3600) を選択します。 セッション2: mysql> sbtest.sbtest1 から sleep(3600) を選択します。 エラー 2013 (HY000): クエリ中に MySQL サーバーへの接続が失われました マイSQL> セッション3: mysql> プロセスリストを表示します。 +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ | 44 | root | 172.16.64.10:39290 | NULL | クエリ | 17 | ユーザー sleep | sbtest.sbtest1 から sleep(3600) を選択 | | 45 | ルート | 172.16.64.10:39292 | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 46 | root | 172.16.64.10:39294 | NULL | クエリ | 5 | データを送信中 | select sleep(3600) from sbtest.sbtest1 | +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ セット内の 3 行 (0.00 秒) mysql> 46 を強制終了します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> プロセスリストを表示します。 +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ | ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 | +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ | 44 | root | 172.16.64.10:39290 | NULL | クエリ | 26 | ユーザー sleep | sbtest.sbtest1 から sleep(3600) を選択 | | 45 | ルート | 172.16.64.10:39292 | NULL | クエリ | 0 | 開始 | プロセスリストを表示 | | 46 | root | 172.16.64.10:39294 | NULL | 強制終了 | 14 | データを送信中 | sbtest.sbtest1 から sleep(3600) を選択 | +----+------+--------------------+-------+--------+------+--------------+-----------------------------------------+ セット内の 3 行 (0.00 秒) マイSQL> ご覧のとおり、kill コマンドが実行されると、セッション 2 の接続はすぐに切断されますが、セッション 2 によって開始されたクエリは MySQL に残っています。もちろん、 総括するMySQL の kill 操作は、想像どおりにデータベース接続を直接強制的に終了するわけではありません。終了信号を送信するだけです。SQL 自体の実行効率が遅すぎる場合、または他の要因 (サーバーの負荷が高い、大量のデータ ロールバックがトリガーされる) の影響を受けている場合は、この kill 操作では、問題のあるクエリを時間内に終了できない可能性があります。それどころか、プログラム側の接続が切断された後に再接続がトリガーされ、クエリの効率がさらに低下し、データベースのパフォーマンスがさらに低下する可能性があります。 上記は、MySQL kill がスレッドを強制終了できない理由の詳細です。MySQL kill スレッドの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Webデザイン: スクリプト素材でユーザーエクスペリエンスを再構築
今日、私はプロジェクトの移行の問題に取り組んでいましたが、突然、大量の写真をどうやって移動したらよい...
目次質問伸ばす問題を解決する要約する質問プロジェクトの要件に従って、以下の州地図で個々の都市を(異な...
この記事の例では、参考までに簡単なカウントダウンを実装するためのjsの具体的なコードを共有しています...
目次序文バブルソート基本アルゴリズム2 番目の書き方は、基本的なアルゴリズムに基づいて改良されていま...
1: スループット(1秒あたりのリクエスト数)サーバーの同時処理能力を定量的に表したもので、reqs...
この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...
1. nacosデータベースを再開します。データベース名nacos_configユーザー名とパスワー...
序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...
長期間稼働しているデータベースの場合、テーブルがストレージ領域を占有しすぎるという問題がよく発生しま...
この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...
この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...
移動を実現するためにtranslateパラメータを使用しますtranslateX: X 軸に沿って移...
序文ファイル システムは、データの保存方法と復元方法を整理する役割を担います。 いずれにせよ、時間の...
JS のクラスの定義や継承は本当に多様なので、別のノートブックを開いて記録しておきます。意味オブジェ...
最近データベースを学び始めたのですが、とても興味深いコースだと感じていますが、含まれる内容の多くは私...