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

推薦する

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

ApacheとTomcatを組み合わせて静的状態と動的状態を分離する方法

実験環境ApacheとTomcatは両方ともIPアドレス192.168.153.136のホストにイン...

Nginx で Angular プロジェクトを展開する際の落とし穴

コンパイル後にAngularプロジェクトをNginxにデプロイする方法をオンラインで検索すると、ほと...

モバイルでのHTML5経由のファイルアップロード

ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても...

MySQLテーブル名の大文字と小文字を区別しない設定方法の詳細な説明

デフォルトでは、Linux の MySQL はテーブル名の大文字と小文字を区別します。 MySQL ...

Reactを使用して画像認識アプリを実装する方法

まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...

Linux で LVGL エミュレータをコンパイルする際のエラーの解決方法

目次1. エラー現象2. エラー分析3. エラー解決1. エラー現象仮想マシンでLVGLエミュレータ...

DockerプライベートイメージライブラリとAlibaba CloudオブジェクトストレージOSSの簡単な分析

Docker プライベートイメージライブラリDockerプライベートイメージライブラリとAlibab...

MySQLのREDOログとUNDOログの詳細な説明

MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...

MySQLクエリ結果をCSVにエクスポートする方法

MySQL クエリ結果をcsvにエクスポートするには、通常、php を使用して mysql に接続し...

Baota Linux パネル コマンド リスト

目次Pagodaをインストールする管理塔Nginx サービス管理Apache サービス管理MySQL...

vue フロントエンド HbuliderEslint リアルタイム検証 自動修復設定

目次HBuilderX での ESLint プラグインのインストールカスタム eslint-js ル...

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

CentOS7.5 MySQLのインストールチュートリアル

1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...

CSS に基づいて MaterialUI ボタン​​クリックアニメーションを実装し、それを React コンポーネントにカプセル化します。

序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...