MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの最適化について説明しました。今日は、MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作を分析するための SQL ステートメントをいくつか紹介します。

では、早速コードを見てみましょう。

テーブルの読み取りと書き込みの負荷を反映します

SELECT ファイル名 AS ファイル、
    カウント_読み取り、
    合計読み取りバイト数 AS 合計読み取り、
    カウント書き込み、
    合計書き込みバイト数 AS 合計書き込みバイト数、
    (合計読み取りバイト数 + 合計書き込みバイト数) AS 合計
 performance_schema.file_summary_by_instance から
ORDER BY 合計読み取りバイト数 + 合計書き込みバイト数 DESC;

ファイルの反映の遅延

SELECT (ファイル名) AS ファイル、
    count_star AS合計、
    CONCAT(ROUND(sum_timer_wait / 3600000000000000, 2), 'h') AS total_latency,
    カウント_読み取り、
    CONCAT(ROUND(sum_timer_read / 1000000000000, 2), 's') AS read_latency、
    カウント書き込み、
    CONCAT(ROUND(sum_timer_write / 3600000000000000, 2), 'h') AS write_latency
 performance_schema.file_summary_by_instance から
sum_timer_wait で順序付けして DESC を指定します。

テーブルの読み取りと書き込みのレイテンシ

オブジェクトスキーマをテーブルスキーマとして選択し、
       オブジェクト名 AS テーブル名、
       count_star AS合計、
       CONCAT(ROUND(sum_timer_wait / 3600000000000000, 2), 'h') を total_latency として、
       CONCAT(ROUND((sum_timer_wait / count_star) / 1000000, 2), 'us') AS avg_latency,
       CONCAT(ROUND(max_timer_wait / 1000000000, 2), 'ms') AS max_latency
 performance_schema.objects_summary_global_by_type から
    sum_timer_wait で順序付けして DESC を指定します。

テーブル操作頻度の表示

オブジェクトスキーマをテーブルスキーマとして選択し、
      オブジェクト名 AS テーブル名、
      count_star AS rows_io_total、
      count_read は rows_read として、
      count_write は rows_write として、
      count_fetch AS rows_fetchs、
      count_insert AS rows_inserts、
      count_update AS rows_updates、
      count_delete は rows_deletes として、
       CONCAT(ROUND(sum_timer_fetch / 3600000000000000, 2), 'h') AS fetch_latency、
       CONCAT(ROUND(sum_timer_insert / 3600000000000000, 2), 'h') AS insert_latency、
       CONCAT(ROUND(sum_timer_update / 3600000000000000, 2), 'h') AS update_latency、
       CONCAT(ROUND(sum_timer_delete / 3600000000000000, 2), 'h') AS delete_latency
   performance_schema.table_io_waits_summary_by_table から
    ORDER BY sum_timer_wait DESC ;

インデックスステータス

OBJECT_SCHEMA を table_schema として選択します。
        OBJECT_NAME AS テーブル名、
        INDEX_NAMEをindex_nameとして、
        COUNT_FETCH AS 行取得、
        CONCAT(ROUND(SUM_TIMER_FETCH / 3600000000000000, 2), 'h') AS select_latency,
        COUNT_INSERT AS 行挿入、
        CONCAT(ROUND(SUM_TIMER_INSERT / 3600000000000000, 2), 'h') AS insert_latency,
        COUNT_UPDATE AS 行更新、
        CONCAT(ROUND(SUM_TIMER_UPDATE / 3600000000000000, 2), 'h') AS update_latency、
        COUNT_DELETE AS 行削除、
        CONCAT(ROUND(SUM_TIMER_DELETE / 3600000000000000, 2), 'h') AS delete_latency
performance_schema.table_io_waits_summary_by_index_usage から
index_name が NULL ではない場合
sum_timer_wait で順序付けして DESC を指定します。

完全なテーブルスキャン

オブジェクトスキーマを選択します。
    オブジェクト名、
    count_read と rows_full_scanned の比較
 performance_schema.table_io_waits_summary_by_index_usage から
index_name が NULL の場合
  かつ count_read > 0
count_read の順序で DESC を指定します。

未使用のインデックス

オブジェクトスキーマを選択します。
    オブジェクト名、
    インデックス名
  performance_schema.table_io_waits_summary_by_index_usage から
 index_name が NULL ではない場合
  かつ count_star = 0
  AND object_schema が ('mysql','v_monitor') にありません
  AND インデックス名 <> 'PRIMARY'
 ORDER BY object_schema, object_name;

悪いSQLの問題の概要

