ホームページ バックエンド開発 PHPの問題 php mysqlのスロークエリとは何ですか?

php mysqlのスロークエリとは何ですか?

Nov 10, 2021 am 09:49 AM
mysql php 遅いクエリ

php mysql スロー クエリとは、比較的ゆっくり実行される SQL ステートメントをログに記録することを指します。スロー クエリ ログをオンにすると、MySQL は指定された時間を超えてクエリを実行するステートメントを記録できます。パフォーマンスのボトルネックを特定して分析することで、データベース システムのパフォーマンスが適切に最適化されます。

php mysqlのスロークエリとは何ですか?

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php mysql が遅いとは何ですかクエリ?

MySQL スロー クエリは、実行速度が遅い SQL ステートメントをログに記録します。この機能を使用するには、事前に有効にする必要があります。

1. はじめに

スロー クエリ ログをオンにすると、MySQL は指定時間を超えたクエリを記録できるようになり、パフォーマンスのボトルネックを特定して分析することで、データベース システムのパフォーマンスをより適切に最適化できます。

2. パラメータの概要

slow_query_log スロー クエリのオープン ステータス

slow_query_log_file スロー クエリ ログが保存される場所 (このディレクトリには、MySQL 実行アカウントの書き込み権限が必要です)。通常は MySQL データ ストレージ ディレクトリに設定されます)

long_query_time クエリが記録されるまでにかかる秒数。デフォルトは 10 秒です。

3. スロー クエリを有効にする

( 1) スロークエリ関連パラメータの表示

mysql> show variables like 'slow_query%';
+---------------------------+-----------------------------------+
| Variable_name             | Value                              |
+---------------------------+-----------------------------------+
| slow_query_log            | OFF                                |
| slow_query_log_file       | /usr/local/var/mysql/slow.log          |
+---------------------------+-----------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
ログイン後にコピー

(2) 設定方法

方法1:グローバル変数の設定

slow_query_logグローバル変数を「ON」状態に設定

mysql> set global slow_query_log='ON';
ログイン後にコピー

スロークエリログの設定 保存場所

mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';
ログイン後にコピー

スロークエリ時間を設定し、1秒を超えた場合にクエリを記録

mysql> set global long_query_time=1;
ログイン後にコピー

方法2:設定ファイルの設定

[mysqld ] の設定ファイル my.cnf を変更します。 以下に

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/var/mysql/slow.log 
long_query_time = 1
ログイン後にコピー

を追加します (3) MySQL サービスを再起動します

service mysqld restart
ログイン後にコピー

(4) 遅いクエリ ログの分析

遅いクエリ ログをインターセプトします:

# Time: 180918 19:06:21
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707197
# Query_time: 1.015429  Lock_time: 0.000116 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '78436'
            and app_type = 'YGY'
        order by binding_time desc;
# User@Host: proxy[proxy] @  [192.168.0.16]  Id: 6707236
# Query_time: 1.021662  Lock_time: 0.000083 Rows_sent: 1  Rows_examined: 44438
SET timestamp=1537268781;
select
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,
        nodisturb_mode, nodisturb_start_time,
        nodisturb_end_time, binding_time, device_os_type, app_type, state
        from app_mobile_device
        where user_id = '14433'
            and app_type = 'YGY'
        order by binding_time desc;
ログイン後にコピー

ここで確認できます:

Query_time (遅いクエリ ステートメントのクエリ時間) が設定された 1 秒を超えている、

Rows_sent (遅いクエリ ステートメントのクエリ時間)クエリの戻りレコード)ここでは 1 つのレコードのみが返されます

Rows_examined (遅いクエリによってスキャンされた行の数) 44438 -> ここから、問題が巨大であることがおそらくわかります

次にこれを入れますSQL ステートメントをデータベースに入力して実行し、EXPLAIN 分析を使用して実行計画を確認します。

EXPLAIN                                
select                                 
        id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag,                        
        nodisturb_mode, nodisturb_start_time,                          
        nodisturb_end_time, binding_time, device_os_type, app_type, state                          
        from app_mobile_device                         
        where user_id = '78436'                            
            and app_type = 'YGY'                       
        order by binding_time desc;
ログイン後にコピー

クエリ結果は次のとおりです。

php mysqlのスロークエリとは何ですか?

パラメータの説明:

php mysqlのスロークエリとは何ですか?

ここで確認できます: rows はクエリされる行数です。40,000 行を超えるクエリが実行されているため、明らかに遅いです。

ここにはいくつかの条件があり、インデックスが使用されていないため、インデックスを追加する唯一の方法は、通常の複数列インデックスをここの選択に追加することです。このテーブルは最初に設計されたものであるため、問題が発生しました。その結果、データが重複し、一意のインデックスを設定できなくなります。

ALTER  TABLE  app_mobile_device  ADD  INDEX user_app_type_only (  `user_id` ,`app_type` )
ログイン後にコピー

インデックスが設定されました。今の SQL の実行計画を見てみましょう。

#チェックされた行数が大幅に減少していることがわかります。 php mysqlのスロークエリとは何ですか?

この時点で、スロークエリの使用と最適化は基本的に完了しました。

推奨学習: 「

PHP ビデオ チュートリアル

以上がphp mysqlのスロークエリとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

2024 年の開発者向け PHP CMS プラットフォーム トップ 10 2024 年の開発者向け PHP CMS プラットフォーム トップ 10 Dec 05, 2024 am 10:29 AM

CMSはコンテンツマネジメントシステムの略称です。これは、ユーザーが高度な技術知識を必要とせずにデジタル コンテンツを作成、管理、変更できるようにするソフトウェア アプリケーションまたはプラットフォームです。 CMS を使用すると、ユーザーはコンテンツを簡単に作成および整理できます

PHPの配列の最後に要素を追加する方法 PHPの配列の最後に要素を追加する方法 Feb 07, 2025 am 11:17 AM

配列は、プログラミングのデータを処理するために使用される線形データ構造です。アレイを処理している場合は、既存の配列に新しい要素を追加する必要があります。この記事では、各方法のコード例、出力、時間と空間の複雑さ分析を使用して、PHPの配列の最後に要素を追加するいくつかの方法について説明します。 アレイに要素を追加するさまざまな方法は次のとおりです。 四角い括弧を使用します[] PHPでは、配列の最後に要素を追加する方法は、四角い括弧[]を使用することです。この構文は、単一の要素のみを追加する場合にのみ機能します。以下は構文です。 $ array [] = value; 例

See all articles