イベントでは、SQL コードを 1 回または一定の間隔で実行することを指定できます。通常、複雑な SQL ステートメントはストアド プロシージャを使用してカプセル化され、特定のタスクを完了するためにストアド プロシージャが定期的に呼び出されます。 イベントはサーバー接続を確立する必要はありませんが、別のイベント スケジューラ スレッドを通じて初期化されます。接続がなければ入力も出力もないため、イベントには入力パラメータも戻り値もありません。有効にすると、サーバー ログを通じて実行された命令を表示できますが、それがどの特定のイベントからのものであるかを知ることは困難です。また、INFORMATION_SCHEMA.EVENTS テーブルをクエリして、イベントのステータス (最新の実行時刻など) を確認することもできます。 ストアド プロシージャと同様に、イベントでも同様の問題を考慮する必要があります。まず、イベントは MySQL サーバーに余分な作業を追加します。イベント自体のペイロードは小さいですが、イベントによって呼び出される SQL ステートメントはパフォーマンスに重大な影響を及ぼす可能性があります。さらに、イベントにも、ステートメントベースのレプリケーションによって発生するストアド プロシージャと同じ問題が発生します。イベントの適切な用途としては、定期的なメンテナンス タスク、キャッシュの再構築、データ統計、監視および診断のためのステータス値の保存などのタスクがあります。 次の例では、指定されたデータベースで毎週テーブル最適化を実行するストアド プロシージャを呼び出すイベントを作成します。 1 週間ごとにスケジュールされたイベント optimize_somedb ON を作成する する optimize_tables('somedb') を呼び出します。 イベントを繰り返す必要があるかどうかを指定できます。場合によってはこれで問題ありませんが、そうでない場合もあります。上記の例を使用すると、すべてのレプリカで OPTIMIZE TABLE コマンドを実行することができます。ただし、すべてのレプリカがこの操作を同時に実行すると、サーバー全体のパフォーマンスに影響することに注意してください (たとえば、テーブルのロック)。 さらに、定期的なイベントは完了するまでに長い時間がかかる場合があり、次のイベントが完了する前に新しいイベントの実行が開始される可能性もあります。 MySQL ではこの状況を防ぐことはできないため、同じタスクの排他性を実装するには独自のコードを記述する必要があります。これはロックを使用することで実現できます: 1 週間ごとにスケジュールされたイベント optimize_somedb ON を作成する する 始める SQLEXCEPTION の継続ハンドラを宣言する 始まり 終わり; GET_LOCK('somedb', 0)の場合 optimize_tables('some_db') を呼び出します。 終了の場合; RELEASE_LOCK('somedb')を実行します。 終わり 一見「冗長」な継続ハンドラは、例外が発生した場合でもロックが解除されることを保証します。 イベントは接続とは関係ありませんが、スレッドとは関係があります。 MySQL サーバーには、サーバー構成で有効にできるメイン イベント ディスパッチ スレッドがあります。 グローバルイベントハンドラを 1 に設定します。 有効にすると、このスレッドはスケジューラで指定されたイベントを実行します。サーバーのエラー ログを表示して、イベント実行に関する情報を取得できます。 イベント スケジューラはシングル スレッドですが、イベント自体は同時に実行できます。イベントが実行されるたびに、サーバーは新しいプロセスを作成します。イベント内では、CONNECTION_ID() を呼び出して一意の値を取得できます (実際の接続がない場合でも)。実際に返されるのはスレッド ID です。イベントが実行されると、プロセスとスレッドは破棄されます。 SHOW PROCESSLIST で確認でき、コマンド列に Connect として表示されます。 プロセスは実際にイベントを実行するスレッドを作成しますが、イベントが完了するとスレッドは破棄され、キャッシュに配置されないため、Threads_created ステータス カウンターは増加しません。 結論: アプリケーションまたはオペレーティング システム レベルのスケジュールされたタスクと比較すると、イベントは SQL 接続確立プロセスがないため、より効率的でコストが低くなります。データ テーブルの最適化、統計レポート データの生成など、定期的に実行する必要がある SQL スクリプト タスクに適用できます。ただし、イベント自体に同時実行の問題が発生する可能性があり、これはロックによって解決できることに注意してください。同時に、イベントを繰り返し実行する必要がある場合は、複雑すぎて時間のかかるタスクを実行しないことをお勧めします。 上記は、MySQL がイベントを使用してスケジュールされたタスクを完了する方法の詳細です。MySQL がイベントを使用してスケジュールされたタスクを完了する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します
>>: Zabbix による VMware Exsi ホストの監視のグラフィカルな手順
インターネット上で多くの関連チュートリアルを見てきましたが、インストール プロセスにはまだいくつかの...
ユニアプリアプレットはWeChatでも同様のドロップダウン問題を抱えることになる解決策は、app.v...
Web デザインは、個人の好みや Web ページの内容に応じて、デザインのレイアウトが常に変化します...
目次1. CDNの紹介1.1 react (最初にインポート) 1.2 react-dom(後ほど紹...
多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...
目次序文メタデータとは参照文書アドレスまずはMySQLについてお話しましょうOracleについて話し...
JDBCデータベースリンクと関連メソッドのカプセル化の詳細な説明MySQL データベースを使用して、...
長い間何もしていなかった人は、努力をすると一生懸命働いていると思うようになります。 1. 問題Nav...
目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...
1. 冒頭の2つの単語みなさんこんにちは。私の名前はLin Zonglinです。私はテストエンジニア...
Linux grep コマンドLinux の grep コマンドは、ファイル内の条件を満たす文字列を...
この記事では、MySQLのプリコンパイル機能について紹介します。具体的な内容は以下のとおりです。 1...
データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...
<br />Web ページをデザインするときには、いつも不快なことに遭遇します。最も一般...
最近のプロジェクトでは、ブレークポイントからビデオの再生を再開する機能を実装する必要がありました。こ...