SELECT (DIGEST_TEXT) AS クエリ、
    SCHEMA_NAME AS db、
    IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, '*', '') AS full_scan、
    COUNT_STAR AS exec_count、
    SUM_ERRORS AS err_count、
    SUM_WARNINGS AS warn_count、
    (SUM_TIMER_WAIT) 合計待ち時間として、
    (MAX_TIMER_WAIT) として max_latency、
    (AVG_TIMER_WAIT) avg_latencyとして、
    (SUM_LOCK_TIME) AS lock_latency、
    フォーマット(SUM_ROWS_SENT,0) AS rows_sent、
    ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg、
    SUM_ROWS_EXAMINED AS 行数_検査済み、
    ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,
    SUM_CREATED_TMP_TABLES は tmp_tables として作成されます。
    SUM_CREATED_TMP_DISK_TABLES は tmp_disk_tables として作成されます。
    SUM_SORT_ROWS AS 行ソート、
    SUM_SORT_MERGE_PASSES は sort_merge_passes として、
    ダイジェスト AS ダイジェスト、
    最初に見たのはfirst_seen、
    LAST_SEEN は last_seen として
  performance_schema.events_statements_summary_by_digest d から
ここで、d
ORDER BY SUM_TIMER_WAIT DESC
制限 20;

これらの SQL ステートメントを習得することで、データベース内のどのテーブルに問題があるかを簡単に把握し、最適化する方法を検討できるようになります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL で SQL クエリを最適化するための 30 の一般的な方法について簡単に説明します。
  • MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)
  • MYSQL クエリの効率を向上させる 10 の SQL ステートメント最適化テクニック
  • MySQL SQL 文を最適化するための 10 のヒント
  • MySQL SQL ステートメント分析とクエリ最適化の詳細な説明
  • MySQL SQL文を最適化するためのヒント
  • MySQL の最適化: 高品質の SQL 文を書く方法
  • MySQL を最適化するための 19 の一般的かつ効果的な方法 (推奨!)

<<:  PXEを使用してCentOS7.6を自動的にインストールする方法の詳細なチュートリアル

>>:  jsのイベントループ機構の解析

推薦する

Vue+ElementUI はページング関数を実装します - mysql データ

目次1. 問題2. 解決策2.1 ページングコンポーネント2.2 データベースデータを取得する関数:...

WeChatミニプログラムで検索キーワードを強調表示するサンプルコード

1. はじめにプロジェクトで要件に遭遇したら、データを検索してキーワードを強調表示します。要件を受け...

mini-vueレンダリングのシンプルな実装

目次序文ターゲット最初のステップ:ステップ2:ステップ3:ステップ4:要約する序文現在主流のフレーム...

複数クリックを防ぐVueの実践

通常、クリック イベントは、メッセージ リマインダーのさまざまな状況に分割されます。これらが処理され...

JavaScript Canvas で三目並べゲームを実装

この記事では、JavaScript Canvasで三目並べゲームを実装するための具体的なコードを参考...

ローカルで起動したときに Vue プロジェクトがクッキーを保持できない問題を解決する

vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...

Win10にCentOS7仮想マシンをインストールする

1. VMware Workstation 64バージョンをダウンロードするhttps://www....

MySQL Undo ログと Redo ログの概要

目次元に戻すログUNDOログの生成と破棄UNDOログの保存元に戻すログ機能トランザクションの原子性の...

CSS3 で背景の透明化と不透明テキストを実装するサンプルコード

最近、画像上に半透明の背景でテキストを表示する必要があるという要件に遭遇しました。その効果は次のよう...

IDEA 2020.3.1 で Tomcat をデプロイし、最初の Web プロジェクトを作成するプロセスの詳細な説明

目次Tomcat の紹介Tomcat の展開Web プロジェクトの作成tomcatの設定プロジェクト...

Mac+IDEA+Tomcat の設定手順

目次1. ダウンロード2. インストールと解凍3. Tomcatを起動する4番目に、インストールが成...

Faint: 「Web2.0 を使用して標準に準拠したページを作成する」

今日、ある人がウェブサイト開発プロジェクトについて話をしてくれました。具体的な要件について話すと、「...

HTML フォームタグチュートリアル (3): 入力タグ

HTML フォーム タグのチュートリアル。このセクションでは、主に Web ページで INPUT タ...

XHTML でのハイパーリンク タグの使用に関するチュートリアル

ハイパーリンク。「リンク」とも呼ばれます。ハイパーリンクは、私たちが閲覧する Web ページのいたる...