読みやすいワークロードのMySQLを最適化します
読み取りが多いワークロードのMySQLパフォーマンスを向上させるには、次の手順に従ってください。1。特に条項と結合条件で頻繁にクエリされた列にインデックスを追加し、マルチコラムクエリの複合インデックスを避けながら、頻繁にクエリされた列にインデックスを追加します。説明を使用してインデックスの使用を確認します。 2。MySQL 5.7以前を使用して64MB〜256MBのような妥当なサイズを設定してMySQL 5.7以前を使用している場合は、クエリの設定をチューンクエリ設定しますが、MySQL 8.0以降でこの手順をスキップしてください。 3.必要な列のみを選択し、無効にすることなく適切に正規化し、非正規化または静的データのキャッシングを考慮し、遅いクエリログを介して長期的なクエリを識別することにより、スキーマとクエリを最適化します。 4.読み取りレプリカをレバレッジして読み取りトラフィックを読み取り、読み取りをはるかに超えて書き込みを超えて、アプリがレプリケーションの遅れを処理し、必要に応じてクラウドプロバイダーからマネージドレプリケーションソリューションを使用します。
MySQLは、デフォルトでは読みやすいワークロードを非常にうまく処理しますが、忙しいサイトで遅いクエリや高負荷が見られる場合は、パフォーマンスを改善するために実行できるいくつかの実用的な手順があります。

1.適切なインデックス作成戦略を使用します
インデックスは、読み取り操作をスピードアップすることに関して、あなたの親友です。それらがなければ、MySQLはテーブル全体をスキャンして一致する行を見つける必要があります。これは、データが増加するにつれて遅くなります。
- 頻繁にクエリされた列にインデックスを追加します。特に、条件と結合条件で使用される列。
- 過度のインデックスを避ける - すべてのインデックスがオーバーヘッドを追加して操作を書き込みます。
- 複数の列でフィルタリングするクエリに複合インデックスを使用することを検討してください。たとえば、
user_id
およびcreated_at
で検索することが多い場合、両方の複合インデックスは、個別のインデックス以上のものに役立つ場合があります。
よくある間違いは、そうでないときにインデックスが使用されていると仮定することです。選択したクエリの前にEXPLAIN
を使用して、MySQLの実行方法を確認してください。

2。クエリキャッシュ設定をチューニングする(該当する場合)
クエリキャッシュをサポートするMySQLバージョン(MySQL 5.7以前など)をまだ使用している場合は、調整する価値がある場合があります。クエリキャッシュは、選択されたクエリの結果を保存するため、同一のリクエストのために再実行する必要はありません。
- クエリキャッシュ(
query_cache_type = 1
)を有効にし、合理的なサイズ(query_cache_size
)を設定します。大きすぎて競合を引き起こす可能性があります。通常、約64MBから256MBが良い出発点です。 - 注: MySQL 8.0はクエリキャッシュを削除したため、これは古いバージョンを使用している場合にのみ適用されます。
すでに新しいバージョンを使用している場合、またはほとんど一意のクエリを扱っている場合は、この手順をスキップしてください。クエリキャッシュはとにかくあまり役に立ちません。

3.スキーマとクエリを最適化します
問題はサーバーの設定ではなく、データの構造方法やクエリの書き込み方法である場合があります。
- 必要なもののみを選択します -
SELECT *
を避けます。不要な列を取得すると、ディスクI/Oとメモリの使用が増加します。 - 適切に正常化しますが、無理をしないでください。深い結合は、重い読み物の下で高価になる可能性があります。
- 頻繁にアクセスするがめったに変化しないデータのようなredisのような非正規化またはキャッシュ層を考慮してください。
また、スロークエリログやパフォーマンススキーマなどのツールを使用して、長期にわたるクエリを見てください。 1つの悪いクエリだけを修正すると、大きな違いが生じる可能性があります。
4.レプリカを読むレバレッジ
単一のサーバーでできる限り最適化した場合、読み取りレプリカを追加することは堅実な次のステップです。
- レプリカを使用すると、メインデータベースから読み取りトラフィックをオフロードできます。
- それらは、読み取りがはるかに数字の書き込みをするアプリケーションに特に役立ちます。
- アプリが複製遅れを処理できることを確認してください。一部のシステムでは、スティッキーセッションまたはフォールバックロジックを使用して、ユーザーが一貫したデータを確認してください。
レプリケーションのセットアップは以前は注意が必要でしたが、ほとんどのクラウドプロバイダーは現在、プロセスを簡素化するマネージドソリューションを提供しています。
これらの変更のほとんどは、大きな建築的変化を必要としません。インデックス作成とクエリの最適化から始めて、必要に応じてレプリカのセットアップに移動します。それは魔法ではありません - 適切な詳細に注意を払うだけです。
以上が読みやすいワークロードのMySQLを最適化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

