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のイベントループ機構の解析

推薦する

MySQL で浮動小数点データを文字データに変換するときに起こりうる問題の詳細な説明

序文この記事は主に、MySQL で浮動小数点型を文字型に変換するときに発生する問題を紹介します。これ...

Bootstrap 3.0 学習ノート CSS関連補足

この記事の主な内容は次のとおりです。 1. ブラウザのサポート2. 画像3. レスポンシブツール4....

DELL R730 サーバーの構成 RAID とインストール サーバー システムとドメイン制御の詳細なグラフィック チュートリアル

最近、会社で DELL R730 サーバーを購入したのですが、偶然次のチュートリアルを見つけたので、...

docker-compose ポートと expose の違いの詳細な説明

docker-compose でコンテナ ポートを公開する方法は、ports と expose の ...

Ubuntu で XFS ファイルシステム用の LVM を作成する方法

序文lvm (論理ボリューム マネージャー) 論理ボリューム管理は、Linux システムのニーズを満...

HTML でフレームセット タグを使用するチュートリアル

フレームセット ページは通常の Web ページとは多少異なります。依然として <HTML>...

MySql クライアントが数秒で終了する問題を解決する (my.ini が見つからない)

問題の説明 (環境: windows7、MySql8.0)今日、MySql をインストールした後、M...

CSS3 フィルターを使用して PNG 画像の色を変更するサンプル コード

この方法は、CSS3のdrop-shadow filterを使用して、png画像の不透明部分に任意の...

TypeScript のユニオン型、交差型、型ガード

目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...

CSS を使用してサブ要素に応じて異なるスタイルを記述する方法

達成すべき効果: 必要なもの1枚、2枚、3枚とスタイルが異なります。子要素の判定はjsで完結できます...

データベース接続のURLの詳細な説明と概要

データベース接続のURLの詳細な説明と概要JDBC URL = プロトコル名 + サブプロトコル名 ...

HTMLタグIDは変数にできる

<table id=" <%=var1%>">、var1...

http.server に基づく LAN サーバーの構築プロセスの分析

皆さんはこのような状況に遭遇したことがあるでしょうか。プロジェクトや研究開発を行う際に、緊急にファイ...

CentOS システムの rpm インストールと Nginx の設定

目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...

Reactコンポーネントをフルスクリーンにする方法

導入この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。その理由は...