目次
原因
ターンアラウンド
パフォーマンスの最適化
まとめ
ホームページ トピック phpmysql MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

Dec 29, 2022 pm 04:21 PM
php

この記事では、mysql に関する関連知識を提供します。主に、PHP アプリケーションのパフォーマンスを大幅に最適化するためのインデックス作成に関する関連コンテンツを紹介します。一緒に見ていきましょう。皆様のお役に立てれば幸いです。

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

原因

私の友人は 2 か月前にプロジェクトを行う予定で、オンラインでの迅速なプロモーションを目的として、直接企業のソースコードを購入し、販売者にオンラインで展開させました。ソースコードを見た後、私は友人に「騙されました。このソースコードの品質は少し悪く、ユーザー数が増えると重大なパフォーマンスの問題が発生する可能性があります。」と直接言いました。

私にはそのような評価を行うための根拠があります:

  • 準リアルタイム アプリケーションとして、コア コードは PHP で書かれており、多数のコードの同時実行性が実現されています。シナリオはデータベース テーブル レコードによって制御され、繰り返しのリクエスト;

  • PHP 開発は問題ありませんが、他のエンジニアは CLI モードがあることを知らなかったようですが、スケジュールされたモードを使用していますプログラムのノンストップ実行を実現するためのタスク (crontab) は膨大であるため、毎分数十のカールスケジュールされたタスクが実行されます;

  • class1.php と class1- が多数あります。 1.phpファイルがコード内に存在します 一見しただけでは存在が分かりにくいです 目的;

  • データベースを読み込むためのループコードや命名規則が多いです混乱しています。

もちろん、儲かるコードは良いコード(相手はそのコードで儲かっている)なので、あまり気にしません。当初は、4 コア 8G 構成では 10,000 人の顧客にサービスを提供するのは難しいが、5,000 人あれば十分であると考えられていました。

ターンアラウンド

今週、突然、Alibaba Cloud から CPU 使用率が高すぎるというアラーム テキスト メッセージや電子メールを頻繁に受け取りました。マーケティングプロモーションはうまくいき、ユーザー数は大幅に増加したと思いますか?友達に聞いたらユーザーは300人もいなかった!

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

#この時点で、このコードの実際のパフォーマンスは思ったよりも悪く、パフォーマンスに重大な問題があることに気付きました。このリソース消費率によると、ハードウェアのアップグレードは底なし沼であり、パフォーマンスの最適化が正しい方法であることがわかります。

パフォーマンスの最適化

コードを入手してから 2 か月が経ちましたが、暇なときに時々眺めており、すでにその構造と主な機能については大体理解しています。深刻なパフォーマンスの問題が発生したので、パフォーマンスの最適化を試してみましょう。

数十のスケジュールされたタスクが継続的に実行され、システム動作を継続的に駆動するという事実を考慮すると、スケジュールされたタスクの関連機能が最初に理解される必要があります。私自身の理解に基づいて、まず、不要になった 20 以上の予定されていたタスクを一時停止しました。無駄なスケジュールされたタスクを一時停止すると、システム全体の CPU 使用率が 60% 以上に低下し、迷惑なリマインダーのテキスト メッセージや電子メールがついに止まりました。 1 日待っても、友人からは機能が影響を受けたという報告はありませんでした。これは、このアイデアと出発点が正しかったことを示しています。

しかし、200 人を超えるユーザーがこのようにリソースを消費しているのですから、何か問題があるはずです。今日暇なときにサーバーに再度ログインし、top コマンドを実行したところ、mysql プロセスが CPU リソースの 200% 以上を占有していることがわかりました。ソース コードを読んだ後、MySQL の使用率が高いのには理由があり、それが可能であることはわかりましたが、なぜこれほど多くのリソースを消費するのかを知りたいと思っています。

MySQL サーバーにログインし、スロー ログが有効かどうかを確認します: '%slow%' のような変数を表示し、スロー クエリ ログが有効であることを確認します:

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

続行 ログを確認すると、特定の SQL ステートメントが常にログに表示されていることがわかります。

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

##380,000 行を超えるレコードがスキャンされたことがわかります。この SQL ステートメントが実行されたとき。ステートメントに含まれる 2 つのテーブルのうち 1 つは 600 を超えるレコードを持ち、もう 1 つは 40,000 を超えるレコードを持ちます。これは、40,000 を超えるレコードを持つテーブル全体を数回スキャンすることに相当します。非常に遅いのも不思議ではありません。

次に、2 つのテーブルのインデックスを確認します。主キーとして自動インクリメントされる ID を除いて、他のインデックスは作成されません。 Explain を使用してステートメントを実行すると、インデックスが使用されていないことがわかります。

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

次に、2 つのテーブルのクエリ条件の uid 列と session_id 列にインデックスを作成します。インデックスの作成が完了すると、目に見える CPU 使用率とシステム負荷が軽減されます。クエリ ステートメントを実行するには、もう一度 Explain を使用します。インデックス情報が使用され、スキャンされる行の数が大幅に減少しました:

MySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化する

上記の最適化後、現在の全体的な CPUアプリケーションの使用率は 5% 15% 付近で、MySQL の CPU 使用率は 4 から 0.3 に低下しました。最後に、当面はパフォーマンスの問題を心配する必要はなく、サーバー構成が 1 コア CPU に削減された場合でも、引き続き維持できます。

コードをさらに確認し、ログと組み合わせてインデックスを作成し、いくつかのクエリ ステートメントを変更します。CPU 使用率は約 6% に低下しました。最終的に、当面はパフォーマンスの問題を心配する必要はありません

まとめ

開発プロジェクトでは、エンジニアは「使える」コードだけでなく「使いやすい」コードも書く必要があります。この例では、2 つのインデックスを作成することにより、システムのパフォーマンスが大幅に向上し、コードが「使いやすい」から「使いやすい」に変わります。

この記事で説明するパフォーマンスの最適化は運用と保守に重点を置いており、コード内のパフォーマンスの最適化にはまだ触れていません。ただし、一般原則は正しいです。つまり、より多くのキャッシュを使用し、低速 IO デバイスからの同期読み取りをできるだけ減らすということです。

推奨学習: 「mysql ビデオ チュートリアル 」、「PHP ビデオ チュートリアル

以上がMySQL インデックスを作成して PHP アプリケーションのパフォーマンスを大幅に最適化するの詳細内容です。詳細については、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 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

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 は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

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

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

See all articles