MySQLにすべてのデータベースを表示するには、ShowDataBaseコマンドを使用する必要があります。 1.MySQLサーバーにログインした後、ShowDatabaseを実行できます。現在のユーザーがアクセスする許可があるすべてのデータベースをリストするコマンド。 2。information_schema、mysql、performance_schema、sysなどのシステムデータベースはデフォルトで存在しますが、許可が不十分なユーザーはそれを見ることができない場合があります。 3. selectschema_namefrominformation_schema.schemataを介してデータベースをクエリしてフィルタリングすることもできます。たとえば、システムデータベースを除外して、ユーザーが作成したデータベースのみを表示します。必ず使用してください

既存のテーブルにプライマリキーを追加するには、AddPrimaryKey句を使用してAlterTableステートメントを使用してください。 1.ターゲット列にヌル値も重複もなく、notnullと定義されていることを確認してください。 2.単一列のプライマリキー構文は、変更可能なテーブル名AddPrimaryKey(列名)です。 3.マルチカラムの組み合わせプライマリキー構文は、変更可能なテーブル名AddPrimaryKeyです(列1、列2)。 4.列がnullを許可する場合、最初に変更を実行してnotnullを設定する必要があります。 5.各テーブルには1つの主キーのみがあり、追加する前に古いプライマリキーを削除する必要があります。 6.自分で増やす必要がある場合は、Modifyを使用してAuto_incrementを設定できます。操作前にデータを確認してください

MySQLサービスが実行されているかどうかを確認して、sudosystemctlstatusmysqlを使用して確認および開始します。 2.リモート接続を許可してサービスを再起動するために、バインドアドレスが0.0.0.0に設定されていることを確認してください。 3. 3306ポートが開いているかどうかを確認し、ポートを許可するファイアウォールルールを確認して構成します。 4。「アクセス」エラーの場合、ユーザー名、パスワード、ホスト名を確認し、mysqlにログインしてmysql.userテーブルをクエリしてアクセス許可を確認する必要があります。必要に応じて、 'your_user'@'%'を使用するなど、ユーザーを作成または更新して承認します。 5. caching_sha2_passwordにより認証が失われた場合

MySQLDUMPを使用することは、MySQLデータベースをバックアップする最も一般的で効果的な方法です。テーブル構造とデータを含むSQLスクリプトを生成できます。 1.基本的な構文は、mysqldump-u [ユーザー名] -p [データベース名]> backup_file.sqlです。実行後、パスワードを入力してバックアップファイルを生成します。 2。-DATABASESオプションを使用して複数のデータベースをバックアップします:mysqldump-uroot-p--databasedb1db2> multive_dbs_backup.sql。 3.すべてのデータベースをバックアップしてください-all-database:mysqldump-uroot-p

b-TreeindexeSareBestformostphpapplications、astheisupportequalityandrangequeries、sorting、andareidealforumnsuseduseduseduseduseduseduseduseds; ororderbyclauses;

UnionRemovesDulisionallkeepsallowsincludingDuplicates;

テーブルは、ロックテーブルを使用して手動でロックできます。読み取りロックにより、複数のセッションが読み取ることができますが、書き込むことはできません。 Write Lockは、現在のセッションの排他的な読み取りおよび書き込み許可を提供し、他のセッションは読み書きできません。 2。ロックは現在の接続のみです。 StartTransactionおよびその他のコマンドの実行は、暗黙的にロックをリリースします。ロック後、ロックされたテーブルのみにアクセスできます。 3. Myisamテーブルのメンテナンスやデータバックアップなどの特定のシナリオでのみ使用します。 INNODBは、パフォーマンスの問題を回避するための... forupdateなどのトランザクションおよび行レベルのロックを使用することを優先する必要があります。 4。操作が完了した後、ロックテーブルを明示的にリリースする必要があります。そうしないと、リソースの閉塞が発生する可能性があります。

enableBinaryLoggingByConfiguringLoglog-binandserver-idinmy.cnf/my.iniandrestartmysql、confirming withshowvariableslike'log_bin '; 2。 takeafullbackusingmysqldumpwith - single-transaction、 - flush-logs、および - master-data = 2toensureconsistencyand andRecordbinlogposiTi
