前回は、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 をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: PXEを使用してCentOS7.6を自動的にインストールする方法の詳細なチュートリアル
1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...
実験環境ApacheとTomcatは両方ともIPアドレス192.168.153.136のホストにイン...
コンパイル後にAngularプロジェクトをNginxにデプロイする方法をオンラインで検索すると、ほと...
ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても...
デフォルトでは、Linux の MySQL はテーブル名の大文字と小文字を区別します。 MySQL ...
まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...
目次1. エラー現象2. エラー分析3. エラー解決1. エラー現象仮想マシンでLVGLエミュレータ...
Docker プライベートイメージライブラリDockerプライベートイメージライブラリとAlibab...
MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...
MySQL クエリ結果をcsvにエクスポートするには、通常、php を使用して mysql に接続し...
目次Pagodaをインストールする管理塔Nginx サービス管理Apache サービス管理MySQL...
目次HBuilderX での ESLint プラグインのインストールカスタム eslint-js ル...
1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...
1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...
序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...